Home / MAKALELER / Veri Tabanı / Oracle RMAN ( Recovery Manager ) -2

Oracle RMAN ( Recovery Manager ) -2

Merhaba,

Bu yazımda bir önceki yazımda başladığım Oracle ın Backup & Restore tool u olan RMAN (Recovery Manager) i anlatmaya devam edeceğim.RMAN o kadar geniş çaplı bir yazılım ki bu konuda bir çok makale ve Kitaplar yazılmıştır. Bende elimden geldiği ölçüde bundan sonraki bir kaç yazımda daha RMAN e yer vermeye devam edeceğim.

asdfgh1

Önceki yazımda anlattığım gibi RMAN ile Database in Online,Ofline modda Backupları alınabilmektedir. Şimdi bunların nasıl gerçeklendiğini ve hangi komutlarla yapıldığını görelim.

Online Modda Full Backup: RMAN yazılımı ile Database in full backup ının alınabilmesi için veritabanının Archivelog modda olması gerekmektedir. Archivelog modda olan bir veritabanının Full Backup ı aşağıdaki komutla alınabilmektedir.

bash-4.1$ rman target /
Recovery Manager: Release 11.2.0.3.0 - Production on Sat May 18 14:17:09 2013
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
connected to target database: TESTDB (DBID=2602199602)
RMAN>
RMAN> backup database;

Yukardaki komutla Full backup almak pek tercih edilmez bunun sebebi Backup ın alınacağı yerin belirtilmemesidir. Oracle Veritabanlarının kurulumu sonrası Default olarak backup ın alınacağı path $ORACLE_HOME/dbs location ı şeklindedir. Çok büyük Veritabanlarında bu şekilde bir komutla backup almamız demek $ORACLE_HOME path inin gösterdiği disk alanı dolduğu anda backup process inin durması demektir işte bu yüzden backup alırken yukardaki komut yerine backup ın alınacağı path formatı belirtilen aşağıdaki komut tercih edilir

RMAN> backup database format '/BACKUP/TESTDB_FULL_%d_%t_%s.rman';

Offline Modda Full Backup: Database in Offline modda Full backup ının alınması demek basit manada Veritabanını kapatıp mount modda açıp backup ının alınması demektir. Bu backup alma yöntemi mission criticial dediğimiz kritik sistemlerde tercih edilen bir yöntem değildir ancak yinede bilmekte fayda olduğu için bu yöntemide anlatıyorum. Offline modda full backup alma işlemini 3 adımda aşağıdaki gibi gerçekleştiriyorum.

1.Adım: öncellikle database i kapatıp mount modda aşağıdaki gibi açıyorum.

bash-4.1$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on May 18 15:01:20 2013

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> startup mount
ORACLE instance started.

Total System Global Area  534462464 bytes
Fixed Size                  2230072 bytes
Variable Size             339740872 bytes
Database Buffers          184549376 bytes
Redo Buffers                7942144 bytes
Database mounted.
SQL>

2.Adım: Veritabanını tutarlı bir şekilde kapatıp mount modda açtıktan sonra RMAN tool una bağlanıp Online full backup alma komutunun aynısını çalıştırıyorum.

 
RMAN> backup database format '/BACKUP/TESTDB_FULL_%d_%t_%s.rman';

3.Adım:Backup processi tamamlandıktan sonra mount moddaki database aşağıdaki gibi açılır.

SQL> alter database open;

Database altered.

Yukardaki işlemlerin tamamını bir shell scripti ilede gerçekleştirebilirsiniz. Bunun için .sh uzantılı bir dosyayı linux üzerinden oluşturup içine aşağıdaki komutlar eklenir ve bu dosya linux komut ekranından sh dosyaadı.sh şeklinde çalıştırılır.

# RMAN ile COLD BACKUP Alma Scripti
rman target / << EOF
shutdown immediate
startup mount;
backup database format '/BACKUP/TESTDB_%d_%t_%s.rman';
alter database open;
EOF
exit

Archivelog Backup: Archivelog dosyalarının backup ını almak bir kriz durumunda tam istediğimiz noktaya dönmemiz için çok önemlidir. Örneğin: Bugün saat 10 da veritabanımız Crash olursa en son alınan full backup dün alınmışsa önce bu backup restore edilir ardından tam bugün 10 a dönmemiz için eğer Varsa Online Redolog dosyaları, yok eğer bunlar silinmişse Backup ı alınmış Archivelog dosyaları restore edilir. Eğer en son 1 saat öncesine ait Archivelog dosyaları var ise geriye kalan 1 saati de Online Redolog lardan dönülerek crash olan zamana dönülür. Örnek verdiğim senaryodan da anlaşıldığı üzere Database in Backup ının alınması gibi Archivelog larında Backup ının alınması önemlidir. Archivelog dosyalarının backup ı aşağıdaki komut ile alınır.

RMAN> BACKUP ARCHIVELOG ALL;

Her bir Archivelog dosyasının bir sequence numarası bulunmaktadır. RMAN in esnek yapısından dolayı belirli bir sequence numarasından itibaren ki Arşivlerin backup ını al diyebiliyoruz ilgili komut aşağıdaki gibidir.

