Senaryomuz : rman yedekleri “/oracle/rman/” dizinine alınıyordu, aynı zamanda bu yedeklerin kopyaları ağ üzerinden farklı bir makineye kopyalanıyordu. “/oracle/rman/” diski arızalandı yedekler işe yaramaz hale geldi. yedekler /oracle/rman1/ dizine kopayalandı,
aynı anda
redolog , controlfile ve datafile ların bulunduğu disk “oratr” (“/oracle/oradata/oratr/”) da arızalandı . yeni disk takılarak yenioratr dizinine mount edildi ( “/oracle/oradata/yenioratr/”)
senaryo resimde daha iyi anlaşılacaktır.
Adım-1 : Senaryoyu gerçekleştirmek için dbf leri,redologları ve controlfile ları siliyoruz.
1 2 3 |
SQL> shutdown immediate oracle@dataera.com~ $ cd /oracle/oradata/oratr oracle@dataera.com~ $ rm * |
1 2 3 4 5 6 7 |
SQL> startup ORACLE instance started. Total System Global Area 910163968 bytes Fixed Size 1283380 bytes Variable Size 230689484 bytes Database Buffers 675282944 bytes Redo Buffers 2908160 bytes |
1 |
SQL> ORA-00205: error in identifying control file, check alert log for more info |
Adım-2 : rman ile aldığımız yedekler /oracle/rman dizininde
senaryoya uygun olması için yedekleri başka bir diske/klasöre taşıyoruz. (ağdaki kopyaların alınması)
1 |
oracle@dataera.com~ $ mv /oracle/rman/* /oracle/rman1/ |
Farklı lokasyondaki yedeklerimizi restore edip vt yi ayağa kaldıracağız.
Adım-3 : contolfile ı yeni lokasyona restore edelim
1 2 3 4 5 |
RMAN> set dbid 3117323921; RMAN> set controlfile autobackup format for device type disk to '/oracle/rman1/%F'; RMAN> RESTORE CONTROLFILE TO '/oracle/oradata/yenioratr/control01.ctl' from autobackup; RMAN> RESTORE CONTROLFILE TO '/oracle/oradata/yenioratr/control02.ctl' from autobackup; RMAN> RESTORE CONTROLFILE TO '/oracle/oradata/yenioratr/control03.ctl' from autobackup; |
ilk lokasyona restore edilmek istense idi yani “/oracle/oradata/oratr/” sağlam olsa idi, bu kullanılırdı.
1 |
RMAN> restore controlfile from autobackup; (/oracle/oradata/oratr/) |
not : pfile.ora’da controlfile ların yeni lokasyonları girilip, güncel spfile ile VT’nin tekrar açılması gerekir. sonra rman e mount modda tekrar baglanılması gerekir.
Sorgusu ile control file ların güncel yeri kontrol edilir.
1 |
SQL> select * from v$controlfile; |
Adım-4 : yedeklerin yeri değiştiği için yeni yedekleri rman e tanıtmak lazım.
1 |
RMAN> CATALOG START WITH '/oracle/rman1/'; |
yada
1 2 3 4 5 |
RMAN> CATALOG BACKUPPIECE '/oracle/rman1/c-3117323921-20110531-04'; RMAN> CATALOG BACKUPPIECE '/oracle/rman1/ora_df_752578940_69_1'; RMAN> CATALOG BACKUPPIECE '/oracle/rman1/ora_df_752578825_68_1'; RMAN> CATALOG BACKUPPIECE '/oracle/rman1/ora_df_752578823_67_1'; RMAN> CATALOG BACKUPPIECE '/oracle/rman1/ora_df_752578814_66_1'; |
1 2 |
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/oracle/rman1/%F'; RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/oracle/rman1/ora_df_%t_%s_%p'; |
Adım-5 : redologların yeni dizinini control file da güncelliyoruz. (bu işlemi adım 6 dan sonra yapmak gerekebiliyor)
1 2 3 |
SQL> alter database rename file '/oracle/oradata/oratr/redo01.log' to '/oracle/oradata/yenioratr/redo01.log' ; SQL> alter database rename file '/oracle/oradata/oratr/redo02.log' to '/oracle/oradata/yenioratr/redo02.log' ; SQL> alter database rename file '/oracle/oradata/oratr/redo03.log' to '/oracle/oradata/yenioratr/redo03.log' ; |
Adım-6 Datafile ları restore,recover edip sunucuyu open reset logs ile acıyoruz.(redologlar olmadığı için reset log ile açıyoruz.)
1 2 3 4 5 6 7 |
SQL> set head off SQL> set pagesize 100 SQL> select 'set newname for datafile '||file_id||' to '''||'/oracle/oradata/yenioratr/'||''';' from 2 dba_data_files; SQL> select 'set newname for tempfile '||file_id||' to '''||'/oracle/oradata/yenioratr/'||''';' 2 from dba_temp_files; |
1 2 3 4 5 6 7 8 9 10 |
RMAN> run { set newname for datafile 1 to '/oracle/oradata/yenioratr/system01.dbf'; set newname for datafile 2 to '/oracle/oradata/yenioratr/undotbs01.dbf'; set newname for datafile 3 to '/oracle/oradata/yenioratr/sysaux02.dbf'; set newname for datafile 4 to '/oracle/oradata/yenioratr/users01.dbf'; set newname for datafile 5 to '/oracle/oradata/yenioratr/example01.dbf'; restore database; switch datafile all; recover database; alter database open resetlogs; } |
1 2 3 4 5 6 7 8 9 |
SQL> select ts.name tablespace, df.file#, df.name datafile 2 from v$tablespace ts, v$datafile df 3 where ts.ts# = df.ts#; 4 /oracle/oradata/oratr/system01.dbf 1 5 /oracle/oradata/oratr/undotbs01.dbf 2 6 /oracle/oradata/oratr/sysaux02.dbf 3 7 /oracle/oradata/oratr/users01.dbf 4 8 /oracle/oradata/oratr/example01.dbf 5 9 /oracle/oradata/oratr/user_index.dbf 6 |
Not: pfile spfile vb bulunmadığı durumlar için
1 2 |
SQL> startup force nomount; SQL> restore spfile from autobackup; |
Sorgular
13 Mart 2019