Миграция NONCDB в PDB | OTUS
Запланируйте обучение с выгодой в Otus!
-15% на все курсы до 22.11 Забрать скидку! →
Выбрать курс

Миграция NONCDB в PDB

SUBD_Deep_14-5020-6ebc59.09_site.png

По итогам апгрейда с 11 на 12 логичным показался шаг превращения базы в pluggable. Казалось бы, три простых действия — и проблема решена. Но во время миграции вылез ряд нетривиальных ошибок.

Итак, алгоритм обновления следующий

  • Останавливаем базу:
export ORACLE_SID=<your_sid>
sqlplus / as sysdba
sqlplus> shutdown immediate;
  • Стартуем в режиме чтения:
sqlplus> STARTUP OPEN READ ONLY;
  • Снимаем с неё xml:
BEGIN
  DBMS_PDB.DESCRIBE(
    pdb_descr_file => '/tmp/newpdb.xml');
END;
/
  • Опять останавливаем:
sqlplus> shutdown immediate;
  • Подключаемся к CDB базе и создаём pdb на основе ранее снятого xml. Я использовал режим nocopy для сохранения тех же файлов на ASM.
export ORACLE_SID=<your_cdb>
sqlplus / as sysdba
CREATE PLUGGABLE DATABASE newpdb USING '/tmp/newpdb.xml' NOCOPY;
  • После успешного выполнения смотрим show pdbs и видим, что контейнер появился. Переключаемся на него и пускаем скрипт миграции:
SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 NEWPDB MOUNTED
    ALTER SESSION SET CONTAINER=newpdb;
    @?/rdbms/admin/noncdb_to_pdb.sql
  • Далее скрипт отрабатывал у меня очень долго и в итоге свалился на компиляции с ошибкой:
ORA-04045: errors during recompilation/revalidation of SYS.DBMS_QOPATCH
ORA-00600: internal error code, arguments: [kql_tab_diana:new dep],
[0x26CB2C008], [0x2AD2C9CE76A0], [1], [2], [], [], [], [], [], [], []
ORA-06512: at "SYS.DBMS_UTILITY", line 1294
ORA-06512: at line 1
  • Лекарство нашёл на металинке. Дело в том, что в таблице SYS.REGISTRY$SQLPATCH поле BUNDLE_DATA должно быть типа CLOB, а оно XMLTYPE, нужно пересоздать. Присоединяемся к cdb, на всякий случай делаем копию таблицы SYS.REGISTRY$SQLPATCH. Удаляем её:
drop table registry$sqlpatch;
  • Пересоздаём скриптом:
@?/rdbms/admin/catsqlreg.sql
  • Проверяем, что у таблицы поле теперь правильного типа. Теперь заново пытаемся прогнать конвертацию:
ALTER SESSION SET CONTAINER=newpdb;
@?/rdbms/admin/noncdb_to_pdb.sql
  • Компиляция прошла, пробую переоткрыть базу. Открывается, но база поднялась в рестриктед-режиме:
SQL> alter pluggable database newpdb open;
    Warning: PDB altered with errors.
  • Смотрим проблемы и видим ошибку:
SQL> select * from pdb_plug_in_violations;
PSU bundle patch 160719 (Database Patch Set Update : 12.1.0.2.160719 (23054246)): Installed in the PDB but not in the CDB.
RESOLVED
Call datapatch to install in the PDB or the CDB
  • Проверил, что все патчи корректно стоят, и такая проблема может быть связана с APEX. Так как он мне не нужен, то я просто его удалил. Для удаления требуется, чтобы все PDB были открыты. Присоединился к cdb:
@apxremov_con.sql
  • Переоткрыл pdb. Все успешно:
SQL> alter pluggable database newpdb close;
SQL> alter pluggable database newpdb open;

На этом всё. Есть вопрос? Пишите в комментариях!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто
Черная пятница в Otus! ⚡️
Скидка 15% на все курсы до 22.11 →