IBM DB2 9.7,无法增加 LOGFILSIZ 或 LOGPRIMARY 值

IBM DB2 9.7,无法增加 LOGFILSIZ 或 LOGPRIMARY 值

我正在使用 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立即生效,但LOGPRIMARYLOGFILSIZ尚未更改。您可以使用命令查看这些配置参数的当前值和延迟值(待定值)GET DATABASE CONFIGURATION FOR <yourdb> SHOW DETAIL。我猜您会看到LOGPRIMARY和的延迟值LOGFILSIZ分别为 10 和 4000。

确保完全回收 DB2 数据库的最简单方法是停止并重新启动整个实例(使用db2stop forcedb2start命令)。之后,您可以选择使用语句激活数据库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 激活数据库数据库名称

相关内容