1

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

显然有一个命令:

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. 在我们的测试环境中甚至不是必需的。

有任何想法吗?谢谢!

4

2 回答 2

1

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

db2 list tables for schema triuser | grep " T " |awk '{print "ALTER TABLE "$1" NOT LOGGED INITIALLY"}'
于 2013-06-04T08:54:03.783 回答
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”执行。另一个选项有一个缺点,因为输出大小有问题;如果大于限制,无法执行(| 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
于 2013-06-05T06:21:45.330 回答