解决DB2事物日志满、扩充表字段长度和表空间的命令

时间:2021-05-23 22:53:07

解决DB2事物日志满、扩充表字段长度和表空间的命令

转:http://blog.sina.com.cn/s/blog_4c0137d10100bb5r.html

 一、通常我们在使用db2导入数据或进行别的操作时会遇到事物日志已满的情况,导致操作无法继续。

在windows系统中,我们可先db2 get db cfg for dbname(要修改的数据库名) 来查看数据的配置情况。

这时根据你的需要来修改日志文件的大小、主日志文件数目和辅助日志文件的数目。命令如下:

、db2 "update db cfg for dbname using logfilsiz XXX (4-262144)".

、db2 "update db cfg for dbname using logprimary X (2-256)".

、db2 "update db cfg for dbname using logsecond XX (0-254)".

在进行这些操作的时候都要断掉应用和数据库的连接。

二、如何扩充数据的表空间。

首先,可通过 db2 list tablespaces show detail 来查看你的表空间状况。

表空间有二种类型:

、SMS【SYSCATSPACE】,为系统管理表空间。

、DMS,用户自己的表空间,为数据库管理表空间。

通过上面的命令来查看表空间中总的表空间(Total pages)和 剩余表空间(Free pages),如果是系统管理表空间(SMS)不够,则是由于磁盘空间不够,需要增加磁盘空间。如果是数据库管理表空间(DMS)不够,则需要扩展表空间。扩展表空间的命令为:
db2 alter tablespace extend (all <num_pages> )
例如:db2 alter tabblespace yourtablespace extend(all 1024M)
扩展了数据库表空间1 G. 三、扩充表中字段的长度。 由于数据的变化导致原本varchar()字段长度不够使用,其实很简单希望对大家有帮助: db2 "alter table tabname alter column colname set data type varchar(4000) " 修改tabname表的colname字段将他的字段长度设置为4000。 data type 后的数据类型要和tabname中的colname类型一致哦。

例如:

引用:http://blog.sina.com.cn/s/blog_7155eb38010156se.html

问题原因:今天在删除CP2_BEPS124表数据的时候,由于一次删除的记录有31W条,导致DB2直接报 The transaction log for the database is full这个错误,

此时数据库已经不能进行查询意外的任何操作。在网上查询之后得知,需要修改数据库的日志文件大小和数量,然后重启数据库,才能删除大量数据,步骤如下

切换到用户db2inst2

db2 get db cfg for cnaps2

此命令可以查看当前数据库的日志文件大小(LOGFILSIZ),主日志数(LOGPRIMARY),辅日志数(LOGSECOND)。

db2 update db cfg for cnaps2 using LOGPRIMARY 50

修改主日志数为50

db2 update db cfg for cnaps2 using LOGSECOND 20

修改辅日志数为20

db2 update db cfg for cnaps2 using LOGFILSIZ 10240

修改日志大小为10240

此时,活动日志空间的最大容量为(20 + 50) * 10240 * 4KB

 停止数据库:db2stop.这时会报SQL1025N  未停止数据库,因为数据库仍是活动的。
 执行:db2 list application 查看目前数据库中活动的链接
 db2 force application all 杀掉所有活动的链接,此时可以顺利的停止数据库了。
 重新启动数据库:db2start
 db2 get db cfg for cnaps2 查看当前数据库日志配置,是否为上面修改后的数字。

成功后,可以顺利的操作大数据啦!