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 |
1-shutdown immediate 2-cd /oracle/oradata/oratr 3- rm * |
1 2 3 4 5 6 7 |
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 |
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 |
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 |
set dbid 3117323921; set controlfile autobackup format for device type disk to '/oracle/rman1/%F'; RESTORE CONTROLFILE TO '/oracle/oradata/yenioratr/control01.ctl' from autobackup; RESTORE CONTROLFILE TO '/oracle/oradata/yenioratr/control02.ctl' from autobackup; 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 |
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 |
select * from v$controlfile; |
Adım-4 : yedeklerin yeri değiştiği için yeni yedekleri rman e tanıtmak lazım.
1 |
CATALOG START WITH '/oracle/rman1/'; |
yada
1 2 3 4 5 |
CATALOG BACKUPPIECE '/oracle/rman1/c-3117323921-20110531-04'; CATALOG BACKUPPIECE '/oracle/rman1/ora_df_752578940_69_1'; CATALOG BACKUPPIECE '/oracle/rman1/ora_df_752578825_68_1'; CATALOG BACKUPPIECE '/oracle/rman1/ora_df_752578823_67_1'; CATALOG BACKUPPIECE '/oracle/rman1/ora_df_752578814_66_1'; |
1 2 |
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/oracle/rman1/%F'; 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 |
set head off set pagesize 100 select 'set newname for datafile '||file_id||' to '''||'/oracle/oradata/yenioratr/'||''';' from dba_data_files; select 'set newname for tempfile '||file_id||' to '''||'/oracle/oradata/yenioratr/'||''';' from dba_temp_files; |
1 2 3 4 5 6 7 8 9 10 |
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 |
select ts.name tablespace, df.file#, df.name datafile from v$tablespace ts, v$datafile df where ts.ts# = df.ts#; /oracle/oradata/oratr/system01.dbf 1 /oracle/oradata/oratr/undotbs01.dbf 2 /oracle/oradata/oratr/sysaux02.dbf 3 /oracle/oradata/oratr/users01.dbf 4 /oracle/oradata/oratr/example01.dbf 5 /oracle/oradata/oratr/user_index.dbf 6 |
Not: pfile spfile vb bulunmadığı durumlar için
1 2 |
startup force nomount; restore spfile from autobackup; |
RMAN ile farklı...
12 Mart 2019