我正在使用 IBM DB2 9.7 LUW 数据库。我当前的循环日志记录数据库配置值如下:
LOGFILSIZ: 1024
LOGPRIMARY: 13
LOGSECONDARY: 15
我收到错误,指出事务日志已满,因此我需要增加日志大小。我尝试了以下操作:
LOGFILSIZ: 4000
LOGPRIMARY: 10
LOGSECONDARY: 20
我也重启了数据库。LOGSECONDARY
改为 20,但LOGFILSIZ
仍为 1024,LOGPRIMARY
仍为 13。
我是否针对我的问题更改了正确的值?为什么即使我重新启动了数据库,这些值也没有改变?
答案1
您正在更改正确的参数,但听起来好像您实际上并未重新启动数据库,这可以解释为什么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 启动相关的数据库,此时它将使用新参数分配日志文件。
答案2
您必须确保更改在磁盘和内存中均有效。您可以使用db2pd命令(随版本 8.2 发布)或使用获取数据库配置正如上面 Ian 所提到的命令。
主要区别在于 db2pd 命令不需要连接到数据库,而获取数据库配置 dbname 显示详细信息确实需要连接(请注意 SHOW DETAIL 子句,这需要连接 - 而不是标准的 GET DATABASE CONFIGURATION FOR dbname 命令)
db2pd -d 数据库名称 dbcfg | egrep ‘LOGFILSIZ|LOGPRIMARY|LOGSECOND’
这将列出以下 3 个值 -
Description Memory Value Disk Value
Log file size (4KB) (LOGFILSIZ) = 1024 4000
Number of primary log files (LOGPRIMARY) = 13 10
Number of secondary log files (LOGSECOND) = 20 20
您可能会注意到 LOGSECOND 的更改会立即在磁盘和内存中生效,而其他两个更改则需要重新启动数据库才能使更改在内存中生效 - 因此数据库才能真正使用它。
对于重新启动,您可以按照标准顺序 - 停用数据库,关闭实例,清理资源,启动实例,然后激活数据库并验证磁盘和内存上的上述值是否相同。
- db2 停用 db 数据库名称
- db2stop
- ipclean -a
- db2启动
- db2 激活数据库数据库名称