关闭IBM DB2 9.7 LUW中的日志记录

时间:2013-06-04 08:40:20

标签: logging db2

在部署到测试环境时,我遇到了事务日志变满的问题。我已经尝试增加日志大小,但我想如果可以一起禁用日志记录,那就更好了。至少在重置期间。

显然有一个命令:

alter table table-name not logged initially;

但是这里必须单独指定所有表。我正试图找到一种方法来做到这一点:

1. turn off logging
2. delete all tables in schema
3. create/populate tables in schema
4. turn logging back on

我有第2点和第3点,但不是1.和4.最后一点4.在我们的测试环境中甚至不需要。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

那里的桌子太多了?自动脚本有助于重复执行任务:

db2 list tables for schema triuser | grep " T " |awk '{print "ALTER TABLE "$1" NOT LOGGED INITIALLY"}'

答案 1 :(得分:0)

正如cnZach所写,您必须根据所获得的信息生成查询。您可以通过查询目录,然后创建一组语句来实现。

按照你的说法,禁用特定表中的日志记录的语句是

alter table table-name not logged initially;

但您必须从数据库中检索所有表或一组表。这可以通过查询目录

来完成
db2 "select substr(tabschame) || '.' || substr(tabname) \
from syscat.table where type = 'T' and tabschema not like 'SYS%'"

根据需求修改上一个查询(检索所需的表)后,修改查询以生成所有表的alter语句

db2 "select 'alter table ' || substr(tabschame) || '.' \
|| substr(tabname) || ' not logger initially' \
from syscat.table where type = 'T' and tabschema not like 'SYS%'"

如果需要,可以直接执行db2输出,或者只是将其发送到文件并稍后通过“db2 -tvf filename.sql执行。另一个选项有一个brawback,因为输出有问题size;如果它大于限制,则无法执行(| db2 + p -tv)

db2 "select 'alter table ' || substr(tabschame) || '.' \
|| substr(tabname) || ' not logger initially' \
from syscat.table where type = 'T' and tabschema not like 'SYS%'" | db2 +p -tv
相关问题