Sequence Numarasına ve Thread Numarasına Göre Arşivlerin Yedeğini Almak

Merhabalar,

Bazen kayıtlı arşivlerimizin belirli bir bölümünün yedeğini almak isteriz. Standby veritabanı kurarken belirli arşivlerin eksik olduğunu gördüm. Production veritabanına bağlanarak thread numarasına ve sequence numarasına göre arşivlerin sıkıştırılmış yedeğini alıp standby a kopyaladım. Basit bir script ama sizlerle paylaşmak istedim.

run{
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT='/oracle/rman/thread2.bkp';
BACKUP ARCHIVELOG FROM SEQUENCE 7273 UNTIL SEQUENCE 7380 THREAD 2;
release channel ch1;
}

Rman'den Archivelog Silme

Merhabalar,

RMAN ile eski arşivleri silmek için öncelikle RMAN konsolunu açıp aşağıdaki komutları çalıştırın. Bu arada eğer her arşivi silerken emin misiniz gibi sorularla karşılaşmak istemiyorsanız

noprompt’ kullanabilirsiniz. Eğer silmek istediğiniz arşiv dosyası işletim sisteminden ya da ASM den silinmiş ise “force
kullanarak RMAN repository sinden de silebilirsiniz.

Tüm arşivleri silmek için :

delete archivelog all;

Diske 1 sefer yedeği alınmış arşivleri silmek için :

delete archive log all backed up 1 times to disk;

7 günden sonraki arşivleri silmek için :

delete backup completed before ‘sysdate -7′;

Belli bir zamana kadar olan arşivleri silmek için :

delete archivelog until time "to_date('APR 23 2007 14:00:00','Mon DD YYYY HH24:MI:SS')";

 

Veritabanı çökme senaryoları ve Rman yedeklerden dönme

Yedekten Kurtarma Yöntemleri

Veri tabanında filesystem’de veri tabanı dosyası kaybedilir veya fiziksel olarak disk storage’da bir problem olursa yedekten kaybedilen datafile’lar RMAN ile restore edilir.

a. Filesystem’de Sorun Yok, Datafile Kaybedildi.

Örneğin  alert.log’da  datafile 8 bulunamıyor bilgisi çıkıyor. Datafile 8 restore edilip recover edilmeli.

Veritabanı açık yada mount modda olmalıdır.

rman  target /

rman> restore datafile 8;

datafile restored.

man> exit.

sqlplus / as sysdba

recover datafile 8;

recovery completed.

 

b. Filesystem’de Sorun var, Datafile Kaybedildi.

Filesystem sorunu çözülemezse Datafile’ı başka yere restore etmeliyiz.

Örnekte datafile larımızı filesystem olarak /data1 klasörü içerisinde tutuyoruz. Bozuk olan datafile ları /data2 klasörüne kopyalıyoruz ve onun üzerinden restore ediyoruz.

Öncelikle datafile ların olduğu tablespace i offline duruma çekiyoruz.

sql 'alter tablespace ts_deneme offline';

rman target /

rman>

run

{

set newname for datafıle '/data1/orcl/datafile/datafile8.dbf' to   '/data2/orcl/datafile/datafile8.dbf';

set newname for datafıle '/data1/orcl/datafile/datafile9.dbf' to   '/data2/orcl/datafile/datafile9.dbf';

restore datafile  '/data2/orcl/datafile/datafile8.dbf', '/data2/orcl/datafile/datafile9.dbf';

swıtch datafıle all;   # control file'i yeni filenameler ile update

recover datafile '/data2/orcl/datafile/datafile8.dbf', '/data2/orcl/datafile/datafile9.dbf';

}

sql 'alter tablespace ts_deneme onlıne';

exit;

 

c. Controlfile’larda Sorun oldu.

Controlfile’ın değişik kopyaları sqlplus üzerinden listeliyoruz.

$ Sqlplus / as sysdba

Sql> show parameter control

/data1/orcl/controlfile/o1_mf_9bp3cy5x_.ctl,

/data2/orcl/controlfile/o1_mf_9bp3cy7s_.ctl

 

Veritabanı kapalı iken var olan controlfile var olmayan’ın üstüne kopyalanır.

İki dosya da varsa ve farklı dosyalar ise önce dosyalar farklı isimle yedeği alınır.

Birinden diğerine kopyalama yapılıp veri tabanı açılır.

Controlfile’dan dolayı hata devam ediyorsa, bu sefer diğer dosyayı yedeğimizden controlfile dosylarına kopyalarız.

Controlfile hiç yoksa, veritabanı nomount modunda açılır.

$ rman target /

Rman> Recover controlfile;

 

d.  (online log) Redo log dosyalarında Sorun oldu.

 

Redo log dosyası kaybı veri kaybı anlamına gelir. Ancak kaybedilen sadece bir kopya ise

/redo1/orcl/onlinelog/o1_mf_1_9bp3cyc2_.log

/redo2/orcl/onlinelog/o1_mf_1_9bp3d1jo_.log

Veritabanı açık  değilken (nomount ve mount modu olabilir) bulunmayan dosyanın üstüne var olan dosya kopyalanabilir. Veritabanı açılır.

Redolog kaybedilmişse.

Incomplete Recovery yapılmalıdır.

Incomplete recovery  işlemi için sırasıyla aşağıdaki işlemler yapılmalıdır:

1.shutdown abort

2.startup mount

3.nls_date_format set edilmeli

4.set until time (recover yapılacak zamana kadar olan zaman)

5.restore

6.recover

7.open resetlogs

8.backup

$ set NLS_DATE_FORMAT=YYYY-MM-dd HH24:MI:SS

rman target /

rman> run {

set until time ’2014-01-03  16:29:00’

restore database;

recover database;

alter database open resetlogs;

exit;

Full Rman Yedek Alma Scripti

Bu yazımda linux işletim sistemleri üzerinden rman scripti yazarak belirlediğimiz zaman dilimleri içerisinde oracle veritabanımızın full yedeğini almak üzere bir şeyler paylaşacağım.

Oracle kullanıcısının profile dosyasına ORACLE_SID ve ORACLE_HOME değerlerini yazıyoruz.

.bash_profile

export ORACLE_SID=orcl

export ORACLE_HOME=/oracle/app/oracle/product/11.2.0.4/db_home1

 

Oracle kullanıcısının altına dbscripts klasörü olusturup onun altına rman.sh dosyasını oluşturuyoruz.

#!/bin/bash

. /home/oracle/.bash_profile

rman target / nocatalog << EOF > /home/oracle/dbscripts/rman.log

run {

allocate channel c1 type disk;

allocate channel c2 type disk;

allocate channel c3 type disk;

allocate channel c4 type disk;

backup as compressed backupset archivelog all not backed up tag='ARCH';

backup as compressed backupset database tag='DATA';

backup current controlfile tag='CCF';

backup spfile tag='SPF';

release channel c1;

release channel c2;

release channel c3;

release channel c4;

}

exit

EOF