RMAN-2

Bir Önceki yazımızda temel olarak backup komutlarını ve RMAN parametrelerini görmüştük. Şimdi yedek alma işlemlerinin biraz daha detayına balkalım.

RAMAN> backup database;

Bu şekilde backup aldığımızda $ORACLE_HOME/dbs altına yedeklerimiz alınacak ki bu çok istediğimiz bir durum oluşturmaz bunun yerinde format ve TAG vererek backup olmak daha doğru bir yaklaşımdır.

RMAN> BACKUP DATABASE FORMAT '/data/backup/dbf_%d_%t_%s.rman' TAG='FULL_BACKUP_20202910';

backup dosyamız

dbf_FRKDB_1055087009_1055087009_3.rman

alınan yedeğe genelde archive log dosyalarıda eklenir, o zaman backup komutumuz;

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';

dosyalarımıza bakalım

arc_FRKDB_1055087638_5.rman  
arc_FRKDB_1055087642_7.rman  
dbf_FRKDB_1055087639_6.rman

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

 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 yedeği RMAN ile listeleyerek bir görelim; list backup komutu ile aldığımız yedekleri listeleyebiliriz;

RMAN> list backup;

List of Backup Sets
===================

****** Uzun olduğu için yazmadım

Alınan yedeklerin özet bilgisini görmek için

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;

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
crosscheck archivelog all;
--veya
crosscheck backup of archivelog all spfile

Image Copy backup alındıysa

crosscheck copy of database;

Kullanılabilir Olmayan Expired yedeklerin silinmesi için

RMAN> delete expired backup;

RMAN> delete expired copy;

-- Obsolete duruma düşmüş yedekleri sorgulamak için

RMAN> report obsolete;

-- Obsolote duruma düşmüş yedekleri silmek için
RMAN> delete obsolete;
RMAN> delete noprompt obsolete;

-- Belli bir zamandan önceki Archivelog backuplarını silmek için aşağıdaki
 komutu kullanabiliriz.

RMAN> delete archivelog all completed before 'sysdate -7';

Backup piece’leri farklı bir lokasyona taşırsanız; aşağıdaki adımları gerçekleştirerek, backup piece’leri RMAN’e tekrar tanıtabilirsiniz:
Önce dosyaları kontrol ediyoruz ;

 RMAN> CROSSCHECK BACKUP;

Backup pieceler olmadığı için expired olacaktır

RMAN> DELETE FORCE EXPIRED BACKUPSET OF DATABASE; 

Yeni lokasyonlarını tek tek belirtmemiz gerekiyor;

RMAN> catalog backuppiece '/data/new_backup/dbf_FRKDB_1055090774_22.rman';

sonrasında tekrar crosscheck yapıp kontrollerimizi yapıyoruz.

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 de olacağından disk alanından kaybımız olacaktır.

RMAN> backup as copy database;

yedeğimizi kontrol etmek 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 klararını vermek gerekiyor;

SQL> select tablespace_name, file#, name from v$datafile_header;

TABLESPACE_NAME   FILE#  
NAME

SYSTEM     1   +DATA/FRKDB/DATAFILE/system.261.1055082969
SYSAUX     2   +DATA/FRKDB/DATAFILE/sysaux.262.1055082971

UNDOTBS1   3   +DATA/FRKDB/DATAFILE/undotbs1.263.1055082971


USERS      4   +DATA/FRKDB/DATAFILE/users.265.1055082975
TBS_FRKCVK 5   +DATA/FRKDB/DATAFILE/tbs_frkcvk.267.1055097185
RMAN> backup datafile 4,5;

YEDEKTEN DÖNME (RESTORE AND 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

RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE; 

komutları ile kurtarma işlemini yaparız.

Belli bir backupa dönmek istiyorsak TAG kullanabiliriz;

restore database from TAG='FULL_BACKUP_20201029';
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, 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.

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

RMAN İle Belli Bir Zamana Dönmek İçin;

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')";

Bir sonraki RMAN-3 yazımızda bazı örnek senaryoları göreceğiz.