Перед нами встала задача перенести базу данных DB2 v8.1 со старого компьютера на новый.
Сразу оговорюсь, существуют более простые и надежные способы переноса база данных DB2, чем описанный ниже способ. Но кому-то он может пригодиться. Например, в том случае, если от базы данных остались лишь файлы.
Данный способ описывает перенос базы путем копирования файлов базы данных.
1) Нужно установить на новом компьютере DB2 той же версии, что и на старом компьютере
2) Следующий шаг - копирование папок, в которых содержаться файлы базы данных DB2. Для начала просмотрим какие есть табличные пространства, выполним следующий запрос:
list tablespaces
Будет выведена информация о существующих табличных пространств: ID табличного пространства, название табличного пространства и другая информация.
ID табличного пространства = 0
Имя = SYSCATSPACE
ID табличного пространства = 1
Имя = TEMPSPACE1
ID табличного пространства = 2
Имя = USERSPACE1
ID табличного пространства = 3
Имя = USERSPACE2
ID табличного пространства = 4
Имя = SYSTOOLSPACE
т.е. в данном случае у нас 5 табличных пространств.
Остается определить расположение этих табличных пространств на жестком диске. Для каждого табличного пространства нужно выполнить запрос, указав в качестве параметра ID табличного пространства.
list tablespace containers for 0;
list tablespace containers for 1;
list tablespace containers for 2;
list tablespace containers for 3;
list tablespace containers for 4;
Будет выведен список контейнеров табличных пространств:
Контейнеры табличных пространств для табличного пространства 0
Имя = C:\DB2\NODE0000\SQL00008\SQLT0000.0
Контейнеры табличных пространств для табличного пространства 1
Имя = C:\DB2\NODE0000\SQL00008\SQLT0001.0
Контейнеры табличных пространств для табличного пространства 2
Имя = C:\DB2\NODE0000\SQL00008\SQLT0002.0
Контейнеры табличных пространств для табличного пространства 3
Имя = C:\project\USER_DB_CONTAINER
Контейнеры табличных пространств для табличного пространства 4
Имя = C:\DB2\NODE0000\SQL00008\SYSTOOLSPACE
Обратите внимание, что кроме стандартного размещения файлов в папке
C:\DB2, также используется контейнер
C:\project\USER_DB_CONTAINER.
Из этого делается вывод: нужно перенести на новый компьютер папку
C:\DB2 и папку
C:\project.
3) Скопировав все необходимые папки на новый компьютер, открываем
Центр управления DB2.
Находим элемент
"Базы данных":
В контекстном меню этого пункта выберите
"Добавить..."
Откроется окно добавления базы данных:
Для начала выберите диск, автоматически будут считаны доступные базы данных на этом диске. Выберите свою базу и нажмите "OK". Если у вас несколько баз, то проделайте операцию для каждой базы данных.
Добавленные базы появятся в списке:
4) В случае, если у вас имеются распределенные (федеративные, federated) базы данных, то нужно включить поддержку федеративных баз и настроить user mapping.
Поддержка федеративных баз включается командой:
UPDATE DBM CFG USING FEDERATED YES DEFERRED;
После этого нужно перегрузить DB2. Это можно сделать через значок в трее:
У DB2 есть особенность: он берёт пользователей из операционной системы. После того, как мы заходим под своей учеткой на компьютер, база будет доступна и она не требует отдельного подключения к базе данных. Но не будут доступны псевдонимы, которые настроены на таблицы из федеративных баз данных.
При попытке обратиться к псевдониму выйдет следующая ошибка.
com.ibm.db.DataException: Ошибка менеджера баз данных. : [IBM][CLI Driver][DB2/NT]
SQL1101N Не удалось получить доступ к удаленной базе данных на узле ""
при указанном ID авторизации и пароле. SQLSTATE=08004
Нужно настроить пользователя и пароль для доступа к федеративной базе, не смотря на то, что базы находятся на одном компьютере и в одном инстансе. Если быть точнее, то нужно настроить отображение пользователя на удаленного пользователя с пароле (user mapping).
Для начала просмотрим существующие отображения пользователей:
select * from syscat.useroptions
Столбец
AUTHID - имя пользователя из операционной системы.
Столбец
SERVERNAME - имя федеративной базы
Столбец
OPTION храним одну из опций:
REMOTE_AUTHID или
REMOTE_PASSWORD
Столбец
SETTING - значение настройки: для
REMOTE_AUTHID - удаленный пользователь, для
REMOTE_PASSWORD - кэш от пароля удаленного пользователя.
В нашем случае данные пользователя операционной системы совпадают с данными удаленного пользователя.
Здесь возможно три случая:
a) Просто обновить пароль
ALTER USER MAPPING FOR DB2ADMIN SERVER COMMON OPTIONS
(SET REMOTE_PASSWORD 'your_password');
б) Обновить учетку удаленного пользователя и пароля
ALTER USER MAPPING FOR DB2ADMIN SERVER COMMON OPTIONS
(SET REMOTE_AUTHID 'new_remote_user_login', SET REMOTE_PASSWORD 'your_password');
в) Добавление нового(дополнительного) пользователя в таблицу отображений
CREATE USER MAPPING FOR YOUR_USER SERVER COMMON OPTIONS
(REMOTE_AUTHID 'remote_user', REMOTE_PASSWORD 'remote_password');
На этом перенос баз данных завершен!
p.s. Даже, если на новом компьютере у вас будут аналогичные удаленные пользователь с таким же паролями, советую обновить кэши паролей для всех пользователей в таблице отображений.