我正在使用 IBM DB2 9.7 LUW 数据库。我当前的循环日志记录数据库配置值如下:
LOGFILSIZ: 1024
LOGPRIMARY: 13
LOGSECONDARY: 15
我收到事务日志已满的错误,因此我需要增加日志大小。我尝试了以下方法:
LOGFILSIZ: 4000
LOGPRIMARY: 10
LOGSECONDARY: 20
我还重新启动了数据库。LOGSECONDARY
更改为 20,但仍LOGFILSIZ
保持在 1024 和LOGPRIMARY
13。
我是否为我的问题更改了正确的值,为什么即使我重新启动了数据库,这些值也不会改变?
您正在更改正确的参数,但听起来好像您实际上并没有重新启动数据库,这可以解释为什么
LOGSECOND
立即生效,但LOGPRIMARY
尚未LOGFILSIZ
更改。您可以使用命令查看这些配置参数的当前值和延迟(待定)值GET DATABASE CONFIGURATION FOR <yourdb> SHOW DETAIL
。我怀疑你会看到 和 的延迟值LOGPRIMARY
分别LOGFILSIZ
是 10 和 4000。确保完全回收 DB2 数据库的最简单方法是停止并重新启动整个实例(使用
db2stop force
和db2start
命令)。之后,您可以选择使用该ACTIVATE DATABASE
语句激活数据库。不过,您不必关闭整个 DB2 实例。要正确地重新启动 DB2 数据库,您必须停用它(即,使数据库解除分配给它的所有内存)。您可以通过终止与数据库的所有连接(使用该
FORCE APPLICATION
语句)然后(如有必要)发出该DEACTIVATE DATABASE
语句来做到这一点。您可以通过发出命令来验证数据库是否完全停止LIST ACTIVE DATABASES
- 如果您的数据库不在返回的列表中,则它已停止。在此(或)之后与数据库的任何新连接
ACTIVATE DATABASE
都将导致 DB2 启动有问题的数据库,此时它将使用新参数分配日志文件。您必须确保更改在磁盘和内存中都有效。您可以使用db2pd命令(随版本 8.2 发布)或使用上面 Ian 提到的GET DATABASE CONFIGURATION命令检查这一点。
主要区别在于 db2pd 命令不需要连接到数据库,而GET DATABASE CONFIGURATION FOR dbname SHOW DETAIL确实需要连接(注意 SHOW DETAIL 子句,这需要连接 - 不是标准的 GET DATABASE CONFIGURATION FOR dbname 命令)
db2pd -d 数据库名称 dbcfg | egrep 'LOGFILSIZ|LOGPRIMARY|LOGSECOND'
这将列出以下 3 个值-
您可能会注意到 LOGSECOND 更改立即对磁盘和内存生效,而其他 2 个更改需要重新启动数据库才能使更改在内存中生效 - 因此数据库才能实际使用它。
对于重启,您可以按照标准顺序 - 停用数据库、关闭实例、清理资源、启动实例然后激活数据库并验证磁盘和内存上的上述值是否相同。