在部署到测试环境时,我遇到了事务日志变满的问题。我已经尝试增加日志大小,但我想如果可以一起禁用日志记录,那就更好了。至少在重置期间。
显然有一个命令:
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.在我们的测试环境中甚至不需要。
有什么想法吗?谢谢!
答案 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