Oracle Veritabanlarında Backup & Recovery Uygulamaları (Rman)

OracleBackupBu 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…

Bu yazı Oracle kategorisine gönderilmiş ve , , , , , , , , , , , , , , , , , , , , , , , ile etiketlenmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.