oracle dg庫資料檔案建立失敗ORA-01111

賀子_DBA時代發表於2018-10-26

具體報錯如下

SQL> alter database open read only ;

alter database open read only

*

ERROR at line 1:

ORA-10458: standby database requires recovery

ORA-01157: cannot identify/lock data file 24 - see DBWR trace file

ORA-01111: name for data file 24 is unknown - rename to correct file

ORA-01110: data file 24:

'/data/u01/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00024'

剛剛在主庫新增了資料檔案:

SQL> alter tablespace  MODEL_BH  add datafile '/data2/oradata/datafile/bapp/MODEL_BH010.dbf' size 31g;

然後檢視下發現24號資料檔案就是剛才新增的那檔案:

SQL>set line 1000

SQL>set pagesize 1000

SQL>col name for a60

SQL> col status for a20

SQL> select FILE#,name  from v$datafile where file#=24;

     FILE# NAME

---------- ------------------------------------------------------------

24 /data2/oradata/datafile/bapp/MODEL_BH010.dbf

也就是說出庫的這個檔案,沒有同步到從庫,突然想到,今天這個檔案的目錄放到的一個新的掛載點上了/data2 (由於空間不足,新新增的掛在點)。壞了因為從庫的db_file_name_convert檔案沒有配置傳喚/data2/oradata/datafile/bapp/的路徑,具體如下:

SQL> show parameter convert 

NAME      TYPE VALUE

------------------------------------ ----------- ------------------------------

db_file_name_convert      string /data/app/oracle/oradata/dataf

ile/bapp/, /data/u01/app/dataf

ile/

然後我搭建的datagurd一般都是把備庫的引數配置 STANDBY_FILE_MANAGEMENT為auto,如下所示:

SQL> show parameter STANDBY_FILE_MANAGEMENT;

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

standby_file_management      string     AUTO

1)STANDBY_FILE_MANAGEMENT=AUTO的情況下,如果從庫的 db_file_name_convert引數設定的正確了,那麼 主庫建立的資料檔案在備份端應用日誌時會自動建立,從庫會根據convert引數在備庫建立相對應的資料檔案;

2)STANDBY_FILE_MANAGEMENT=AUTO的情況下,但是如果主庫建立在其他路徑的資料檔案,也就是說如果從庫的 db_file_name_convert引數沒有正確設定(就像我前面的,主庫的/data2下的路徑沒有設定對應的轉換路徑,那麼這時候從庫就會 建立到$ORACLE_HOME/dbs下(注意只是控制檔案中有這個以 UNNAMED開頭命名的檔案資訊,但是不會真正的建立 ,同樣如果主庫是drop,備庫也會drop。

我的情況正是STANDBY_FILE_MANAGEMENT=AUTO,然後從庫的 db_file_name_convert引數沒有正確設定,

從庫 檢視檔案狀態為recover的,表示從庫沒有建立成功

SQL>  select file#,name ,status from v$datafile where status='RECOVER';

    FILE#                NAME                                                                          status

---------- -------------------------------------------------------------------------------------------------------   

24           /data/u01/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00024           RECOVER

下面展示修復過程:

1.在從庫修改引數db_file_name_convert;

如下所示,新增上/data2/oradata/datafile/bapp/的轉換路徑

SQL> show parameter convert 

NAME      TYPE VALUE

------------------------------------ ----------- ------------------------------

db_file_name_convert      string /data/app/oracle/oradata/dataf

ile/bapp/, /data/u01/app/dataf

ile/, /data2/oradata/datafile/

bapp/, /data/u01/app/datafile/

2.重啟從庫

SQL> shu  immediate

SQL> startup  mount

3.修改從庫的引數standby_file_management=manual

SQL> alter system set standby_file_management='manual';

System altered.

註釋:standby_file_management為manual,那麼當主庫新增了檔案,從庫需要手工建立上,並且如果standby_file_management=auto,備庫是不允許手工建立檔案的!!

4. 在備庫建立上那個檔案,如下所示!!!

SQL>alter database create datafile '/data/u01/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00024'  as '/data/u01/app/datafile/MODEL_BH010.dbf';

此時再檢視這個24號檔案,發現名字已經變回來了

SQL> select name ,file# from v$datafile where file#=24;

NAME

--------------------------------------------------------------------------------

     FILE#

----------

/data/u01/app/datafile/MODEL_BH010.dbf

24

但是此時候檢視依舊是recover的狀態:

SQL>  select file#,name ,status from v$datafile where status='RECOVER';

    FILE#                NAME                                                                          status

---------- -------------------------------------------------------------------------------------------------------   

24           /data/u01/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00024           RECOVER

需要開啟mrp程式,應用日誌,恢復下備庫!注意不要先read only  open!

alter database recover managed standby database using current logfile disconnect from session;

再次檢視這個這個檔案,發現已經不在是recover狀態了,為online的了,這時候才是真的恢復成功了!

SQL> select name ,status from v$datafile where file#=24;

NAME                                                               STATUS

--------------------------------------------------------------------------------

/data/u01/app/datafile/MODEL_BH010.dbf     ONLINE

7.以read only方式開啟資料庫

需要先關閉mrp程式,然後才能以read only方式開啟資料,否則報錯!

SQL> alter database open read only;

alter database open read only

*

ERROR at line 1:

ORA-10456: cannot open standby database; media recovery session may be in

progress

關閉mrp程式:

SQL>  ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

Database altered.

然後開啟資料庫

SQL> alter database open read only;

Database altered.

再次開啟mrp程式

alter database recover managed standby database using current logfile disconnect from session;

8.修改從庫的引數standby_file_management=auto

SQL> alter system set standby_file_management='auto';

經驗證資料同步正常

9.最後最好重啟下備庫!!!!然後別忘記啟動mrp程式!

小結:

oracle dg資料庫,如果主庫更換了資料檔案的目錄,需要從新配置從庫的db_file_name_convert引數,否則,備庫會無法建立相應的資料檔案的。


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

相關文章