注意:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱開始使用 Oracle Cloud Infrastructure Free Tier 。
- 它會使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室時,請將這些值替代為您雲端環境特定的值。
使用相同 DBCS 伺服器上的輔助執行處理回復刪除的多用戶 PDB
簡介
在多雲端用戶容器資料庫 (CDB) 中,資料說明表格與視觀表定義的描述資料只會儲存在 root 中。不過,每個可插式資料庫 (PDB) 都有它自己的一組資料說明表格與視觀表,適用於 PDB 中包含的資料庫物件。
因此,無法將可插式資料庫 (PDB) 回復為資料庫。必須使用輔助執行處理回復為資料庫物件。如果不小心刪除、損毀可插式資料庫 (PDB) / 資料檔,則 PDB 的儲存區域 / 描述資料仍存在,且可以加以回復與復原
如果使用 DROP PLUGGABLE DATABASE <PDBNAME> 命令不小心刪除 PDB,將會刪除 PDB 並移除儲存區域中的描述資料。因此,復原 PDB (包括 PDB PITR 在刪除時間之前) 會因發生錯誤 (例如 RMAN-06813: could not translate pluggable database PDBxx) 而失敗。


目標
回復和復原刪除的 PDB (包括資料檔)。因為無法在同一個 CDB 中回復它,所以我們將建立一個輔助執行處理,並會在同一個執行處理以及來源中的輔助 CDB 中回復 PDB。
必要條件
-
完成 Oracle Database Cloud Service (DBCS) 資料庫組態
-
完整備份 CDB
作業 1:建立新的可插式資料庫
-
執行下列命令以建立可插式資料庫。
SQL> create pluggable database <PDBNAME3> admin user <USERNAME> identified by <PASSWORD>; COLUMN PDB_NAME FORMAT A15 SQL> SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID; PDB_ID PDB_NAME STATUS ---------- --------------- --------- 2 <PDBNAME$SEED> NORMAL 3 <PDBNAME1> NORMAL 4 <PDBNAME2> NORMAL 5 <PDBNAME3> NORMAL
作業 2:備份容器資料庫 (CDB)
-
使用 sysdba 或 sysbackup 使用者連線到 RMAN,並備份包含可插式資料庫的 CDB 資料庫
。 RMAN>BACKUP DATABASE PLUS ARCHIVELOG ALL;
作業 3:刪除在作業 1 中建立的可插式資料庫
-
為模擬情況,我們會刪除可插式資料庫
。 SQL> drop pluggable database <PDBNAME3> INCLUDING DATAFILES ;
作業 4:回復相同來源資料庫中刪除的可插式資料庫
-
嘗試將 PDB 回復為資料庫 (在同一個容器中),因發生 RMAN-06813 錯誤而失敗。
RMAN> restore pluggable database <PDBNAME3>; Starting restore at <MM/DD/YYYY> using channel ORA_DISK_1 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of restore command at <MM/DD/YYYY HH:MI:SS> RMAN-06813: could not translate pluggable database <PDBNAME3>
作業 5:建立暫時輔助執行處理
-
在同一個來源 (生產伺服器) 或其他伺服器 (輔助伺服器) 中建立暫時輔助執行處理,以回復容器資料庫 (CDB) 和必要的可插式資料庫 (PDB)。
-
在此範例中,會在同一個來源伺服器中建立輔助執行處理。
-
建立輔助執行處理的初始化檔案。
-- create init<DBNAME AUX>.ora -- verify compatible parameter matches the version of your source db (init<DBCDBNAME>.ora) *.sga_target=10G *.control_files=+DATA/CDBAUX02/CONTROLFILE/control.ctl *.compatible=19.0.0.0.0 *.db_files=65534 *.db_create_file_dest=+DATA *.db_create_online_log_dest_1=+RECO *.undo_tablespace= UNDOTBS1 *.remote_login_passwordfile=EXCLUSIVE *.global_names=FALSE *.instance_name=CDBAUX02 *.audit_trail=DB *.db_name=CDB01 *.db_unique_name=CDBAUX02 *.enable_pluggable_database= TRUE *.db_recovery_file_dest=+RECO *.db_recovery_file_dest_size=40G *.wallet_root=/opt/oracle/dcs/commonstore/wallets/CDBAUX02 *.one_step_plugin_for_pdb_with_tde=FALSE *.tde_configuration='keystore_configuration=FILE' *.DB_FILE_NAME_CONVERT='CDB01_IAD1ZD','CDBAUX02' *.log_file_name_convert='+RECO/CDB01_IAD1ZD/ONLINELOG/','+RECO/CDBAUX02/ONLINELOG/'
作業 6:以指定狀態啟動輔助執行處理
-
使用下列命令,以指定大小狀態啟動輔助執行處理。
[oracle@sud ~]$ mkdir -p /home/oracle/CDBAUX02[oracle@sud ~]$ cd /home/oracle/CDBAUX02[oracle@sud CDBAUX02]$ export ORACLE_SID=CDBAUX02
作業 7:從 IdP 執行處理中的備份回復控制檔並掛載資料庫
-
從輔助執行處理中的備份回復控制檔,並使用下列命令掛載資料庫。
run { set dbid=1672349321; set until time "to_date('2023-05-02 17:03:27','YYYY-MM-DD HH24:MI:SS')"; allocate channel ch1 device type sbt parms 'SBT_LIBRARY=/opt/oracle/dcs/commonstore/oss/CDB01_iad1zd/libopc.so ENV=(OPC_PFILE=/opt/oracle/dcs/commonstore/oss/CDB01_iad1zd/97164268-b09e-4c4d-8295-e3d3337b07e0/opc_CDB01_iad1zd.ora)'; restore controlfile from 'c-1672349321-20230502-13' ; alter database mount; }
作業 8:在輔助執行處理中回復和復原刪除的 PDB 資料庫
-
使用下列命令來回復和復原輔助執行處理中刪除的 PDB 資料庫。
select status from V$BLOCK_CHANGE_TRACKING; alter database disable block change tracking; select status from V$BLOCK_CHANGE_TRACKING; ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE; alter database flashback off; Changing the State of (DISABLE RECOVERY) other PDB: set lines 300 pages 300 select 'alter session set container='||name||'; '|| CHR(13) || CHR(10) ||'alter pluggable database disable recovery; ' from v$pdbs where name not in ('PDB03'); -
如果來源資料庫有多個 PDB,而想要以 ONLY ONE PDB 回復 CDB,請停用 Aux 資料庫中所有其他 PDB 的復原 (如上所示),然後只回復刪除的 PDB 和 root 容器資料庫。
run { set until time "to_date('2023-05-02 17:03:27','YYYY-MM-DD HH24:MI:SS')"; allocate channel ch1 device type sbt parms 'SBT_LIBRARY=/opt/oracle/dcs/commonstore/oss/CDB01_iad1zd/libopc.so ENV=(OPC_PFILE=/opt/oracle/dcs/commonstore/oss/CDB01_iad1zd/97164268-b09e-4c4d-8295-e3d3337b07e0/opc_CDB01_iad1zd.ora)'; set newname for database to '+DATA/'; restore pluggable database PDB03,root; switch datafile all; recover pluggable database PDB03,root; } -
當 RMAN 在備份中套用最後存檔重做日誌且找不到任何日誌時,會出現類似下列的訊息:無法尋找存檔日誌。
-
使用下列命令復原資料庫。
SQL> recover database using backup controlfile until cancel;
作業 9:在來源資料庫中新增和刪除線上重做日誌檔
-
在「來源」伺服器中新增 (4,5,6) 和刪除 (1,2,3) 的「線上重做」日誌群組。

