【CDB】怎樣轉換non-CDB to CDB

恩強Boy發表於2020-12-25

一、 規劃

Non-CDB name: orcl

CDB name: orclcdb

version: 12c or later

二、 開始轉換

1.  建立一個CDB 形式的資料庫

可以選擇使用DBCA 或指令碼建立

2.  只讀方式開啟資料庫(non-CDB

SQL> shutdown immediate;

SQL> startup open read only;

3.  生成xml 檔案

這個xml 檔案可以理解為 non-CDB 的模板檔案

執行以下語句

SQL> BEGIN

DBMS_PDB.DESCRIBE(pdb_descr_file => '/ home/oracle /1 9 cNonPDB.xml');

END;

/

4.  關閉資料庫(non-CDB)

SQL> shutdown immediate;

為了保持後設資料檔案和資料檔案的一致性,不要再次開啟資料庫,否則會報錯

ORA-65139: Mismatch between XML metadata file and data file

5.  在目標CDB 中檢查相容性

$ export ORACLE_SID=orclcdb

$ sqlplus / as sysdba

SET SERVEROUTPUT ON;

DECLARE

compatible CONSTANT VARCHAR2(3) := CASE   DBMS_PDB.CHECK_PLUG_COMPATIBILITY(pdb_descr_file =>   ' / home/oracle /1 9 cNonPDB.xml ')

WHEN TRUE THEN 'YES'

ELSE 'NO'

END;

BEGIN

DBMS_OUTPUT.PUT_LINE(compatible);

END;

/

執行上述過程如果報錯,需要檢查 PDB_PLUG_IN_VIOLATIONS 檢視

SQL> col cause for a20

SQL> col name for a20

SQL> col message for a35 word_wrapped

SQL> select name,cause,type,message,status from PDB_PLUG_IN_VIOLATIONS where name=' orcl ';

會得到類似下面的結果

ERROR PSU bundle patch 1 (PSU Patch 12345): Installed in the CDB but not in the PDB.

處理過程請參考MOS Note 1935365.1

6.  CDB 中建立一個 PDB

$ export ORACLE_SID=orclcdb

$ sqlplus / as sysdba

SQL> CREATE PLUGGABLE DATABASE PDB 1  USING '/ home/oracle /1 9 cNonPDB.xml' COPY FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/ orcl /', '/u01/app/oracle/oradata/ ORCLCDB / PDB1 /');

7.  切換到PDB 容器,執行轉換指令碼

$ export ORACLE_SID=orclcdb

$ sqlplus / as sysdba

SQL> alter session set container=pdb1;

SQL> @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

8.  啟動PDB ,檢查 open mode

SQL> alter pluggable database pdb1 open;

SQL> select name,open_mode from v$database;

NAME OPEN_MODE

----- ----------

PDB1 READ WRITE

1 row selected

 

 

---- end ----

 

 

 

 

 

 

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31529886/viewspace-2745231/,如需轉載,請註明出處,否則將追究法律責任。

相關文章