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

Standby veritabanını kontrol ettiğimde MRP processinin çalışmadığını gördüm ve bu durum ile ilgili olarak aşağıdaki işlemleri yaptığımda ise

SQL> recover managed standby database cancel;
ORA-16136: Managed Standby Recovery not active


SQL> recover automatic standby database;

ORA-00283: recovery session canceled due to errors
ORA-01111: name for data file 7 is unknown - rename to correct file
ORA-01110: data file 7: '/u01/app/oracle/product/19.3.0.0/db/dbs/UNNAMED00007'
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01111: name for data file 7 is unknown - rename to correct file
ORA-01110: data file 7: '/u01/app/oracle/product/19.3.0.0/db/dbs/UNNAMED00007'

hatası ile karşılaştım. datafile adınının standy veritabanı tarafından bilinmediğini söylüyor dosyayı tekrar isimlendirerek sorunu çözmeye çalışalım.

Öncelikle managed recovery i kapatalım, benim durumumda zaten kapalı

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

Standby_file_management parametresini manuel e set edelim.

SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=MANUAL scope=both;


System altered.

--Eğer standby RAC ise tüm nodlar için bunu yapmalıyız yani sql sonuna sid='*' eklemeliyiz.

data dosyasının ismini değiştirelim, öncelikle doğru ismini öğrenmek için dosya numarasını standby tarafından bakalım, daha sonra primary tarafında bu dosya numarasının doğru ismini öğrenelim.

SQL> desc v$recover_file;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 FILE#                                              NUMBER
 ONLINE                                             VARCHAR2(7)
 ONLINE_STATUS                                      VARCHAR2(7)
 ERROR                                              VARCHAR2(18)
 CHANGE#                                            NUMBER
 TIME                                               DATE
 CON_ID                                             NUMBER


SQL> select FILE# from v$recover_file where error like '%FILE%';

     FILE#
----------
         7

Primary tarafta bu 7 dosyasının ismini bulalım

SQL> select NAME from v$datafile where file#=7;


NAME
--------------------------------------------------------------------------------
+DATA/RACDB/DATAFILE/tbs_frkdba.277.1061824995

Doğru ismi bulduk şimdi bozuk dosyamızın ismini doğrusu ile değiştirelim.

SQL> Alter database create datafile '/u01/app/oracle/product/19.3.0.0/db/dbs/UNNAMED00007' as '+DATA/' size 128M;

SQL> Alter database create datafile '/u01/app/oracle/product/19.3.0.0/db/dbs/UNNAMED00007' as '+DATA/' size 128M;
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

şimdi baktığımızda MRP process çalışmaya başladı ve eksik olan archive logları işleyerek standby ile primary eşitlenecek

SQL> SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY;


PROCESS   STATUS
--------- ------------
ARCH      CONNECTED
DGRD      ALLOCATED
DGRD      ALLOCATED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
RFS       IDLE
RFS       IDLE
RFS       IDLE
RFS       IDLE
MRP0      APPLYING_LOG


11 rows selected.