Rman ile ilgili türkçe olarak aşağıdaki isimlerini ve linklerini verdiğim değerli arkadaşlar güzel yazılar yazmışlar. Bu yazımda bende Rman’in sık kullanılan komutlarından bahsetmek istyorum. Fazla detaya girmeden kısa kısa bende bahsediyor olacağım.
Rman hakkında temel fikirler edinmek istiyor iseniz aşağıdaki arkadaşlarında yazısına da mutlaka göz atmanızı öneririm;
http://turkceoracle.com/2011/03/recovery-manager-rman-dinamik-performans-goruntuleri.html
http://oganozdogan.blogspot.com/2008/02/rman-ile-backuprestorerecover.html
http://taliphakanozturk.wordpress.com/2011/06/01/rman-teknik-referans/
http://www.boraovali.com/?tag=rman
http://www.cagataycebi.com/oracle/RMAN.pdf
Rman konfigurasyonundan bahsettikden sonra birazda nasıl kullanıldığından bahsedelim;
Rman’ e connect olmak için (catalog kullanmıyorsanız) aşağıdaki komutu kullanabilirsiniz. ;
Rman target /
Alınmış olan backupları listemek istediğimizde ;
RMAN> list backup;
using target database control file instead of recovery catalog
List of Backup Sets
===================
BS Key Size Device Type Elapsed Time Completion Time
——- ———- ———– ———— —————
7 57.90M DISK 00:00:02 30-JUL-11
BP Key: 7 Status: AVAILABLE Compressed: NO Tag: TAG20110730T153716
Piece Name: C:\ORACLE\10G\FLASH_RECOVERY_AREA\PROD\BACKUPSET\2011_07_30\
O1_MF_ANNNN_TAG20110730T153716_7391WY5C_.BKP
….
….
Output içerisindeki kolonların ne ifade ettiğini açıklamaya çalışalım;
BS Key ; Her backupın bir backup key değeri vardır ve bu değer de unique’ dir.
Size = Alınan backup parçasının size’ ını ifade eder.
Device Type = Backupın diskemi yoksa tape’ mi alındığını ifade eder.
Elapsed Time = Backupın alınma süresini ifade eder.
Completion Time = Tamamlanma zamanı hakkında bilgi verir.
BP Key = Backup parçacığına ait key bilgisidir. Her backup setinin içindeki backuğ parçaları için bu değer unique’ dir.
Status = Backupın statüsü hakkında bilgi verir. Available, expired gibi.
Commpressed = Alınan backup normal mi yoksa sıkıştırılmış olarakmı alındığı bilgisini verir.
Tag = Backupın ismini verir.
Piece Name = Backupın alındığı dizindeki gerçek ismini verir.
Backup alınırken exclude edilmiş olan tablespace’ leri sorgulamak için;
Rman> show exclude
Rman’ e connect oldukdan sonra yapılan işlemlerin logunu tutmak istersek ;
$> rman target / log=c:\rman.log APPEND
$> rman target / trace=c:\rman.log APPEND
cmd>rman target / trace=c:\log.txt APPEND
cmd>rman target / log=c:\log.txt
rman logların kaydedilmesi ile ilgili olarak yukarıdaki örnekde APPEND kullanımı logun ezilmeden sürekli olarak sona eklenmesi şeklinde kaydeder, append kullanmaz iseniz her seferinde son log dosyasını kaydediyor olursunuz. Trace ile log arasındaki bir fark ise, log= sytanxını kullanırsanız rman de yapılan tüm işleri output olarak ekrana yazmaz loga yazar(dolayısıyla cronjoblarda kullanabilirsiniz), trace ise çıktıyı ekrana da yazar.
Backuplara isim vermek istersek tag etiketini kullanırız;
Backup database tag=db_full_backup;
Rman üzerinden alınmış olan tüm backupları sorgulamak için ;
List backup ;
Tüm backupları silmek için ;
Delete backup
Örnek olması açısından list komutunun kullanımı ile ilgili farklı kullanım şekilleri ;
list backup of database
list backup of controlfile ;
list backup of archivelog all;
list backup of tablespace users ;
list backup of datafile 1 ;
list backup of datafile “c:\oracle\oradata\prod\system01.dbf”;
list copy of tablespace “system”;
list copy of database archivelog from time=’sysdate-2’;
list backup summary ;
Obsolete statüsüne düşmüş olan backupları sorgulamak için ;
Report obsolete
Obsolete’ e düşmüş olan backupları silmek için;
Delete obsolete
Delete backupset 1; (sadece 1 nolu backupseti silmek istersek)
Delete obsolete redundancy 2;
Backup’ ın alınıp alınmamasına ihtiyaç olup olmadığını sorgulamak için ;
Report need backup
Örnek olması açısından report komutunun kullanımı ile ilgili farklı kullanım şekilleri ;
Report schema;
Report need backup days 3;
Report need backup redundacy 3 ;
Report unrecoverable;
Report need backup incremantal 3
Report need backup incremantal 3 database;
Report need backup days 3 tablespace system;
Report need backup redundacy 2; (2 seferdir backupı alınmayanlar)
Report need backup recovery of 3 days;
Report obsolete redundancy 2;
Expired olmuş backupları silmek için ;
CROSSCHECK BACKUP;
CROSSCHECK COPY;
DELETE EXPIRED BACKUP;
DELETE EXPIRED COPY;
delete obsolete;
Full database’ in backupını aldırmak istersek ;
Backup database; #bunun yerine level 0 backupda alınabilir.
backup incremental level 0 database;
İncremental backup almak istersek ;
İncremental backup aslında full backup alınmış olan noktadan sonra sadece değişen blockların backuplanması şeklinde yorumlayabiliriz. Birkaç tane farklı yöntemi var, konunun daha iyi anlaşılması için bir full backup scripti (her Pazar çalıştığını varsayalım)sonrasında da Pazar hariç her akşam çalışması gereken bir incremantal backup scripti ile örnekleyelim ;
— Her Pazar çalışması gereken full backup scriptimiz ;
run
{
crosscheck archivelog all;
delete expired archivelog all;
CONFIGURE DEFAULT DEVICE TYPE TO disk;
CONFIGURE DEVICE TYPE disk PARALLELISM 8;
backup incremental level 0 database filesperset=1 format ‘E:\rman_backup\%U’ section size 100G include current controlfile plus archivelog;
delete noprompt force archivelog all completed before ‘sysdate-1’;
}
EXIT;
— Pazar hariç her akşam çalışması gereken incremental backup scriptimiz ;
run {
crosscheck archivelog all;
delete expired archivelog all;
CONFIGURE DEFAULT DEVICE TYPE TO disk;
CONFIGURE DEVICE TYPE disk PARALLELISM 8;
backup incremental level 1 cumulative database filesperset=1 format ‘E:\rman_backup\%U’ section size 100G include current controlfile plus archivelog;
delete noprompt force archivelog all completed before ‘sysdate-1’;
}
EXIT;
EOF
Tablespace bazında backup almak istersek ;
backup as backupset format ‘F:\oracle\rman_backup\users_tbs_%f’ TABLESPACE USERS;
Datafile bazında yedek almak istersek ;
Backup datafile 1,2;
Backup datafile 1;
Database’ in backup’ını backupset formatında almak istersek ;
backup as backupset
Alınan backupa archiveloglarıda dahil etmek istersek;
backup as backupset plus archivelog
Alınan backupa archiveloglarıda dahil edip, sonrasında backupı alınan archivelogları silmek istersek;
Rman> backup as backupset plus archivelog delete input;
Compressed backup almak istersek;
backup as compressed backupset database;
İmaj copy olarak backup almak istersek;
backup as copy database;
backup as copy datafile ‘C:\oracle\10g\oradata\prod\system01.dbf’ format ‘F:\oracle\rman_backup\deneme01_dbf’;
(system01.dbf’ in backupını, deneme01.dbf ismiyle imaj copy olarak alır)
Alınacak backup formatının default olarak kullanılmasının set etmek istersek ;
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COPY; # image copies
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO BACKUPSET; # uncompressed
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET; # compressed
Tüm archivelogların backupını almak için ;
Backup archivelog all;
Sadece belirli archivelogların backupını almak istersek ;
backup format ‘E:\oracle\rman_backup\ar_%t_%s_%p’ archivelog from soquence=170 delete input;
(171’ den sonraki archive logların backupını alır ve siler, delete input’ u kaldırır isek backupı aldıkdan sonra ayrıca bir silme işlemi yapmayacaktır.)
Belirli bir zaman dilimi arasındaki archivelogların backupını almak için ;
Backup archivelog from time ‘sysdate-1’;
Controlfile’ in backupını aldırmanın farklı yolları ;
rman>Backup as copy current controlfile;
rman>backup as backupset current controlfile;
rman>backup tablespace system include current controlfile ;
rman>configure controlfile autobackup on;
Alınmış olan rman backuplarını fiili olarak restore / recover etmeden doğruluğunu test etmek ;
Backup validate ;
Restore database validate ;
(Validate opsiyonu backupı alınmış olan tüm durumlar için kullanılablir)
Alınan backuplarda corruption olup olmadığını kontrol etmek için backup sonrasında aşağıdaki viewler kontrol edilmelidir ;
Select * from v$database_block_corruption
Select * from v$backup_corruption
Select * from v$copy_corruption
Alınmakta olan backup’ ın ne % ne kadarının tamamlandığını takip etmek için ;
select sid, serial#, context, sofar, totalwork,
round(sofar/totalwork*100,2) “% Complete”
from v$session_longops
where opname like ‘RMAN:%’
and opname not like ‘RMAN: aggregate’
and totalwork != 0
Belirli bir tarihden önceki archive logları silmek için;
DELETE ARCHIVELOG UNTIL TIME “SYSDATE-5”;
DELETE NOPROMPT ARCHIVELOG UNTIL TIME “SYSDATE-5”
(nopromt eklentisi kullanıldığında backupları Yes/No sormadan direk sildirmek içindir. Joblar içerisinde kullanılması gerektiğinde nopromt ile kullanılır.)
Kullanılabilecek olan archivelogları görmek için;
Crosscheck archivelog all ;
Delete expired archivelog all;
Rman ile alınan backuplar hakkında sql tarafında durumlarını sorgulamak istersek ;
— son birkaç günlük backup durumu özet;
select * from (
select start_time Backup_baslangıc_süresi,
end_time Backup_bitis_süresi,
output_device_type backup_lokasyonu,
input_type Backup_Type,
status backup_durumu,
output_bytes_display backup_boyutu,
time_taken_display backup_alma_süresi
from V$RMAN_BACKUP_JOB_DETAILS
order by 1 desc )
where rownum < 10
-- son birkaç günlük backup durumu detay ;
select * from (
select start_time,
end_time,
object_type,
operation,
status,
output_device_type
from v$rman_status
order by 1 desc )
where rownum < 20
Tablespace bazında backup modda olup olmadıklarını sorgulamak istersek;
SELECT t.name, d.file# as,
decode(b.status,’NOT ACTIVE’,’BACKUP MODDA DEGİL’,’BACKUP MODDA’) status
FROM V$DATAFILE d, V$TABLESPACE t, V$BACKUP b
WHERE d.TS#=t.TS# AND b.FILE#=d.FILE#
order by 3
Rman kullanımı ile ilgili olarak sıkça karşılabileceğimiz komutlar bunlar diyebiliriz. Burada Restore/recover komutlarından hiç bahsetmedim çünkü ilk yazılarımda rman backupını farklı bir sunucu üzerine nasıl dönülmesi gerektiğinden, kartuşda ise nasıl erişim sağlayıp nasıl recover edildiği gibi konulardan bahsetmiştim. Bundan sonrasında da bu şekilde spesifik örnekler üzerinden yazmaya devam etmeyi planlıyorum. Bu haliyle fikir vermesi açısından umarım faydalı olmuştur.