數據庫版本:11.2.0.4
操作系統: primary:redhat linux 5.9
standby:redhat linux 5.6
primary DB: rac + ASM
standby DB: 單節點 + 文件系統
因爲主庫使用了asm 文件系統,asm下創建表空間和添加數據文件,文件名默認後綴爲會話線程號,而這些以線程號命名的文件,
在通過日誌傳輸到standby 數據庫時,備庫不能正常創建同名的文件,因此備庫在應用主庫傳輸過來的文件時會出錯,並進一步倒是備庫的recover 進程中斷。
下面命令的輸出結果中,以數字命名的文件時通過duplicate 的方式複製到備庫的,文件6爲備庫通過主庫新增數據庫文件的sql 進行recover 生成,
由於備庫使用文件系統存儲,因此備庫無法正常創建數據文件,查詢v$datafile查詢出來的文件名,在操作系統中實際上並未生成,oracle 只是修改了數據字典而已。
standby@ SYS> select file#,name from v$datafile;
FILE# NAME
---------- ------------------------------------------------------------
1 /oradata1/oracle/oradata/system.256.852462171
2 /oradata1/oracle/oradata/sysaux.257.852462171
3 /oradata1/oracle/oradata/undotbs1.258.852462171
4 /oradata1/oracle/oradata/users.259.852462173
5 /oradata1/oracle/oradata/undotbs2.264.852462315
6 /home/oracle/app/product/11.1/db_1/dbs/UNNAMED00006
6 rows selected.
Elapsed: 00:00:00.00
standby@ SYS> alter system set standby_file_management = manual;
System altered.
Elapsed: 00:00:00.00
standby@ SYS> alter database create datafile 6 as '/home/oracle/app/product/11.1/db_1/dbs/UNNAMED00006.dbf';
Database altered.
Elapsed: 00:00:00.05
standby@ SYS> select file#,name from v$datafile;
FILE# NAME
---------- ------------------------------------------------------------
1 /oradata1/oracle/oradata/system.256.852462171
2 /oradata1/oracle/oradata/sysaux.257.852462171
3 /oradata1/oracle/oradata/undotbs1.258.852462171
4 /oradata1/oracle/oradata/users.259.852462173
5 /oradata1/oracle/oradata/undotbs2.264.852462315
6 /home/oracle/app/product/11.1/db_1/dbs/UNNAMED00006.dbf
6 rows selected.
Elapsed: 00:00:00.00
----------------
在操作系統中執行以下命令,將create的datafile複製爲規範的文件名——與主庫文件同名(asm除外)
[oracle@standby01 oradata]$ cp /home/oracle/app/product/11.1/db_1/dbs/UNNAMED00006.dbf /oradata1/oracle/oradata/users_01.dbf
-----------
standby@ SYS> alter database rename file '/home/oracle/app/product/11.1/db_1/dbs/UNNAMED00006.dbf' to '/oradata1/oracle/oradata/users_01.dbf';
Database altered.
Elapsed: 00:00:00.01
standby@ SYS> select file#,name from v$datafile;
FILE# NAME
---------- ------------------------------------------------------------
1 /oradata1/oracle/oradata/system.256.852462171
2 /oradata1/oracle/oradata/sysaux.257.852462171
3 /oradata1/oracle/oradata/undotbs1.258.852462171
4 /oradata1/oracle/oradata/users.259.852462173
5 /oradata1/oracle/oradata/undotbs2.264.852462315
6 /oradata1/oracle/oradata/users_01.dbf
6 rows selected.
Elapsed: 00:00:00.00
至此數據文件在名稱和格式上已經和主庫一致了,但由於數據文件是create出來的沒有數據,需要利用歸檔日誌進行recover
standby@ SYS> recover automatic standby database ;
ORA-00279: change 11876832 generated at 08/13/2014 18:05:51 needed for thread 1
ORA-00289: suggestion : /oradata1/arch/1_328_852462251.dbf
ORA-00280: change 11876832 for thread 1 is in sequence #328
ORA-00278: log file '/oradata1/arch/1_328_852462251.dbf' no longer needed for this recovery
ORA-16145: archival for thread# 1 sequence# 328 in progress
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
AUTO
ORA-16145: archival for thread# 1 sequence# 328 in progress
standby@ SYS>
standby@ SYS> alter database recover managed standby database disconnect;
Database altered.
最後記得將standby_file_management參數值改回auto。
standby@ SYS> alter system set standby_file_management = auto;
System altered.
Elapsed: 00:00:00.00
問題解決。
在恢復過程中可能遇到的問題:
問題一、
ORA-01275: Operation CREATE DATAFILE is not allowed if standby file management is automatic.
此問題是由於standby 數據庫中standby_file_management參數設置爲auto,修改爲manual 就可。
alter system set standby_file_management = manual;
問題二、
ORA-01511: error in renaming log/data files
ORA-01121: cannot rename database file 15 - file is in use or recovery
此問題是由於需要rename的文件正在被使用,在rac系統中可以將rac 的另一個實例停掉, 當前實例如果在open 狀態下的話,可重啓到mount狀態下。