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