Press ESC to close

ORACLE BACKUP AND RESTORE RMAN

RMAN Oracle’ın sunduğu yedek alma ve kurtarma (Backup and Recovery) aracıdır. Online tutarlı yedekler almak istiyorsanız RMAN kullanmalısınız. RMAN ile yedek alabilmeniz için veritabananının archivelog modda olması gerekmektedir. Archivelog modda olan bir veritabanında geçmişte bir zamana dönebilme yeteneği bize sağloamasıdır.(PITR –> Point In Time Recovery) RMAN ile veritabanına aşağıdaki gibi bağlanabiliriz.
 rman target / 
--veya
rman target sys/Password@....

RMAN Konfigurasyonları

show all; komutu ile tüm konfigurasyonu görebiliriz.

RMAN> show all;

RMAN configuration parameters for database with db_unique_name DBM are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/12.2.0.0/db/dbs/snapcf_dbm2.f'; # default   

Konfigürasyonu default değerine almak için CLEAR özel anahtar kelimesi kullanılır.

RMAN>  CONFIGURE BACKUP OPTIMIZATION CLEAR;

RMAN configuration parameters are successfully reset to default value

Burada değiştirilen tüm konfigurasyonlar veritanbanında v$rman_configuration view’inde görüntülenebilmektedir.

Buradaki bazı önemli konfigürasyon parametreleri ne işe yarar onları inceleyelim;

  • Retention Policy : Alınan yedeğin saklanılma süresini belirler. 2 farklı kullanım şekli vardır.
    • İlki Redundancy Geçmişe yönelik kaç yedek saklayacağını belirler. 1 set edilirse RMAN 1 yedek saklar 2. yedek alındığında 1. yedek obsolete olarak işaretlernir.
    • İkincisi Recovery Window Yedeklerin ne kadar süre ile saklanacağını belirtir. Recovey Window 7 set edilirse 7 günden eskli yedekler obsolete olarak işaretlenir. Örnek
RMAN> CONFIGURE RETENTION POLICY TO recovery window of 7 days;

new RMAN configuration parameters:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
new RMAN configuration parameters are successfully stored
  • Yedeğin Alınacağı Ortam : Tape veya Disk olabilir eğer disk üzerine alacaksak default değeri budur yada aşağıdaki kod ile set edilir.
    • Disk için CONFIGURE DEFAULT DEVICE TYPE TO DISK
    • Tape kartuşa yedek alınıyorsa CONFIGURE DEFAULT DEVICE TYPE TO SBT
  • Control Dosyası Ve Parametre Dosyasının Otomatik Yedeğinin Alınması Defaultta On olarak gelir ancak On değilse de On olması tercih edilmelidir.
  • Control Dosyasının Yedek Yerinin Belirlenmesi: Varsayılan olarak FRA alanına kaydedilir. Eğer farklı bir yere kaydetmek istiyorsak; CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/files/dbm_frkcvk_ctf_%F';
  • Backup Optimization : ON olması durumunda yedeği alınmış ve herhangi bir değişikliğe uğramamış objeler yedeklenmez.
    • CONFIGURE BACKUP OPTIMIZATION ON;
  • Paralellik derecesi belirleme,
  • Sıkıştırma kullanımı,
  • Şifreleyerek Backup alma,
  • Archive Dosyalarının Silinmesi : Varsayılan olarak NONE gelir. bu şekilde iken terminalden
    • backup archivelog delete input komutu ile veya
    • delete archivelog komutu ile silme işlemi yapılır.
  • Maksimum Yedek Boyutu: MAXSIZE parametresini en büyük datafile boyutunu geçmeyecek şekilde ayarlamak bazı durumlarda hata almamızın önüne geçecektir.
  • SNAPSHOT CONTROLFILE backup alınması sırasında geçici bir control file oluşturulur bu oluşturulan control file yeri ve ismi bu parametre ile ayarlanabilir.

Şimdi bir backup almayı deneyelim;

RMAN> backup database;

Starting backup at 27-OCT-20
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=406 instance=dbm2 device type=DISK
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 10/27/2020 16:26:42
RMAN-06149: cannot BACKUP DATABASE in NOARCHIVELOG mode

Backup alamadık çünkü veri tabanımız archivelog modda değil RMAN backup almak ve backup tan geri doönmek istiyorsak veritabanı archivelog modda olması gerekmektedir. Veritabanımız archivelog moddamı kontrolü için

SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /u01/app/oracle/product/12.2.0.0/db/dbs/arch
Oldest online log sequence     25
Current log sequence           27

Archivelog moda almak için önce veritabanı kapatılır sonra mount modda açılır, aşağıdaki komut ile archivelog mode açılır ve sonra alter yapılarak tekrar veritabanı açılır

SQL> shu immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;

Tekrar kontrol

SQL> archivelog list
SP2-0734: unknown command beginning "archivelog..." - rest of line ignored.
SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/product/12.2.0.0/db/dbs/arch
Oldest online log sequence     25
Next log sequence to archive   27
Current log sequence           27

Şimdi backup alabiliriz;

RMAN> backup database;

Starting backup at 27-OCT-20
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=274 instance=dbm1 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00003 name=+DATA/dbm/undotbs01.dbf
input datafile file number=00005 name=+DATA/dbm/undotbs02.dbf
input datafile file number=00001 name=+DATA/dbm/system01.dbf
input datafile file number=00002 name=+DATA/dbm/sysaux01.dbf
input datafile file number=00004 name=+DATA/dbm/users01.dbf
channel ORA_DISK_1: starting piece 1 at 27-OCT-20
channel ORA_DISK_1: finished piece 1 at 27-OCT-20
piece handle=/u01/app/oracle/product/12.2.0.0/db/dbs/0ive1gk8_1_1 tag=TAG20201027T163416 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:25
Finished backup at 27-OCT-20

Starting Control File and SPFILE Autobackup at 27-OCT-20
piece handle=/u01/app/oracle/product/12.2.0.0/db/dbs/c-1536099635-20201027-00 comment=NONE
Finished Control File and SPFILE Autobackup at 27-OCT-20

Archive dizinini ASM de bir disk group olarak düzenlemek istersek , 

SQL> alter system set log_archive_dest_1='LOCATION=+RECO' scope=both sid='*';

System altered.

INCREMENTAL BACKUP

Incremental backup demek bir önceki backuptan sonraki değişen blokların backup ını al anlamına gelir. Block değişikliklerini izlemek için oracle Block Change Tracking File dosyasının enable olarak set edilmesi gerekir . nasıl enable edilir. 

https://www.farukcevik.com.tr/blog/2019/09/19/block-change-trancking-file 

oracle değişen blokların yerini Block Change Tracking File dosyasından bulacak ve değişen blokların backup ını çok hızlı bir şekilde alabilecektir.

 

SQL> select filename, status, bytes from   v$block_change_tracking;

FILENAME                           STATUS          BYTES
------------------------------    ----------     ----------
                                   DISABLED
            
SQL> alter database enable block change tracking using file '/backup/block_change_tracking.dbf';

Database altered

SQL> select filename, status, bytes from   v$block_change_tracking;

FILENAME                           STATUS          BYTES
------------------------------    ----------     ----------
/backup/block_change_tracking.dbf   ENABLED      11599872

L0 backup

Bildiğimiz Full Backup 

RMAN> backup incremental level=0 database;

L1 Backup

Son alınan L0 backuptan sonraki değişen blokların backup olarak alınır.

RMAN> backup incremental level=1 database;

Bununda iki türü vardır, varsayılan olanı

  • differantial dır ve son alınan L0 veya L1 den sonraki değişen blokların yedeğini alır.
  • Birde Cumulative olanı vardır bu ise son alınan L0 dan sonraki değişen blokların yedeğini alır L1 leri yok sayar.
RMAN> backup incremental level=1 cumulative database;

Archive Listelemek Veya Silmek İçin

RMAN> list archivelog all;
RMAN> list copy of archivelog until time 'SYSDATE-1';
RMAN> list copy of archivelog from time 'SYSDATE-1'; 
RMAN> list copy of archivelog from time 'SYSDATE-1' until time 'SYSDATE-2'; 
RMAN> list copy of archivelog from sequence 68; 
RMAN> list copy of archivelog until sequence 200; 
RMAN> list copy of archivelog from sequence 68 until sequence 200; 

--For Delete;

RMAN> delete archivelog all;
RMAN> delete archivelog until time 'SYSDATE-1'; 
RMAN> delete archivelog from time 'SYSDATE-1'; 
RMAN> delete archivelog from time 'SYSDATE-1' until time 'SYSDATE-2'; 
RMAN> delete archivelog from sequence 68; 
RMAN> delete archivelog until sequence 200; 
RMAN> delete archivelog from sequence 68 until sequence 200; 