RMAN> BACKUP ARCHIVELOG FROM SEQUENCE 1453;

Belirli bir Sequence den itibaren diyebildiğimiz gibi belirli bir sequence numarasına kadar ki arşivlerinde backup ını al diyebiliriz bunun komutuda aşağıdaki gibidir.

RMAN> BACKUP ARCHIVELOG UNTIL SEQUENCE = 1453;

Yine belirli Zaman aralığına kadar ki Arşivlerin yedeğini al diyebiliyoruz bunu aşağıdaki komut ile sağlıyoruz.

RMAN> BACKUP ARCHIVELOG UNTIL TIME 'SYSDATE-3';      --3 gün öncesine kadar olan Archivelog ların backup ını al

Yada şu tarih aralığındaki Arşivlerin backup ını  aşağıdaki komutla aldırabiliriz.

RMAN> BACKUP ARCHIVELOG FROM TIME 'SYSDATE-10' UNTIL TIME 'SYSDATE-2';   -- 10 gün öncesinden 2 gün öncesine kadar olan aralıktaki Archivelog ların backuplarını al.

Bunun yanında SCN (System Change Number) numarasına göre de Archivelog backup ı aşağıdaki komut ile alınabilir.

RMAN> BACKUP ARCHIVELOG UNTIL SCN = 1453;

Yada şu SCN aralığında oluşan Archivelog ların backup ı aşağıdaki komut ile alınır.

RMAN> BACKUP ARCHIVELOG SCN BETWEEN 1453 AND 2013;

Incremental Backup: Bu backup türü son alınan full backuptan sonra değişen Block ların Backup ını ifade eder. Full backup dan sonra alınan ilk İncremental backup tan sonra alınan incremental backup lar ise bir önceki incremental backup dan sonra değişen blokların backup ını alır. İncremental backup ın alınabilmesi için önceden bu backup la ilişkilendirilmiş bir full backup ın olması gerekmektedir. Bunu RMAN level seviyesi olarak 2 değer ile tutmaktadır. Level=0 olduğu zaman database in full backup ı alınır, level=1 olduğu zaman ise level=0 seviyesinde alınan backup dan sonra ve kendisinden önce eğer varsa bir incremental backup bundan sonra değişen blokların backup ları alınır. Örnek bir İncremental alma senaryosu şöyledir. Hafta sonu pazar günü bir full backup alınıp ondan sonra hafta içi her gün incremental backup alındığı zaman bu alınan incremental backup lar ilk i hariç hepsi bir önceki gün alınan incremental backup sonrasında değişen blokların backuplarıdır ilk incremental backup ise full backup sonrası değişen blokların backup ıdır. Hafta içi çarşamba günü database crash olduğu zaman pazar günü alınan full backup ve pazar gününden sonra alınan p.tesi +salı gün kü incremental backuplar restore edilir. Örnek bir İncremental backup scripti aşağıdaki gibidir.

RMAN> backup incremental level=0 database; --Pazar günü Bu script ile Full backup alınır.

RMAN> backup incremental level=1 database; -- Hafta içi her gün ise incremental backup bu script ile alınır.

Yukarda bahsettiğim incremental Backup senaryosunda  level 0 olan full backup kaybedilirse yada bozulursa alınan diğer incremental backup lar geçersiz olacak böylece pazar günü alınmış olan full backup dan geri dönüş yapamayacaksınız. Yada full backupdan sonraki gün alınan incremental backup kaybedilirse eğer ondan sonraki günlerde alınan incremental backup lar geçersiz olacak ve bir geri dönüş senaryosunda sadece pazar günü alınan full backup restore edilebilecektir.

Cumulative Backup: Bu backup türü incremental backup a çok benzemektedir.Cumulative backup da Full backup alındıktan sonra değişen blokların backup ının alındığı bir backup türüdür ve level i incremental backup gibi 1 dir. Cumulative backup ın incremental backup dan farkı ise Cumulative Backup en son alınan full backup dan sonra değişen tüm blokların backup ını tutar. Yani incremental backup alınırken kendisinden önce bir incremental backup varsa bundan sonra değişen blokların backup ını alır eğer kendisinden önce bir incremental backup yoksa bu durumda son alınan backupdan sonra değişen blokların backup ını alır. Cumulative backup ise her alındığında full backup dan sonra değişen blokları yedekler yani Cumulative backup alınırken kendisinden önce bir incremental varmı yokmu diye bakmaz direk kendisinden önceki son full backup dan sonra değişen blokların backup ını alır. Bunu en iyi şu örnekle belirtebiliriz.Pazar günü alınan Full Backup sonrası p.tesi, salı, çarşamba olmak üzere her gün incremental backup alındıktan sonra perşembe günü bir Cumulative Backup alındığı zaman bu cumulative backup pazar günü alınan backupdan sonra perşembe gününe kadar değişen tüm blokların backup ını içerir yani Burada Cumulative backup p.tesi,salı ve çarşamba günü alınan incremental backup larıda kapsar. Cumulative Backup aşağıdaki script ile alınır.

