Миграция NONCDB в PDB
По итогам апгрейда с 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;
На этом всё. Есть вопрос? Пишите в комментариях!