Несколько дней новогоднего волшебства:
Успейте начать обучение в 2018-ом году со скидкой до 30%!
Выбрать курс

Клонирование PDB из одной контейнерной базы в другую

SUBD_Deep_27.11_site-5020-e4395b.png

Появилась, казалось бы, простая задача — сделать копию рабочего проекта для разработки нового. Уточню — обе контейнерные базы живые, и в них крутятся проекты. Но это оказалось не столь тривиально.

Просто снять backup rman’ом и восстановить его на другой cdb невозможно. Ибо другая cdb ничего об этом pdb не знает. Использовать unplug — тоже не подходит, ведь рабочую базу нельзя тормозить. Везде описана процедура клонирования через dblink, но везде также требовалось в начале перевести исходную pdb в read only состояние через остановку.

Обнаружилось несколько методов клонирования

  1. Через rman — duplicate через auxiliary cdb создаётся отдельный экземпляр (instance) для новой cdb, делается duplicate нужной pdb (при этом необходимая структура cdb тоже дублицируется). Из минусов — нужен общий каталог бэкапов, затем нужно отсоединить pdb и сделать clone в нужную cdb.
  2. Через rman, используя transportable tablespace (в подробности не вдавался).

В конце концов нашли правильное сочетание для поиска нужной инструкции — PDB HOT CLONE, и оказалось всё достаточно просто. Oracle 12c поддерживает клонирование на лету, поэтому необязательно переводить pdb в read only.

Исходные данные: — CDB_source — исходная контейнерная база; — PDB_source — исходная PDB; — CDB_dup — контейнерная база, куда производим клонирование.

Поехали!

На CDB_source создаём пользователя для клонирования (во избежание зависаний все контейнеры должны быть открыты):

SQL> CREATE USER c##remote_clone_user IDENTIFIED BYremote_clone_user container=all;
User created.
SQL> GRANT CREATE SESSION, CREATE PLUGGABLE DATABASE TO c##remote_clone_user CONTAINER=ALL;

на CDB_dup прописываем tns:

cdb_source =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = cdb_source)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = cdb_source)
)
)

создаём DBLINK и клонируем pdb:

SQL> CREATE PUBLIC DATABASE LINK clone_link
CONNECT TO c##remote_clone_user IDENTIFIED BYremote_clone_user USING 'CDB_SOURCE';

Database link created.

SQL> create pluggable database pdbdup from PDB_SOURCE@clone_link;

Pluggable database created.

SQL> alter pluggable database pdbdup open;

Pluggable database altered.

На этом всё. Если хотите узнать больше, задавайте вопросы в комментариях или записывайтесь на курс "Реляционные СУБД"!

Автор
0 комментариев
Для комментирования необходимо авторизоваться