共計 2957 個字符,預計需要花費 8 分鐘才能閱讀完成。
如何解析 Oracle 12c PDB 中碰到的 DG 問題,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
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 還是存在一些差別。
關于如何解析 Oracle 12c PDB 中碰到的 DG 問題問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注丸趣 TV 行業資訊頻道了解更多相關知識。