RMAN Backup TAG & FORMAT

RMAN> backup database;

Yukarıdaki gibi aldığımız tüm rman backupları , @ORACLE_HOME/dbs dizini altına yedeklenecektir, bu istenen bir durum değildir, bunun yerine backuplara Format ve TAG vererek istenen yerlere , gerektiğinde restore için çağırabileceğimiz TAG ler vererek backup alabiliriz ve genelde bu şekilde backuplar alıp restore işlemi yapacağız. Aşağıda format ve TAG kullanarak bir backup alma örneği verilmiştir.

RMAN> BACKUP DATABASE FORMAT '/data/backup/dbf_%d_%t_%s.rman' TAG='FULL_BACKUP_20202910';
RMAN> backup database format '/data/backup/dbf_%d_%t_%s.rman' TAG='FULL_BACKUP_20201029' PLUS ARCHIVELOG format '/data/backup/arc_%d_%t_%s.rman' TAG='ARCHLOG_20201029_1300';

Şimdi ise bu aldığımız yedekleri birde sıkıştırarak almaya çalışalım; ( as COMPRESSED BACKUPSET )

 RMAN> BACKUP as COMPRESSED BACKUPSET DATABASE FORMAT '/data/backup/dbf_%d_%t_%s.rman' TAG='FULL_BACKUP_20201029' plus archivelog format '/data/backup/arc_%d_%t_%s.rman' TAG='ARCHLOG_20201029_1315';

Şimdi aldığımız backupları RMAN ile listeleyerek bir görelim; list backup komutu ile aldığımız yedekleri listeleyebiliriz; Daha küçük bir liste görmek içinlist backup summary kullanlabilir

RMAN> list backup summary;

List of Backups
===============
Key TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
----- -- -- - ----------- --------------- ------- ------- ------
9  B  A  A DISK 29-OCT-20   1  1  YES     ARCHLOG_20201029_1315
10 B  F  A DISK 29-OCT-20   1  1  YES     FULL_BACKUP_20201029
11 B  A  A DISK 29-OCT-20   1  1  YES     ARCHLOG_20201029_1315
12 B  F  A DISK 29-OCT-20   1  1  NO      TAG20201029T160026

CROSSCHEK BACKUP

Alınan yedeklerin işletim sistemi tarafında silinmesi, taşınması veya bozulması durumunun kontrolü için kullanılır, BAckup bilgisi eğer bir katalog kullanmıyorsak Controfile üzerinde tutulur, Crosscheck yaptığımızda bu bilgiler güncellenir , crosshcek sonunda retention dolmuş backup, archive lar expire olarak işaretlenir sonraki delete de silinir.

RMAN> crosscheck backup;

using channel ORA_DISK_1
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/data/backup/dbf_FRKDB_1055089283_18.rman RECID=18 STAMP=1055089283
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/data/backup/arc_FRKDB_1055089308_19.rman RECID=19 STAMP=1055089308
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=+FRA/FRKDB/AUTOBACKUP/2020_10_29/s_1055089309.263.1055089311 RECID=20 STAMP=1055089309
Crosschecked 3 objects

Archivelogların Croscheck yapılması için;

RMAN> crosscheck archivelog all;
--or
RMAN> crosscheck backup of archivelog all spfile

Backup Image Copy ise;

RMAN> crosscheck copy of database;

Kullanılabilir Olmayan Expired yedeklerin silinmesi için

RMAN> delete expired backup;

RMAN> delete expired copy;

Obsolete olmuş backupları sorgulamak ve silmek için;

RMAN> report obsolete;

RMAN> delete obsolete;
RMAN> delete noprompt obsolete;

IMAGE COPY BACKUP

Veri tabanımızın yedeğini Image Copy kullanarak alabiliriz. Bu yöntemle yedek ancak disk ortamına alınabilir. 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. Fakat boş bloklarda Image copy backup içerisinde olacağından disk alanından kaybımız olacaktır.

RMAN> backup as copy database;

Kontrol için;

RMAN> restore database validate;

Tablespace Ve Datafile Yedekleme

RMAN> backup tablespace tbs_frkcvk,users;

Datafile yedeği almak için öncelikle hangi datafile yedeklerini alacağız kararını vermemiz gerekiyor;

RMAN> backup datafile 4,5;

RESTORE & RECOVERY

