Oracle 12c PDB中碰到的DG問題

kunlunzhiying發表於2017-11-21
Oracle 12c中的PDB一下子讓資料檔案的格式複雜了一些,所以Data Guard就很有必要了,一旦出現問題,受損失的資料庫是全域性的。沒想到在搭建Data Guard的時候還是碰到了一些小問題。
問題源自於一次PDB建立的時候,早些時候我在搭建好Data Guard後,主備庫的日誌應用都沒有問題,過了幾天,根據需求需要再新增一個PDB,匯入一些資料供應用使用。按照要求建立了資料檔案然後匯入資料,但是檢視備庫的狀態發現MRP異常停止了。
DG Broker檢測的狀態如下:
DGMGRL> show configuration;
Configuration - dg_testdb
  Protection Mode: MaxPerformance
  Members:
  testdb   - Primary database
    s2testdb - Physical standby database
      Error: ORA-16766: Redo Apply is stopped
Fast-Start Failover: DISABLED
Configuration Status:
ERROR   (status updated 6 seconds ago)
DGMGRL>
備庫的錯誤日誌如下:

可以看到是備庫沒有對應的路徑存在所以建立失敗,但是錯誤特別之處在於有下面的錯誤資訊:
Automatic Copy of Standby datafiles for create pdb failed with            error - 65169. Files need to be copied manually
備庫檢視PDB的狀態資訊如下,TBILLMOB這個PDB出現了問題。
SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TCYMOB0                        READ ONLY  NO
         4 MACTVDB                        READ ONLY  NO
         5 TBILLMOB                       MOUNTED
如果嘗試切換容器,會丟擲錯誤。
SQL> alter session set container=TBILLMOB;
ERROR:
ORA-65011: Pluggable database TBILLMOB does not exist.
這個錯誤檢視了MetaLink也沒有給出其他的建議,很明顯和11g的處理方式有一些差別。無奈只能先修復問題,即從主庫匯出,備庫還原恢復。
這個時候問題就來了,主庫備份的時候怎麼選擇對應的資料檔案,在哪個PDB中之類的。
使用RMAN來完成特定的備份,此處需要說明在12c中已經有了預設的新建系統使用者sysbackup
rman target '"/ as sysbackup"'
檢視schema的資訊如下,原來是這麼標記的。

因為這個新建的PDB資料檔案完全沒有同步過去,所以直接可以備份出來。
RMAN> backup  format '/tmp/pdb_tbillmob.dmp' pluggable database tbillmob;
在備庫上進行還原和恢復,假裝置份集和控制檔案在/tmp下。
RMAN> catalog start with '/tmp';

RMAN> restore pluggable database tbillmob from '/tmp/pdb_tbillmob.dmp';

Starting restore at 2016-10-25 11:32:18
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=2838 device type=DISK

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 10/25/2016 11:32:19
RMAN-06509: only SPFILE or control file can be restored from AUTOBACKUP
正確的方式是這樣的。
RMAN> restore pluggable database tbillmob;
還原之後,開啟日誌應用即可。
SQL> recover managed standby database disconnect from session;
把備庫開啟
SQL> alter database open ;
嘗試開啟所有的PDB
SQL> alter pluggable database all open;
Pluggable database altered.
檢視PDB的狀態如下:
SQL> show pdbs;
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 TCYMOB0                        READ ONLY  NO
         4 MACTVDB                        READ ONLY  NO
         5 TBILLMOB                       READ ONLY  NO
再次檢視就主備關係就正常了。
DGMGRL> show configuration;
Configuration - dg_testdb
  Protection Mode: MaxPerformance
  Members:
  testdb   - Primary database
    s2testdb - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS   (status updated 51 seconds ago)
DGMGRL>

而在這個基礎上,我們進一步測試,主庫PDB的目錄下重新建立一個test目錄,備庫不存在,看看新增資料檔案是否會成功。
mkdir -p /home/U01/app/oracle/oradata/testdb/pdb/tbillmob/test
SQL> alter tablespace users add datafile '/home/U01/app/oracle/oradata/testdb/pdb/tbillmob/test/users02.dbf'size 10M;
檢視備庫的資訊如下:

當然我是在standby_file_management=auto的前提下操作的。如果是standby_file_management=manual還是存在一些差別。


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

相關文章