Найти тему

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

Оглавление
Статья подготовлена для студентов курса образовательной программы OTUS «Реляционные СУБД» в образовательном проекте OTUS.

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

Просто снять 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 (в подробности не вдавался).

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

Исходные данные:

— CDB_source

— исходная контейнерная база;

— PDB_source — исходная PDB;

— CDB_dup — контейнерная база, куда производим клонирование.

Поехали!

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

-2

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

-3

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

На этом всё. Если хотите узнать больше, задавайте вопросы в комментариях.

Материал подготовлен для студентов курса «Реляционные СУБД» в образовательном проекте OTUS. Чтобы присоединиться к ближайшей группе, обязательно пройдите вступительное тестирование:

ПРОЙТИ ТЕСТИРОВАНИЕ