OracleDB入門6:使用DB LINK將non-CDB克隆成CDB架構

版本說明:

    原庫:ORACLE 12cR1  非CDB架構

    目標庫:ORACLE 12cR1 CDB架構

一、    目標數據庫安裝

二、    dbca創建CDB數據庫實例

#dbca -silent -createDatabase -templateName General_Purpose.dbc -responseFile NO_VALUE \
-GDBNAME  T24_CDB                        \
-SID  T24_CDB                            \
-EMCONFIGURATION  "NONE"                   \
-SYSPASSWORD  "Password_4U"                 \
-SYSTEMPASSWORD  "Password_4U"              \
-DBSNMPPASSWORD  "Password_4U"              \
-STORAGETYPE  FS                             \
-CREATEASCONTAINERDATABASE TRUE                 \
-NUMBEROFPDBS  1                                 \
-PDBNAME  SGP_DEV                                   \
-DATAFILEDESTINATION  "/odata/datafile/"                 \
-RECOVERYAREADESTINATION "/odata/fast_recovery_area/"              \
-MEMORYPERCENTAGE  "15"                        \
-AUTOMATICMEMORYMANAGEMENT TRUE             \
-CHARACTERSET  "AL32UTF8"                   \
-NATIONALCHARACTERSET "AL16UTF16"

注意:

  1. 此處CREATEASCONTAINERDATABASE選項標識(TRUE)創建CDB容器數據庫;
  2. NUMBEROFPDBS 指定初始的PDB數量,除pdb$seed外,系統自動創建可插拔數據庫PDB數量;
  3. PDBNAME指定所創建的PDB名,也可以不指定,由系統默認;
  4. 其他GDBNAME、SID、DATAFILEDESTINATION等與非CDB架構相同;

三、    配置到源庫的tns連接串

如:tnsnames.ora

SGP_DEV2 =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 99.12.98.194)(PORT = 1521))
        (CONNECT_DATA =
           (SERVER = DEDICATED)
           (SERVICE_NAME = SGP_DEV2)
   )
  )

配置完成後使用tnsping測試

bash-4.2$ tnsping SGP_DEV2
TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 08-JUL-2019 19:27:57
Copyright (c) 1997, 2014, Oracle.  All rights reserved.

Used parameter files:
/oinstall/oracle/product/12.1.0/dbhome_1/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 99.12.98.194)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = SGP_DEV2)))
OK (10 msec)
bash-4.2$

四、    目標庫創建DB link

SQL> create database link OLDDB connect to system identified by XXX using ‘TNS_NAME’;

注意:

  1. TNS_NAME爲第三步創建的tns連接串名;
  2. OLDDB爲db link對象名;
  3. XXX表示用戶SYSTEM的密碼

五、   將原庫設置爲read only

SQL>shutdown immediate;
SQL>startup open read only;

 說明:因爲12cR1 的undo表空間只支持share模式,即CDB架構中的所有PDB共享UNDO表空間,且防止clone過程中原庫發生變化,必須將原庫設置爲只讀。否則後續步驟報錯。

六、    使用db link克隆遠程數據庫

SQL> create pluggable database PDB_DEV from NON$CDB@OLDDB file_name_convert=(‘PATH1’,’PATH2’);

注意:

  1. 克隆生成的PDB名爲:PDB_DEV
  2. 此命令使用NON$CDB用戶連接DB linkNON$CDB爲oracle官方提供的專用於非CDB遷移的用戶??
  3. file_name_convert用於文件路徑轉換;

命令執行完後,理論上PDB_DEV這個PDB已創建成功,相關service也就緒(lsnrctl status查看);

七、    noncdb_to_pdb.sql轉換

  • 修改會話:
SQL> alter session set container= PDB_DEV
  • 轉換成PDB
SQL> @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

注意:

1. 此步驟可能耗費 5~10min,請耐心等待;

2. 據說,12cR1版本調用此腳本可能會報錯(ORA-600),此報錯是oracle的一個bug,筆者在轉換時暫未出現;

八、    最後

轉換後的PDB處於read only狀態(or mount 狀態),修改爲open狀態:

SQL> alter pluggable database PDB_DEV open

完--------------------歡迎討論

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章