Статья подготовлена для студентов курса образовательной программы OTUS «Реляционные СУБД» в образовательном проекте OTUS.
Появилась, казалось бы, простая задача — сделать копию рабочего проекта для разработки нового. Уточню — обе контейнерные базы живые, и в них крутятся проекты. Но это оказалось не столь тривиально.
Просто снять backup rman’ом и восстановить его на другой cdb невозможно. Ибо другая cdb ничего об этом pdb не знает. Использовать unplug — тоже не подходит, ведь рабочую базу нельзя тормозить. Везде описана процедура клонирования через dblink, но везде также требовалось в начале перевести исходную pdb в read only состояние через остановку.
Обнаружилось несколько методов клонирования
- Через rman — duplicate через auxiliary cdb создаётся отдельный экземпляр (instance) для новой cdb, делается duplicate нужной pdb (при этом необходимая структура cdb тоже дублицируется). Из минусов — нужен общий каталог бэкапов, затем нужно отсоединить pdb и сделать clone в нужную cdb.
В конце концов нашли правильное сочетание для поиска нужной инструкции — PDB HOT CLONE, и оказалось всё достаточно просто. Oracle 12c поддерживает клонирование на лету, поэтому необязательно переводить pdb в read only.
Исходные данные:
— CDB_source
— исходная контейнерная база;
— PDB_source — исходная PDB;
— CDB_dup — контейнерная база, куда производим клонирование.
Поехали!
На CDB_source создаём пользователя для клонирования (во избежание зависаний все контейнеры должны быть открыты):
на CDB_dup прописываем tns:
создаём DBLINK и клонируем pdb:
На этом всё. Если хотите узнать больше, задавайте вопросы в комментариях.
Материал подготовлен для студентов курса «Реляционные СУБД» в образовательном проекте OTUS. Чтобы присоединиться к ближайшей группе, обязательно пройдите вступительное тестирование:
ПРОЙТИ ТЕСТИРОВАНИЕ