RMAN> backup incremental level=0 database;  -- Pazar günü 1 full backup alınır.
RMAN>backup incremental level 1 cumulative database; --Perşembe günü ise aradaki 4 günün farkı olan cumulative backup alınır.

Fast İncremental Backup ( Block Change Tracking ) : İncremental backup alınırken tüm datafile lar taranıp değişen bloklar belirlendiği için burada ciddi bir performans problemi oluşmaktadır. Oracle 10g den itibaren bu performans problemi giderildi. Oracle 10g den itibaren değişen blokların bir file a yazılması ve backup alınırken bu file ın kullanılması ile incremental backup da ciddi bir performans artışı sağlandı. Değişen blokların tutulduğu bu dosyaya Change Tracking File ( Değişenleri izleme dosyası ) denir.

asdfgh2

Bu özelliği aşağıdaki gibi aktifleştirebiliriz.

bash-4.1$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on May 18 17:29:43 2013

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select status from v$block_change_tracking; -- Öncellikle bu özellik aktif mi kontrol ediyoruz.
STATUS
----------
DISABLED
SQL> alter database enable block change tracking using file '/BACKUP/rman_change_tracking_file.f' reuse;

Bu özelliği yukardaki gibi açtığımızda Full backup sonrası değişen bloklar artık /BACKUP/rman_change_tracking_file.f  dosyasına yazılacaktır. Böylece incremental backup alındığı zaman RMAN tüm datafile ları tek tek taramaktansa bu dosyayı okuması yeterli olacaktır. Buda incremental backup operasyonları için ciddi bir performans kazancı anlamına gelir. Bu özelliği aşağıdaki komutla pasifize edebiliriz.

SQL> ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;

Control File Backup: Veritabanımızın beyni olan Control File ın önemini daha önceki yazılarımda anlatmıştım. Böylesine önemli olan bir dosyanın anlık manuel Backupı aşağıdaki komut ile alınır.

RMAN> BACKUP CURRENT CONTROLFILE; --Alınan Control file backup $ORACLE_HOME/dbs in altına gidecektir.

Genellikle Production sistemlere ait veritabanlarının backup ları otomatik alınır ve böyle tavsiye edilir. Yukardaki gibi anlık backup lar sadece önemli operasyonlar öncesi ne olur ne olmaz diye alınan bir backuptır. Control file ın Otomatik olarak her backup operasyonu sırasında backup ının alınmasını aşağıdaki script ile sağlarız.

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/BACKUP/TESTDB_CONTROL_FILE_18052013.rman';

Spfile Backup : Spfile parametre dosyasının ne olduğunu bu yazımda anlatmıştım. O yüzden burada önemini tekrardan anlatmayacağım. Böylesine önemli olan bir dosya RMAN ile aşağıdaki komut ile backup ı alınabilir.

RMAN> backup spfile format '/BACKUP/TESTDB_SPFILE_18052013.rman';

Spfile dosyasıda tıpkı Control file gibi otomatik yedeklenebilir.Yukardaki gibi Control file ın otomatik olarak backup ının alınmasını sağladığımız takdirde her backup operasyonu gerçekleştiğinde Spfile ın 1 kopyasıda Autobackup ın set edildiği path in bulunduğu yere kopyalanır.

Tablespace ve Datafile Backup: Oracle veritabanlarında Full ve arşiv seviyesinde Backup alınmasının yanında Tablespace bazında yada Datafile bazında da Backup alma vardır. Tablespace ve datafile ların backup ı aşağıdaki komutlar ile sağlanır.

RMAN> backup tablespace DATA01;  -- Tek başına DATA01 tablespace inin backup ı alınır.
RMAN> backup tablespace system,sysaux,users;  --Birden fazla tablespace de tek bir komut ile backup ı alınabilir.
RMAN> backup datafile 1453;  -- 1453 numaralı datafile ın backup ı alınır.
RMAN> backup datafile 1453,180251,2013;  -- Birden fazla datafile da tek bir komut ile backup ı alınabilir.

Böylece bu yazımın da sonuna gelmiş bulunmaktayım bir sonraki yazımda RMAN ile Restore ve Recover işlemlerini anlatacağım şimdilik esen kalın.

Mehmet Salih Deveci

Oracle Veritabanı Yöneticisi

About Mehmet Salih Deveci

Karadeniz Teknik Üniversitesi Bilgisayar Mühendisliği bölümünden 2011 yılında mezun oldu. C#, ASP.NET ve Oracle, SQL Server Veritabanları Teknolojileri Alanlarında Çalışmalarını Sürdürmektedir. Şuan Türk Telekom A.Ş de Veritabanı Yöneticisi olarak Kariyerini Sürdürmektedir.

İlginizi Çekebilir

SQL Server ile Veri Şifreleme

Bilgi teknolojilerinde verinin güvenliği çok kritik bir öneme sahiptir. Önemli verileri korumak için ekstra bir …

Bir Cevap Yazın