Клонирование PDB из одной контейнерной базы в другую
Появилась, казалось бы, простая задача — сделать копию рабочего проекта для разработки нового. Уточню — обе контейнерные базы живые, и в них крутятся проекты. Но это оказалось не столь тривиально.
Просто снять backup rman’ом и восстановить его на другой cdb невозможно. Ибо другая cdb ничего об этом pdb не знает. Использовать unplug — тоже не подходит, ведь рабочую базу нельзя тормозить. Везде описана процедура клонирования через dblink, но везде также требовалось в начале перевести исходную pdb в read only состояние через остановку.
Обнаружилось несколько методов клонирования
- Через rman — duplicate через auxiliary cdb создаётся отдельный экземпляр (instance) для новой cdb, делается duplicate нужной pdb (при этом необходимая структура cdb тоже дублицируется). Из минусов — нужен общий каталог бэкапов, затем нужно отсоединить pdb и сделать clone в нужную cdb.
- Через rman, используя transportable tablespace (в подробности не вдавался).
В конце концов нашли правильное сочетание для поиска нужной инструкции —
Исходные данные: — 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.
На этом всё. Если хотите узнать больше, задавайте вопросы в комментариях или записывайтесь на курс "Реляционные СУБД"!