Kurtarma işleminde hangi yedekten dönmek istediğimizi belirtmez isek son alınan yedek kullanılır. Öncelikle dönmek istediğiiz backup için bir validate komutunu çalıştırmalıyız.

RMAN> restore database validate;

Database’in tamamen çökmesi ya da tamamen değişmesi durumunda full recover gerekecektir. Full recover için, database’in mutlaka mount mode’da açılmış olması gerekir. Mount modda olan database için aşağıdaki komutlar ile sırasıyla Restore ve Recover işlemlerin gerçekleştiririz, Restore işlemlerinde Datafile lar kurtalırı, Recover işleminde ise Archive ve archive backuplarından son ana kadar kurtarma işlemi yapılır

RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE; 

Belli bir backupa dönmek istiyorsak TAG kullanabiliriz;

RMAN> restore database from TAG='FULL_BACKUP_20201029';
RMAN> recover database from TAG='FULL_BACKUP_20201029';

Her zaman bu şekilde kurtarma senaryosu olmayabilir sadece bir datafile veya bir tablespace kurtarma ile veritabanı kurtulabilir. O durumda veritanabanı kapatılmadan (mount moda çekmeden) ilgili datafile veya tablespace kurtarılabilir. Burada dikkat edilmesi gereken konu datafile kurtaracaksak ilgili datafile, tablespace de kurtaracaksak ilgili tablespace offline durumda olmalıdır (SYSTEM tablespcae hariç ayrıca istenirse mount moda alınıp bu işlemler yapılabilir).

--Tablespace ismi belirterek kurtarma
RMAN> RESTORE TABLESPACE TBS_FRKCVK, USERS;
RMAN> RECOVER TABLESPACE TBS_FRKCVK, USERS;

--Dosya konumu kullanarak datafile kurtarma
RESTORE DATAFILE '+DATA/FRKDB/DATAFILE/tbs_frkcvk.267.1055097185';
RECOVER DATAFILE '+DATA/FRKDB/DATAFILE/tbs_frkcvk.267.1055097185'; 

--Dosya numarası (FILE#) ile datafile kurtarma
RMAN> RESTORE DATAFILE 4,5;
RMAN> RECOVER DATAFILE 4,5;

Bu verilen örneklerin hepsi son backup’a göre recover edilir. Eğer daha farklı bir backup kullanmak istiyorsak, FROM TAG ifadesini kullanabiliriz.

Yedekten Controlfile Kurtarma ;

Controlfile silinmemesi gerek bir doyadır ancak olaki ulaşamıyorsunuz veya başka bir durum dolayısıyla controlfile yedeğine dönme ihtiyacınız oldu,  bu durumda RMAN üzerinde restore edilebilir, bunun için veritabanı nomount modda olmalıdır.

RMAN> restore controlfile FROM AUTOBACKUP;

Starting restore at 29-OCT-20
using channel ORA_DISK_1

recovery area destination: +FRA
database name (or database unique name) used for search: FRKDB
channel ORA_DISK_1: AUTOBACKUP +FRA/FRKDB/AUTOBACKUP/2020_10_29/s_1055097936.268.1055097937 found in the recovery area
AUTOBACKUP search with format "%F" not attempted because DBID was not set
channel ORA_DISK_1: restoring control file from AUTOBACKUP +FRA/FRKDB/AUTOBACKUP/2020_10_29/s_1055097936.268.1055097937
channel ORA_DISK_1: control file restore from AUTOBACKUP complete
output file name=+DATA/FRKDB/CONTROLFILE/current.257.1055082967
output file name=+FRA/FRKDB/CONTROLFILE/current.256.1055082967
Finished restore at 29-OCT-20

Control file restore yapıldığında incarnation noktası oluşacaktır bu yüzden resetlogs ile veritabanı başlatılabilir. Incarnation noktası demek veritabanı için yeni bir hayatın başlangıcı anlamına gelecektir.

RMAN> alter database mount;
RMAN> alter database open reselogs;

Incarnation sorgulamak için;

RMAN> list incarnation of database;

RMAN İle Belli Bir Zamana Dönmek İçin; Until Time veya Until SCN kullanılabilir; aşağıda until time örneği verilmiştir.

RMAN> restore database until time "to_date('29-10-2020 17:30','DD-MM-YYYY HH24:MI')";

RMAN> recovery database until time "to_date('29-10-2020 17:30','DD-MM-YYYY HH24:MI')";

Comments (1)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir