RECREATE CONTROLFILE (How to Recreate a Controlfile) (ORA-19633: control file record 58769 is out of sync with recovery catalog)

RMAN Crosscheck yaptığuınızda veya backup almak istediğinizde ORA-19633: control file record 58769 is out of sync with recovery catalog gatasını alıyorsanız, yeniden bir controlfile oluşturmanız gerekecektir.

  • Aşağıda açıklamaları verilen bazı durumlarda Controlfile yeniden oluşturulması gerekebililir
  • Controlfile mevcut tüm kopyaları kayboldu veya bozulduysa.
  • Controlfile bozuk veya eksik olduğu bir yedek içeriyorsa ve uncatalog yapamıyorsanız.
  • Controlfile sabir bir veritabanı parametresini değiştirmeniz gerekirse
  • Veritabanınızı başka bir sunucuya taşıyorsanız ve dosyalar farklı bir konumda bulunuyorsa.
  • Oracle Veritabanını upgrade ederken yarıda kalması durumunda,

Flashback noktasına geri dönülmesi birden fazla Incarnation noktası oluşması ve bu incarnation noktaları arasında bazen geçişler yapılması durumlarında controlfile bazı dosyalarını bulmayabilir, veya olmayan bir dosyayı controlfile arayabilir bu gibi durumlarda uncatalog ve catalog yapmak bazen sorunu düzeltemeyebiliyor, Controlfile içerinde istenmeyen kayıtlar var ve bunları temizleyemiyorsak son çare olarak yeni bir controlfile oluşturmamız gerekecektir.

Bu dökümanda adım adım yeni bir controlfile nasıl oluşturulur örnekleyerek anlatıyor olacağız;

Controlfile bir trace dosyasına yazdırarak içerisinden ilgili kısmı alarak tekrar controlfile oluşturacağız, ve resetlog ile veritabanını yeniden açacağız, daha sonra tempfile kısmlarını kaybedeceğimiz için tempfile scriptini bir yere kaydetmekte fayda var

SQL> select name from v$tempfile;

NAME
--------------------------------------------------------------------------------
+DATA/ORCL/TEMPFILE/temp.264.1098635819


Create Script;
CREATE TEMPORARY TABLESPACE TEMP TEMPFILE '+DATA' SIZE 169M AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED;

Şimdi Controlfile create scriptini bir trace dosyasına alalım;

SQL> alter database backup controlfile to trace;

Database altered.

SQL> oradebug setmypid;
Statement processed.
SQL> oradebug tracefile_name;
/u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_6677.trc

Trace Dosyası kalablık bir dosya içerinden create kısmını alalım;

CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '+DATA/ORCL/ONLINELOG/group_1.258.1098635815'  SIZE 200M BLOCKSIZE 512,
  GROUP 2 '+DATA/ORCL/ONLINELOG/group_2.259.1098635815'  SIZE 200M BLOCKSIZE 512,
  GROUP 3 '+DATA/ORCL/ONLINELOG/group_3.260.1098635815'  SIZE 200M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  '+DATA/ORCL/DATAFILE/system.261.1098635815',
  '+DATA/ORCL/DATAFILE/sysaux.262.1098635819',
  '+DATA/ORCL/DATAFILE/undotbs1.263.1098635819',
  '+DATA/ORCL/DATAFILE/users.265.1098635827'
CHARACTER SET AL32UTF8
;

Bu kısmı ister bir dosyaya yadırıp sql olarak çapırabiliriz istersek doğrudan sys ile sqlplus üzerinden çalıştırabiliriz. Öncelikle database nomount modda açılır sonra çalıştırılarak resetlogs ile database open moda getirilir en son tempfile llar create edilir.

SQL> shutdown immediate;

SQL> startup nomount;

SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
  2    3      MAXLOGMEMBERS 3
  4      MAXDATAFILES 100
  5      MAXINSTANCES 8
  6      MAXLOGHISTORY 292
  7  LOGFILE
  8    GROUP 1 '+DATA/ORCL/ONLINELOG/group_1.258.1098635815'  SIZE 200M BLOCKSIZE 512,
  9    GROUP 2 '+DATA/ORCL/ONLINELOG/group_2.259.1098635815'  SIZE 200M BLOCKSIZE 512,
  GROUP 3 '+DATA/ORCL/ONLINELOG/group_3.260.1098635815'  SIZE 200M BLOCKSIZE 512
 10   11  -- STANDBY LOGFILE
DATAFILE
 12   13    '+DATA/ORCL/DATAFILE/system.261.1098635815',
  '+DATA/ORCL/DATAFILE/sysaux.262.1098635819',
 14   15    '+DATA/ORCL/DATAFILE/undotbs1.263.1098635819',
  '+DATA/ORCL/DATAFILE/users.265.1098635827'
CHARACTER SET AL32UTF8
; 16   17   18

Control file created.

SQL> alter database open resetlogs;