22 Aralık 2008 Pazartesi

RMAN Tablespace Point-in-Time Recovery

RMAN Tablespace Point-in-Time Recovery (TSPITR) veritabanındaki bir tablespace' in belirli bir zamana dönülmesine olanak sağlan veri kurtarma seçeneklerinden biridir. TSPITR tablespace' de bulunan bütün datayı istediğimiz zamana dönecektir.

Bu işlem için gerekli olanlar;

- Veriyi kurtarmak istediğimiz zamandan önce alınmış ve cross-check yapılmış backup(full veya incremental)
- Backup alındıktan sonra Tablespace' i getirmek istediğimiz zamana kadar çıkan arşiv dosyaları
- İşlemi yapabilmek için gerekli disk alanı

Tablespce point-in-time recovery bir recovery işlemi olduğu için öncelikle mevcut tablespace üzerindeki tüm datayı ezecektir. Bu nedenle kesinti gerektirir ve tablespace üzerinde etkilenmesini istemediğimiz başka datamız varsa bunların da export ile bir yere yedeklenmesi gerekir. İşlem bittikten sonra export aldığımız kayıtlarımızı yeniden import edebiliriz.

Senaryo olarak şöyle bir örnek uygulabiliriz. Bir tablo drop edildi(purge dahil) ve tablesapce üzerinde başka bir tablo da yok. Bu durumda tabloyu kurtarmak için bu yöntemi uygulayabiliriz.

TSPITR iki şekilde uygulanabilir:
- uygulama veritabanı üzerinde canlı olarak
- Geçici bir instance üzerinde kurtarılmak istenen tablespace create edilerek. Bu durumda zorunlu tablespacelerin de (SYSTEM,UNDO) create edilmesi gerekir. Bu işlemi yapmak için datanın büyüklüğüne göre ekstra disk alanına ihtiyaç duyabiliriz.

1. yöntem uygulama veritabanı üzerinde çalışması nedeniyle ile riskli gelirse veya kesinti yapma şansınız yoksa 2. yöntemi rahatlıkla uygulabilirsiniz. Ben de kesinti yapamadığım için 2. yöntemi uygulamıştım.

Şimdi sırasıyla bu yöntemleri nasıl uygulabileceğimizi ve hazırlık için neler yapmamız gerektiğini anlatacağım.

Başlamadan önce her iki yöntem için ortak olan kısımlardan bahsedeyim.

Her iki yöntemde de AUX1 adından geçici bir instance create ediyoruz.
Bu instance uygulama veritabanından elde edilmiş bir pfile ile nomount olarak başlatılacak.

AUX1 instance için yapacaklarımız
- orapw dosyası hazırlamak.
- pfile hazırlamak.
- tns ve listener ayarlarını hazırlamak
- nomount olarak çalışır hale getirmek.

Hazırlıklarımızı yaptıktan sonra yöntemlerin kendine has kısımlarına geçebiliriz.

1. yöntem

Aşağıdaki script disk üzerinde alınmış bir backup için hazırlandı. Bu scripti kendi yedek şeklinize göre düzenleyebilirsiniz.

set ORACLE_SID=AUX1
Set NLS_DATE_FORMAT=MM/DD/YYYY HH24:MI:SS

connect target sys/oracle@orcl
connect auxiliary sys/oracle@aux1

run {
ALLOCATE AUXILIARY CHANNEL A1 TYPE DISK;
ALLOCATE CHANNEL c1 TYPE DISK;
recover tablespace tbs until time "TO_DATE('03/11/2008 17:19:29','DD/MM/YYYY HH24:MI:SS')";
}


Scripti çalıştırdığımızda RMAN sırayla şunları yapacak
- Geçici instance(AUX1) üzerinde ismini verdiğimiz tablespace ve gerekli olan tablespaceleri restore edecek.
- Geçici veritabanı istenilen tarihe kadar recover edilecek.
- Geçici veritabanı resetlogs ile açacak.
- Dönmek istediğimiz tablespace' in exportunu alacak.
- Dönmek istediğimiz tablespace' i uygulama veritabanına import edecek.


2. yöntem

Aşağıdaki parametreler datafileları rename etmeden devam edebilmemiz için gereklidir.Datafileları örnek scriptteki gibi rename edeceksek bu parametreleri eklememize gerek yok.


DB_FILE_NAME_CONVERT=("D:\oracle\product\10.2.0\oradata\orcl", "D:\oracle\product\10.2.0\oradata\AUX1")
LOG_FILE_NAME_CONVERT=("D:\oracle\product\10.2.0\oradata\orcl","D:\oracle\product\10.2.0\oradata\AUX1")


--------------------------------------------------

set ORACLE_SID=AUX1
Set NLS_DATE_FORMAT=MM/DD/YYYY HH24:MI:SS

rman connect /

run {
restore controlfile from 'D:\ORACLE\PRODUCT\10.1.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\2008_11_03\O1_MF_N_669835169_4JY5N2DO_.BKP'
until time "TO_DATE('03/11/2008 17:19:29','DD/MM/YYYY HH24:MI:SS')";
}

sql "alter database mount clone database";

run {

ALLOCATE CHANNEL c1 TYPE DISK;

set until time "TO_DATE('03/11/2008 17:19:25','DD/MM/YYYY HH24:MI:SS')";

set newname for datafile 1 to 'D:\oracle\product\10.2.0\oradata\AUX1\system01.dbf';
set newname for datafile 2 to 'D:\oracle\product\10.2.0\oradata\AUX1\undotbs01.dbf';
set newname for datafile 3 to 'D:\oracle\product\10.2.0\oradata\AUX1\sysaux01.dbf';
set newname for datafile 5 to 'D:\oracle\product\10.2.0\oradata\AUX1\tbs01.dbf';

restore tablespace system, undotbs1, sysaux, tbs;

switch datafile all;

sql "alter database datafile 1,2,3,5 online";

recover database skip forever tablespace USERS;

sql "alter database rename file ''D:\oracle\product\10.1.0\oradata\orcl\REDO01.LOG'' to ''D:\oracle\product\10.2.0\oradata\AUX1\REDO01.LOG''";

sql "alter database rename file ''D:\oracle\product\10.1.0\oradata\orcl\REDO02.LOG'' to ''D:\oracle\product\10.2.0\oradata\AUX1\REDO02.LOG''";

sql "alter database rename file ''D:\oracle\product\10.1.0\oradata\orcl\REDO03.LOG'' to ''D:\oracle\product\10.2.0\oradata\AUX1\REDO03.LOG''";

release channel c1;
}

SQL> connect / as sysdba;
SQL> recover database until cancel using backup controlfile;


Bu aşamadan sonra yeni database resetlogs ile açarız ve istediğimiz tablespace hazır hale gelir.
Bundan sonra export ve import işlemlerini manuel yapmamız gerekir.

Hiç yorum yok:

Yorum Gönder