-
查看目前日誌的大小。
select GROUP#,THREAD#,MEMBERS,STATUS,BYTES/1024/1024 from v$log; -
建立 3 個新的日誌群組,並將 4、5 以及 6 個群組命名為每個 2048 MB。
alter database add logfile group 6 size 2048malter system switch logfile -
請切換到日誌群組 4,以便捨棄日誌群組 1、2 以及 3。
alter database drop logfile group 3 -
擷取群組的所有日誌成員名稱。
select member from v$logfile;
作業 10:在輔助執行處理的重設日誌中開啟資料庫
-
使用下列命令在輔助執行處理的重設日誌中開啟資料庫。
SQL> alter database open resetlogs;
作業 11:更改輔助執行處理中的可插式資料庫
-
更改可插式資料庫以讀取輔助執行處理中的寫入模式。
SQL> alter pluggable database <PDBNAME3> open read write;
作業 12:建立使用者並授予資料庫連結權限
-
在輔助執行處理和來源中建立使用者並授予資料庫連結權限。
CREATE USER C##PDBCLONEDBA IDENTIFIED BY "XXXXXXX"; GRANT CREATE SESSION TO C##PDBCLONEDBA CONTAINER=ALL; GRANT CREATE PLUGGABLE DATABASE TO C##PDBCLONEDBA CONTAINER=ALL; GRANT CREATE DATABASE LINK TO C##PDBCLONEDBA CONTAINER=ALL; GRANT SELECT ANY DICTIONARY TO C##PDBCLONEDBA CONTAINER=ALL; GRANT CREATE JOB TO C##PDBCLONEDBA CONTAINER=ALL; GRANT EXECUTE ON DBMS_SCHEDULER TO C##PDBCLONEDBA CONTAINER=ALL; -
在「來源」中建立資料庫連結。
CREATE DATABASE LINK "CDBAUX02" CONNECT TO C##PDBCLONEDBA IDENTIFIED BY "XXXXXXX" USING '(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.174)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = CDBAUX02)))'; 2 SQL> alter session set global_names=FALSE; Session altered. SQL> select * from dual@CDBAUX02; D -- x
作業 13:在來源中複製可插式資料庫 PDB03
-
在來源中複製可插拔資料庫 PDB03。
CREATE PLUGGABLE DATABASE PDB03 FROM PDB03@CDBAUX02 NO REKEY KEYSTORE IDENTIFIED BY "XXXXXXX"; -
變更 CDB 中 PDB 的狀態:範例:假設目前的容器是 root。下列敘述句會以開啟模式 READ WRITE 的 CDB 中開啟 PDB。
alter pluggable database PDB03 open read write;
確認
- 作者 - Aditya Srivastawa (主要雲端架構師)
其他學習資源
探索 docs.oracle.com/learn 的其他實驗室,或者存取更多 Oracle Learning YouTube 頻道上的免費學習內容。此外,請瀏覽 education.oracle.com/learning-explorer 以成為 Oracle Learning 檔案總管。
如需產品文件,請造訪 Oracle Help Center 。
Restore a dropped multitenant PDB using auxiliary instance on the same DBCS server
F81982-01
May 2023
Copyright © 2023, Oracle and/or its affiliates.