Bu makalemizde Oracle tarafından sağlanan yedekleme ve onarma aracı olan “Rman” (Recovery Manager) inceleyeceğiz.
RMAN Nedir ?
RMAN (Recovery Manager), Oracle veritabanının yedeğinin alınmasını ve yedekten dönülebilmesini sağlayan en önemli kurtarma ve onarma aracıdır. RMAN ile Hot (online) backup, incremental backup, Full backup alınabilir. “Spfile” ve “Controlfile”ların yedeğini alabildiğimiz gibi alınan backuplardan Partial (PIT-Point in Time – Herhangi Zamandaki Bir Noktaya) veya complete recovery yapabiliriz. Ancak RMAN ile sağlıklı bir şekilde yedek alabilmemiz ve en az veri kaybı için veritabanımızın mutlaka “ARCHIVELOG” modunda olması gerekmektedir.
- Yedekleme İşlemleri (Backup)
1. Öncelikle veritabanımızda açık değilse “ArchiveLog” modunu aktif ediyoruz. Bunun için aşağıdaki kontrolleri ve işlemleri yapabiliriz.
-- Veritabanımızda "sysdba" rolüyle oturum açıyoruz. $ sqlplus / as sysdba SQL*Plus: Release 11.2.0.3.0 Production on Tue May 7 20:09:29 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> -- ArchiveLog durumunu sorguluyoruz. SQL> archive log list; Database log mode No Archive Mode Automatic archival Disabled --> Gördüğümüz gibi kapalı durumda Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 12 Current log sequence 15 --ArchiveLog dosyalarımızı yazacağı dizin/disk ve yazabileceği toplam alan miktarını sorguluyoruz. SQL> show parameter recovery_file_dest; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string /u01/app/oracle/fast_recovery_ area db_recovery_file_dest_size big integer 5000M Görüldüğü gibi "/u01/app/oracle/fast_recovery_area" alanımız kullanılmakta ve toplam 5GB'a yakın bir alan atanmış durumdadır. -- Eğer dosyaları yazacağı alanda değişiklik yapmak istiyorsak aşağıdaki komutla bunu gerçekleştirebiliriz. SQL> alter system set log_archive_dest_1='LOCATION=/u01/fra/oradata/orcl/arch' scope=both; Biz "/u01/app/oracle/fast_recovery_area" alanını olduğu gibi bırakıp devam edeceğiz. -- Artık "ArchiveLog" modumuzu açabiliriz. -- Veritabanımızı "mount" modda açmak için kapatıyoruz. SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. -- Veritabanımızı "mount" modda açıyoruz. SQL> startup mount; ORACLE instance started. Total System Global Area 1870647296 bytes Fixed Size 2229424 bytes Variable Size 1090521936 bytes Database Buffers 771751936 bytes Redo Buffers 6144000 bytes Database mounted. -- Veritabanımızda "ArchiveLog" modunu aktif ediyoruz. SQL> alter database archivelog; Database altered. -- Veritabanımızı açıyoruz. SQL> alter database open; Database altered. -- ArcihiveLog durumunu sorguluyoruz. SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled --> Gördüğümüz gibi açık durumda Archive destination /u01/app/oracle/fast_recovery_area Oldest online log sequence 12 Next log sequence to archive 15 Current log sequence 15
2. Veritabanımızın yedeğini almak için aşağıdaki işlemleri yapabiliriz. Veritabanı yedekleme yöntemleri aşağıdaki gibidir.
-- Yedekleme işlemi için RMAN aracı ile veritabanımıza bağlanıyoruz. Aşağıdaki tüm komutları kullanabilmek için RMAN aracına aşağıdaki gibi bağlanıyoruz. $ rman target / Recovery Manager: Release 11.2.0.3.0 - Production on Tue May 7 21:36:42 2013 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (DBID=1342567501) -- Backup alınmasına ihtiyaç olup olmadığını sorgulamak için aşağıdaki komutu kullabiliriz. RMAN> report need backup; -- Veritabanımızın "Cold Backup" yedeğini almak için aşağıdaki komutları kullanıyoruz. Bu backup yönteminde veritabanını "mount" moda alıp yedek alıyoruz. $ rman target / RMAN> shutdown immediate; RMAN> startup mount; RMAN> backup database plus archivelog delete input; RMAN> alter database open; -- Cold backup işlemini shell scripti ile yapmak istersek aşağıdaki satırları bir .sh dosyasına yazıp çalıştırabiliriz. #!/bin/sh # RMAN Cold Backup Script rman target / << EOF shutdown immediate; startup mount; backup database plus archivelog delete input; alter database open; EOF exit -- Veritabanımızın tam yedeğini online (veritabanı açıkken) almak için aşağıdaki komutu kullanıyoruz. Bu komutla atanmış olan "FRA" alanına otomatik yedek alacaktır. RMAN> backup database; -- Veritabanı yedeğimizi belli bir dizine belli bir formatla almak istiyorsak aşağıdaki komutu kullanabiliriz. RMAN> backup database format '/u01/backups/%d_%t_%s.rman'; Burada kullandığımız formatların anlamlarını "Oracle Rman Reference" sitesindeki "formatSpec" başlığı altında bulabilirsiniz. Yedek alırken format kullanma zorunluluğu yoktur. Doğrudan dosya ismini elle belirleyerekte alabiliriz. -- Sık kullanılan formatları aşağıda açıkladım. %a Varolan veritabanı aktivasyon idsi %A 0 ile tamamlanmış aktivasyon idsi %c Maksimum değeri 256 olan backup piece kopya numarası %d Veritabanı adı %D DD formatında gün bilgisi %e Arşiv log dosyası sıra numarası %f Absolute dosya numarası %F DBID, gün ay, yıl ve benzersiz bir sıra numarası içerir. %h Arşiv redo log thread numarası %I DBID %M MM formatında ay bilgisi %n Veritabanı adı %N Tablespace adı. Veri dosyası ve image copy yedekle set edilebilir. %p Backup set içindeki backup piece numarasıdır %r Resetlogs ID %s Backup set numarası %S 0 ile tamamlanmış sıra numarası %t Backup set zaman bilgisidir. Saniye bilgiside içeren 4 byte lık bir değerdir. %T Gregorian takviminde YYYYMMDD formatında olan yıl, ay ve gün bilgisidir %u Backup set veya image copy yedeğin numarası ve oluşturulma zamanını içeren 8 karakterlik bir bilgidir. %U Sistem tarafından üretilen benzersiz bir numaradır. %Y YYYY formatındaki yıl bilgisidir -- Veritabanımızın ArchiveLog dosyaları dahil yedeğini almak için aşağıdaki komutu kullanıyoruz. RMAN> backup database plus archivelog; -- Yedeği alınmış ArchiveLog dosyalarını silmek için aşağıdaki komutu kullanıyoruz. RMAN> backup database plus archivelog delete input; -- Rman aracımızda "0" ve "1" olmak üzere 2 yedek alma seviyesi vardır. Yedek almada "0" tam veritabanı yedeği alınacağını "1" ise "0" seviyesinden sonra değişenlerin alınacağını gösterir. RMAN> backup incremental level=0 database; RMAN> backup incremental level=1 database; -- Veritabanı yedeğimizi sıkıştırararak almak için aşağıdaki komutu kullanabiliriz. RMAN> backup as compressed backupset database plus archivelog delete input; -- Gelişmiş yedek almak için bir çok parametreyi kendimiz belirleyebiliriz. (Örneğin yedeklerimize "tag" atayabilir, sıkıştırabilir, format atayabilir vb.) RMAN> backup as compressed backupset database format '/u01/backups/dbf_%d_%t_%s.rman' tag='DBF_ORCL_20130508_2210' plus archivelog format '/u01/backups/arc_%d_%t_%s.rman' tag='ARC_ORCL_20130508_2210'; -- Veritabanımızın yedeğini "Image Copy" kullanarak alabiliriz. Bu yöntemle yedek ancak diskimize alınabilir. Yani ortamdaki bir "teyp" ünitesine "Image Copy" ile yedek alınamaz. "Image Copy" ile alınmış bir yedeğin en büyük avantajı çok hızlı geri dönüş yapabilmemizdir. Çünkü image aldığı için alınmış yedeği hedef olarak gösterebilir daha sonra tekrar yedek alarak orjinal yerinden çalışmasına devam etmesini sağlayabiliriz. RMAN> backup as copy database; -- Yedeğimizin doğru alınıp alınmadığını kontrol etmek için aşağıdaki komutu kullanıyoruz. RMAN> restore database validate;
3. Veritabanımızda tam yedek almak yerine belli bir “datafile”, “controlfile”, “spfile” veya “archivelog” yedeği almak için aşağıdaki komutları kullanabiliriz.
-- Aşağıdaki komut ile datafile numaralarımızı görebiliriz. Bu komut "sqlplus" aracılığı ile çalıştırılmalıdır. $ sqlplus / as sysdba SQL> SELECT tablespace_name, file#, name FROM v$datafile_header ORDER BY file#; -- Örneğin "users" datafile yedeğini almak için RMAN> backup datafile 4; -- Çoklu yedek almak için RMAN> backup datafile 1,3,4; -- Belli bir tablespace adınıda yazarak yedek alabiliriz. RMAN> backup tablespace system, users; -- Geçerli "control file" veya "spfile" yedeği almak için aşağıdaki komutları kullanabiliriz. RMAN> backup current controlfile; RMAN> backup spfile; -- Eğer RMAN ile her yedek alındığında "controlfile" ve "spfile" yedeğinin otomatik olarak alınmasını istiyorsak aşağıdaki komutu çalıştırmamız gerekir. RMAN> configure controlfile autobackup on; -- Veritabanımızda "ArchiveLog" dosyalarımızıda yedekleyebiliriz. Bunun için aşağıdaki komutu kullabiliriz. RMAN> backup archivelog all; -- Belli bir zamana kadar olanları yedeklemek için aşağıdaki komutu kullanabiliriz. RMAN> backup archivelog from time='SYSDATE-7'; -- Archivelog yedeklerimizi alıp yedek alınan arşiv dosyalarını silmek istiyorsak aşağıdaki komutu kullanabiliriz. RMAN> backup archivelog all delete input;
4. Veritabanımızda aldığımız yedekleri sorgulamak için “List” komutunu kullanıyoruz. Bu komutumuzun seçeneklerini inceleyelim.
-- Alınan yedeklerimizi sorgulamak için aşağıdaki komutu kullanıyoruz. RMAN> list backup; using target database control file instead of recovery catalog List of Backup Sets =================== BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ --------------- 14 Full 9.36M DISK 00:00:02 07-MAY-13 . . . -- Buradaki karşımıza çıkabilecek terimleri açıklarsak; BS Key : Her backupın bir backup key değeri vardır ve bu değer tekildir. Type : Backup türünü gösterir. (Full, Incremantal) Size : Alınan backup parçasının boyutunu ifade eder. Device Type : Backupın diskemi yoksa teyp ünitesinemi 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 backup parçalarında bu değer tekildir. Status : Backup durumu 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. -- Alınan yedeklerimizin özet bilgisini görmek için aşağıdaki komutu kullanıyoruz. RMAN> list backup summary; -- Image Copy olarak alınmış yedeklerimizin bilgisini görmek için aşağıdaki komutu kullanıyoruz. RMAN> list copy; -- Alınmış yedeklerimizden herhangi bir datafile yedeğini sorgulamak için aşağıdaki komutu kullanıyoruz. RMAN> list backup of datafile 1; -- Hangi yedek dosyasının hangi "backup piece" içinde olduğunu sorgulamak için aşağıdaki komutları kullanıyoruz. -- Backup Piece Nedir ? Yedekleme işlemini başlattığınız zamanla, yedek işleminin tamamlandığı zaman arasında yeni arşivler oluşabilir. RMAN oldukça gelişmiş bir program ve bu duruma bir çözüm üretmektedir. Sizin yedek almanız biterken, RMAN yeni arşiv dosyalarının oluşup oluşmadığına bakar ve eğer varsa, bunları yeni bir backup piece içinde aldığınız yedeğe ekler. RMAN> list backup of database; -- Belli bir tarih aralığındaki yedekleri sorgulamak için aşağıdaki komutu kullanıyoruz. RMAN> list backup of database between '07-MAY-13' and '08-MAY-13'; -- Alınan yedeklerin dosyalarını sorgulamak için aşağıdaki komutu kullanıyoruz. RMAN> list backup by file;
5. Almış olduğumuz “yedekleri” veya “archivelog” dosyalarını kontrol etmek ve silmek için aşağıdaki komutu kullanabiliriz.
-- Aldığımız yedeklerin kullanılabilir olduğunu sorgulamak için RMAN> crosscheck backup; -- Aldığımız image copy yedeklerinin kullanılabilir olduğunu sorgulamak için RMAN> crosscheck copy; -- Kullanılabilir olmayan yedekleri silmek için RMAN> delete expired backup; -- Kullanılabilir olmayan image copy yedeklerini silmek için RMAN> delete expired copy; -- Obsolute duruma düşmüş yedekleri sorgulamak için RMAN> report obsolete; -- Obsolete duruma düşümüş yedekleri silmek için RMAN> delete obsolete; -- Archivelog dosyalarını silmek için aşağıdaki komutu kullanabiliriz. RMAN> delete archivelog all; -- Belli bir zamana kadar olan Archivelog dosyalarını silmek için aşağıdaki komutu kullanabiliriz. RMAN> delete archivelog all completed before 'sysdate -1';
6. Veritabanımızda veri boyutu çok büyükse ve yedek alma işlemi çok uzun sürüyorsa Oracle tarafından sağlanan “Fast Incremental Backups (Block Change Tracking)” özelliğini kullanabiliriz. Bu özellik sayesinde değişen blokları bir dosyaya yazacak ve buradaki değişikliklere göre yedek alma işlemi sağlayacaktır. Bu yöntemle yedek alma işlemimizin gözle görülür şekilde hızlandığını göreceğiz. Bu özelliği devreye almak için aşağıdaki adımları izlemeliyiz.
-- Veritabanımıza "sysdba" rolüyle bağlanıyoruz. $ sqlplus / as sysdba -- Veritabınımızda "Block Change Tracking" özelliğini kontrol ediyoruz. SQL> select status from v$block_change_tracking; STATUS ---------- DISABLED -- Disabled durumdaysa açıyoruz. Eğer veritabanımızda "OMF" kullanıyorsak "DB_CREATE_FILE_DEST" paremetresine göre otomatik bir dosya oluşturacaktır. SQL> alter database enable block change tracking; -- Eğer dosya yolunu ve ismini kendimiz belirlemek istiyorsak aşağıdaki komutla bunu yapabiliriz. SQL> alter database enable block change tracking using file '/u01/backups/rman.bct' reuse; -- "Block Change Tracking" özelliğini devre dışı bırakmak istiyorsak aşağıdaki komutla yapabiliriz. SQL> alter database disable block change tracking;
- Yedekten Dönme İşlemleri (Recovery, Restore)
1. Veritabanımızın tamamen çökmesi durumunda aşağıdaki komutlarla kurtarma işlemi yapabiliriz.
-- Öncelikle veritabanımızı "mount" modda açıyoruz. $ rman target / RMAN> startup mount; -- Veritabanı restore işlemini başlatıyoruz. RMAN> restore database; -- Veritabanı recovery işlemini başlatıyoruz. RMAN> recover database; -- Veritabanımızı "resetlog" parametresi ile açıyoruz. RMAN> alter database open resetlogs;
2. Veritabanımızda belli bir “datafile” veya “tablespace” kurtarmak için aşağıdaki komutları kullanabiliriz.
-- Öncelikle kurtarma işlemini yapacağımız "tablespace" offline moda çekmemiz gerekiyor. Aynı işlemi "tablespace" offline duruma getirmeden veritabanımızı "mount" moda alarakta yapabiliriz. Yani "tablespace" offline yapılamıyorsa veritabanımızı "mount" moda alarak yapabiliriz. -- Veritabanımızı mount moda alabilmek için $ rman target / RMAN> shutdown immediate; RMAN> startup mount; -- Sadece "tablespace" offline duruma almak için SQL> alter tablespace users offline; -- Tablespace restore ve recovery işlemini başlatıyoruz. RMAN> restore tablespace users; RMAN> recover tablespace users; -- Offline duruma çektiğimiz tablespace yeniden online duruma getiriyoruz. SQL> alter tablespace users online; -- Dosya lokasyonu kullanarak "datafile" kurtarma işlemi yapabiliriz. RMAN> restore datafile '/u01/app/oracle/oradata/ORCL/datafile/' RMAN> recover datafile '/u01/app/oracle/oradata/ORCL/datafile/' -- Kurtarma işlemini "datafile" numaralarını biliyorsak onları girerekte yapabiliriz. RMAN> restore datafile 1, 3, 4; RMAN> recover datafile 1, 3, 4;
3. Veritabanımızda “controlfile” veya “spfile” kaybedildiğinde geri dönme işlemi için aşağıdaki komutları kullanabiliriz.
-- Control file onarma işlemi için -- Rman aracımıza bağlanıyoruz. $ rman target / -- Veritabanımızı "abort" ile kapatıyoruz. RMAN> shutdown abort; -- Veritabanımızı "nomount" modda açıyoruz. RMAN> startup nomount; -- DBID set ediyoruz. (DBID numarasını bir yerde muhakkak not etmemiz gereklidir.) -- DBID öğrenmek için veritabanımızda çalışır durumdayken aşağıdaki sorguyu çalıştırmalıyız. Eğer "DBID" elimizde yoksa "controlfile" onarma işlemini yapamayız. $ sqlplus / as sysdba SQL> select dbid from v$database; DBID ---------- 1342567501 RMAN> set dbid = 1342567501 -- Controlfile dosyamızı geri dönüyoruz. RMAN> restore controlfile; -- Controlfile dosyamızı belli bir yedekten dönmek için RMAN> restore controlfile from '/u01/backups/dbf_ORCL_814887234_65.rman'; -- Controlfile dosyamızı autobackup'dan dönmek için RMAN> restore controlfile from autobackup; -- Veritabanımızı "mount" moda getiriyoruz. RMAN> alter database mount; -- Veritabanımızı açıyoruz. RMAN> alter database open; -- Veritabanımızın açılışında aşağıdaki gibi bir hata ile karşılaşırsak aşağıdaki işlemlerle işlemimizi yapabiliriz. ORA-01589: must use RESETLOGS or NORESETLOGS option for database open $ rman target / RMAN> recover database; RMAN> alter database open resetlogs; RMAN> reset database; -- Böyle bir durumda daha önce almış olduğumuz yedekler SCN numarası sıfırlanacağından geçersiz duruma düşecektir. Veritabanımız açılınca muhakkak yedek almalıyız. $ rman target / RMAN> backup database; -- Spfile onarma işlemi için -- Spfile dosyamızı belli bir yedekten dönmek için RMAN> startup nomount; veya RMAN> startup force nomount; RMAN> restore spfile from '/u01/backups/sp_ORCL_815078760_6.rman'; -- Spfile dosyamızı autobackup'dan dönmek için RMAN> startup nomount; veya RMAN> startup force nomount; RMAN> restore spfile from autobackup; -- Spfile dosyamızı belli bir lokasyona dönmek için RMAN> restore spfile to '/tmp/spfileORCL.ora' from autobackup; -- Spfile dosyamızı Pfile olarak dönüp düzenleme yapmak için -- Spfile dosyamızda parametre değişikliği yapıp geri döneceksek aşağıdaki gibi örnek adımları uyguluyoruz. RMAN> restore spfile to pfile '/u01/app/oracle/product/11.2.0.3/db/dbs/initorcl.ora' from '/u01/backups/sp_ORCL_815078760_6.rman'; veya RMAN> restore spfile to pfile '/u01/app/oracle/product/11.2.0.3/db/dbs/initorcl.ora' from autobackup; -- Gerekli düzenlemeyi yapmak için açıyoruz. $ vim /u01/app/oracle/product/11.2.0.3/db/dbs/initorcl.ora -- Düzenleme sonrası spfile dosyamızı oluşturuyoruz. SQL> create spfile from pfile; RMAN> shutdown abort;
4. Veritabanımızı belli bir zamana geri döndürmek için aşağıdaki komutları kullanabiliriz.
-- Until Time’i tablespace’lerde de kullanabiliriz. -- Ancak Until Time’i kullanırken aşağıdaki durumlara dikkat etmeliyiz. -- Until Time ile veritabanını döndüreceğiniz zaman, yedek tarihinden sonra olmalı. Örneğin 22.10’da yedeği aldıysanız, 22:05’a dönemezsiniz. Mutlaka 22:10’dan sonraki bir zaman belirtilmeli. -- Until Time ile dönüş yapabilmek için arşiv dosyalarının mevcut olması gerekmektedir. Until Time ile recover yapacaksanız, önce arşiv dosyalarının olduğundan ve doğru konumda bulunduğundan emin olmalıyız. RMAN> restore database until time "TO_DATE('2013-05-08 22:10','YYYY-MM-DD HH24:MI')"; RMAN> recover database until time "TO_DATE('2013-05-08 22:10','YYYY-MM-DD HH24:MI')"; -- RMAN ile until time şeklinde dönüş yaparken "redo log" dosyalarının olmaması ile ilgili bir uyarı alırsak aşağıdaki yöntemle bunu aşabiliriz. -- Veritabanımızda "sysdba" rolü ile oturum açıyoruz. $ sqlplus / as sysdba -- Controlfile yedeğimizi '/tmp/controlfile.sql' yoluna çıkartıyoruz. SQL> alter database backup controlfile to trace as '/tmp/controlfile2.sql'; -- Controlfile yaratma scriptimizi sistemimize göre düzenliyoruz. $vim /tmp/controlfile.sql -- Controlfile yaratma scriptimizi çalıştırıyoruz. $ cd /tmp $ sqlplus / as sysdba SQL> @controlfile.sql Bu işlemden sonra yukarıdaki "until time" backup işlemini tekrar deneyebilirsiniz.
5. Veritabanımızda “ArchiveLog” dosyalarımızı yedekten dönmek için aşağıdaki yöntemleri kullabiliriz.
-- SCN (System Change Number) belirli aralıktaki arşiv dosyalarını dönmek için RMAN> restore archivelog scn between 22102012888 and 22102012999; -- Yedeklenmiş bütün arşiv dosyalarını dönmek için RMAN> restore archivelog all; -- 20 günden yeni 7 günden eski arşiv dosyalarının yedeğini dönmek için RMAN> restore archivelog from time 'SYSDATE-20' until time 'SYSDATE-7';
6. Veritabanımızda herhangi bir “datafile” dosyasının bir bloğunda arıza (block corruption) olursa aşağıdaki işlemlerle bunu düzeltebiliriz.
-- "Data Block Corrupted" yaşanması durumunda aşağıdaki gibi hatalar alabiliriz. ORA-01578: ORACLE data block corrupted (file # 4, block # 16) ORA-01110: data file 4: ‘/u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_8rk8hss2_.dbf’ -- Arızalı bloklarımızı onarmak için aşağıdaki komutu kullabiliriz. $ rman target / RMAN> blockrecover datafile 4 block 16; -- Arızalı bloklarımızı belli bir "backupset"den kurtarmak için RMAN> blockrecover datafile 4 block 16 from backupset; -- Arızalı bloklarımızı belli isimle etiketlenmiş (tag) "backupset"den kurtarmak için RMAN> blockrecover datafile 4 block 16 from tag = ORCL; # Arızalı bloklarımızı "Image Copy" yedeğimizden kurtarmak için RMAN> blockrecover datafile 4 block 16 from datafilecopy;
7. Yedek alırken veya “Backup Validate” komutu çalıştırıldığında RMAN bulduğu bozuk blokları “V$DATABASE_BLOCK_CORRUPTION” “view”ına yazar. Bozuk olan blok onarıldığında RMAN otomatik “V$DATABASE_BLOCK_CORRUPTION” “view”ını günceller. Geçmişten bugüne tüm bozuk olan blokların listesi “V$BACKUP_CORRUPTION” ve “V$COPY_CORRUPTION” “view”larından bulunabilir. Aşağıdaki komut çalıştırıldığında RMAN, “V$DATABASE_BLOCK_CORRUPTION” “view”ında bulunan tüm bozuk blokları onarır.
-- Bozuk olan Blokları sorgulamak için SQL> select * from v$database_block_corruption; -- Geçmişten bugüne bozuk olan blokları sorgulamak için SQL> select * from v$backup_corruption; veya SQL> select * from v$copy_corruption; -- Listede bulunan tüm arızalı blokları onarmak için RMAN> blockrecover corruption list;
8. Veritabanımızda sorun oluşması durumunda eğer “Image Copy” yedeği almışsak buna “switch” edebiliriz. Böyle bir işlem sonrası veritabanımız çalışır duruma geldiğinde yeniden “Image Copy” yedeği alarak orjinal yerine dönebiliriz. Bu işlem bize hızlı bir şekilde iş sürekliliği sağlamaktadır. Tabi “Image Copy” yedeği diske alınmış olmalıdır. Böyle bir durumda ihtiyacımız olan yedeğimizi alabileceğimiz boyutta bir disk alanına sahip olmamız gerektiğidir. Aşağıdaki işlemlerle veritabanımızı alınmış olan “Image Copy” yedeğine “switch” edebiliriz.
-- Veritabanımızı "Image Copy" yedeğine "switch" etmek için RMAN> switch database to copy; RMAN> recover database; -- Belli bir "datafile" "Image Copy" yedeğine "switch" etmek için -- Eğer datafile "offline" yapılamıyorsa veritabanımızı "mount" moda alıp aynı işlemleri tekrarlayabiliriz. SQL> alter database datafile 2 offline; RMAN> switch datafile 2 to copy; RMAN> recover datafile 2; SQL> alter database datafile 2 online; -- Belli bir "tablespace" "Image Copy" yedeğine "switch" etmek için -- Eğer datafile "offline" yapılamıyorsa veritabanımızı "mount" moda alıp aynı işlemleri tekrarlayabiliriz. SQL> alter tablespace users offline immediate; RMAN> switch tablespace users to copy; RMAN> recover tablespace users; SQL> alter tablespace users online;
9. Oracle 11g ile bizlere kolaylık olması için “RMAN” aracığında bir “advisor” geliştirildi. Bu “advisor” ile veritabanımızda oluşan hataları listeleyebilir, otomatik onarma scriptini oluşturabilir ve veritabanımızı onarabiliriz. Bu işlem yukarıda yaptığımız bir çok işi otomatik olarak yapmaktadır. Ancak unutulmaması gereken nokta bu işlem “Oracle RAC” veritabanlarında desteklenen bir yöntem değildir.
-- Hataları listelemek için RMAN> list failure; -- Hataları onarma scriptini oluşturmak için RMAN> advise failure; -- Hataları onarmak için RMAN> repair failure;
- RMAN Aracını Yapılandırma İşlemleri
Rman aracı ile alınacak yedeklerde belli ayarları yapabiliriz. Bu başlık altında yapılabilecek ve sık kullanılan ayarları inceleyeceğiz. Bu ayarlar genel olarak yapılabilmekle beraber alınacak yedeğe özel ayarlanabilir.
-- Configure Retention Policy >> Redundancy RMAN> configure retention policy to redundancy 1; -- Redundacy 1 olarak ayarlandığında "RMAN" geçmişe yönelik 1 yedeğimizi saklar. 2. Yedek alındığında 1. Yedeği obsolete olarak işaretler. Eğer "FRA" diskimizde yer kalmazsa RMAN bunu otomatik algılar ve "obsolete" yedeği siler. >> Recovery Window RMAN> configure retention policy to recovery window of 5 days; -- Recover window 5 gün set edildiğinde 5 günden eski yedekler obsolete olarak işaretlenir. -- Yedek işlemi sırasında otomatik "controlfile" yedeği almak için RMAN> configure controlfile autobackup on; -- Controlfile yedeğimizi belli bir lokasyona alması için RMAN> configure controlfile autobackup format for device type disk to '/u01/backups/%F.bck'; Bu komutla (%F) DBID, gün ay, yıl ve benzersiz bir sıra numarası ile yedek alacaktır. -- Eğer yapmış olduğumuz ayarı varsayılan ayarına döndürmek istiyorsak aşağıdaki komutu çalıştırmalıyız. "clear" komutu diğer ayarlar içinde kullanılabilir. RMAN> configure controlfile autobackup for device type disk clear; -- Daha önce yedeği alınmış ve herhangi bir değişikliğe uğramamış objelerin yedeklenmemesi için RMAN> configure backup optimization on; -- Alınan yedeklerin kaç paralel olarak kaç kanaldan yazılacağını belirlemek için RMAN> configure device type disk parallelism 3 backup type to backupset; -- Datafile yedeklerinin kopya adedi olarak kaç tane alınacağı belirlemek için RMAN> configure datafile backup copies for device type disk to 2; -- Arşiv dosya yedeklerinin kopya adedi olarak kaç tane alınacağını belirlemek için bu ayarı kullanabilir. Ancak 2 adet alacaksak 2 farklı lokasyon belirtilmelidir. RMAN> configure archivelog backup copies for device type disk to 2; -- Yedeğimizin kriptolu olarak alınması için RMAN> configure encryption for database on; RMAN> configure encryption algorithm ‘aes128′;
Bu makalemizde Oracle Backup & Recovery aracı olan RMAN (Recovery Manager) inceledik. Rman ile örnek olarak kurtarma makalemiz “Oracle Rman ile Veritabanı Kurtarma Uygulaması”nı inceleyebilirsiniz. Söz konusu makalemizde tamamen çökmüş bir veritabanını “rman” yedeğimizden ayağa kaldırma işlemlerini inceledik.
Başka bir makalede görüşmek üzere…