Назад | Перейти на главную страницу

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.

Изменяю ли я правильные значения для своей проблемы и почему значения не меняются, даже если я перезапустил базу данных?

Вы должны убедиться, что изменения действуют как на диске, так и в памяти. Вы можете проверить это с помощью db2pd команда (выпущена с версией 8.2) или с помощью ПОЛУЧИТЬ КОНФИГУРАЦИЮ БАЗЫ ДАННЫХ команда, упомянутая Яном выше.

Основное отличие состоит в том, что команде db2pd не требуется соединение с базой данных, а как ПОЛУЧИТЬ КОНФИГУРАЦИЮ БАЗЫ ДАННЫХ ДЛЯ ДАННЫХ ПОКАЗАТЬ ДЕТАЛИ требуется соединение (обратите внимание на предложение SHOW DETAIL, для этого требуется соединение, а не стандартная команда GET DATABASE CONFIGURATION FOR dbname)

db2pd -d dbname 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 dbname
  • db2stop
  • ipclean -a
  • db2start
  • db2 активировать db dbname

Вы меняете правильные параметры, но похоже, что вы на самом деле не перезапускали базу данных, что объясняет, почему 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 запустит указанную базу данных, после чего она выделит файлы журнала с новыми параметрами.