Поиск по этому блогу

вторник, 29 мая 2012 г.

DB2 роняем буферные пулы. Восстановление базы на сервер с меньшей оперативной памятью

При восстановлении копии DB2 с рабочего сервера, где оперативной памяти, как правило, много, на резервный (тестовый сервер), где оперативной памяти мало, для восстановления работоспособности базы данных требуется снизить размеры буферных пулов.

Переменная реестра  DB2_OVERRIDE_BPF



Для этого можно использовать отдельный скрипт

#!/bin/bash
# Функция, которая роняет буферные пулы
setdbcfg()
{
db2 CONNECT TO База user Пользователь using Пароль
db2 force application all
db2 CONNECT TO База user Пользователь using Пароль
db2 ALTER BUFFERPOOL IBMDEFAULTBP IMMEDIATE SIZE 50000 AUTOMATIC
db2 ALTER BUFFERPOOL BF_POOL1  IMMEDIATE SIZE 16400
… другие буферные пулы
# заодно уменьшаем кучу утилит
db2 -v update db cfg using UTIL_HEAP_SZ 65536
db2 CONNECT RESET
# рестарт
db2stop force
db2start
# вывод информации о памяти 
#db2mtrk -i -v -d
}
В принципе, если памяти для буферных пулов не хватит, то DB2 запустит их с минимальным размером, но случаются ситуации, когда подключиться к базе невозможно, в этом случае поможет переменная реестра  DB2_OVERRIDE_BPF

# устанавливаем размер буферных пулов в 1000 страниц
db2set DB2_OVERRIDE_BPF=1000
# стопаем, стартуем
db2stop force
db2start
После рестарта сервера все буферные пулы будут по 1000 страниц и мы сможем подключиться и сконфигурировать наши буферные пулы
восстанавливаем
#Возвращаем назад значение переменной реестра
db2set DB2_OVERRIDE_BPF=
db2stop force
db2start

Использование OVERFLOW LOG PATH
При восстановлении базы данных с повтором транзакций в опции ROLLWORWARD

RESTORE DATABASE db FROM "Путь к backup"
TO "Путь к базе"
INTO Имя базы
WITH 2 BUFFERS BUFFER 1024 PARALLELISM 1
WITHOUT PROMPTING;

ROLLFORWARD DATABASE Имя базы TO 2012-01-31-14.20.00.000000
(на дату в формате YYYY-MM-DD-HH-MM-SS.MS)
AND COMPLETE
OVERFLOW LOG PATH ("путь к логу");

Меняем пул буферов
CONNECT TO db_2;
ALTER BUFFERPOOL IBMDEFAULTBP IMMEDIATE SIZE 50000 AUTOMATIC;
CONNECT RESET;