Flashback Database Komutu Kullanımı ve Yapabilirlikleri

Flashback database özelliği, database’ i zaman içerisinde sisteminizin kapasitesi elverdiği ölçüde zamanda ileri veya geri götürmektir diye tanımlayabiliriz. Bu özellik özellikle test database’ leri için ciddi kolaylıklar getirmektedir. Çoğu test ortamları için, çeşitli sebeblerden dolayı test yapıldıkdan sonra da eski haline tekrar çekmek gerekiebiliyor. Test başarısız olduğunda yeni bir test için başlangıç duruma geçmek gerekebiliyor. Şimdi bu işlemi nasıl yapabileceğimizden bahsedelim biraz;

Flashbackle ile ilgili diğer yazılarımda database’ in flashback modda olup olmadığından nasıl kontrol edeceğimizden, flashback modda değil ise nasıl flashback moda alacağımızdan ve hangi parametrelerini set edeceğimizden bahsetmiştik, dolayısıyla burda tekrar bu kısımlardan bahsetmeyeceğim.

Flashback database ile yapılacak operasyonları 3 şekilde yapabiliriz. Birincisi SCN ile, ikincisi adını bizim belirlediğimiz bir restore point noktası ile, üçüncüsü ise tarih belirterek flashback database komutunu çalıştırabiliriz.

Flashback database, RMAN üzerinden FLASHBACK DATABASE komutu ile veya SQL üzerinden FLASHBACK DATABASE komutu ile kesintisiz olarak ulaşılabilir. Hızlı bir şekilde mantıksal veri bozulması veya kullanıcı hatalarından dolayı veritabanını kurtarmak için bu komutu kullanabilirsiniz. Aşağıdaki örnekler ile, belirtilen SCN anına veya önceden alınmış olan restore noktasına veritabanını geri döndürebiliriz. Aşağıda bu konu ile ilgili kullanabileceğimiz muhtemel komutları görebilirsiniz ;

— sistemin şu anki SCN değerini öğrenmek için;
SELECT CURRENT_SCN FROM V$DATABASE;

— sistem SCN hangi zamanı işaret ettiğini görmek için;
SELECT SCN_TO_TIMESTAMP( 34530329701 ) FROM DUAL;

— Bir zaman aralığını SCN olarak neye denk geldiğini görmek için;
SELECT TIMESTAMP_TO_SCN(TO_TIMESTAMP(‘16.10.2010 00:48:17’, ‘DD.MM.YYYY HH24:MI:SS’) ) FROM DUAL;

— dönebileceğiniz en eski SCN değerini öğrenmek için ;
SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME FROM V$FLASHBACK_DATABASE_LOG;

— alınmış olan flahback loglarını görmek için;
SELECT * FROM V$FLASHBACK_DATABASE_LOGFILE;

— flashback recovery area’ nın doluluk oranlarını takip etmek için;
SELECT name,
TO_CHAR (space_limit, ‘999,999,999,999’) AS space_limit,
TO_CHAR (space_limit – space_used + space_reclaimable,
‘999,999,999,999’)
AS space_available,
ROUND ( (space_used – space_reclaimable) / space_limit * 100, 1)
AS pct_full
FROM v$recovery_file_dest;

— restore point noktası create etmek için ;
CREATE RESTORE POINT before_upgrade;
CREATE RESTORE POINT before_upgrade GUARANTEE FLASHBACK DATABASE;

— create edilmiş olan restore noktalarını select etmek için;
SELECT NAME, SCN, TIME, DATABASE_INCARNATION#, GUARANTEE_FLASHBACK_DATABASE,STORAGE_SIZE
FROM V$RESTORE_POINT;

— rman üzerinden alınmış olan restore noktalarını görmek için ;
LIST RESTORE POINT restore_point_name;
LIST RESTORE POINT ALL;

— GUARANTEE ile alınmış olan restore pointleri görmek için;
SELECT NAME, SCN, TIME, DATABASE_INCARNATION#, GUARANTEE_FLASHBACK_DATABASE, STORAGE_SIZE
FROM V$RESTORE_POINT
WHERE GUARANTEE_FLASHBACK_DATABASE=’YES’;

— alınmış bir retore point noktasını drop etmek için;
DROP RESTORE POINT before_app_upgrade;

–flashback database komutu ile geriye dönmek için ;
FLASHBACK DATABASE TO TIMESTAMP SYSDATE-1;
FLASHBACK DATABASE TO RESTORE POINT ‘before_upgrade’;
FLASHBACK DATABASE TO SCN 202381;

— istenilen bir tablespace flashbach dışında tutmak için ;
ALTER TABLESPACE tbs_3 FLASHBACK OFF;

— flashbach modda olmayan tablespace’ I flashback kapsamına almak için ;
ALTER TABLESPACE tbs_3 FLASHBACK ON;

— flashback databae’ i disable yapmak için (disable yaparken, database mount veya open modda olabilir ancak enable yaparken mutlaka mount modda olması gerekmektedir.)
ALTER DATABASE FLASHBACK OFF;

Flashback database komutları mount modda çalışır. Flashback database ile geçmişde bir ana dönüldükden sonra database “alter database open resetlogs” komutu ile açılmalıdır. Ancak flashback database komutu ile işlemimizi gerçekleştirdikden sonra doğruluğunu test etmek için database’ i “ALTER DATABASE OPEN READ ONLY” komutu ile read only modda açabiliriz. İşimiz bittikden sonra ise;

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN RESETLOGS;

Ile açmamız gerekir.

Guarante restore point sadece flashback logları için yeterince yer olması durumunda garanti eder.Guaranteed restore points ile alınmış olan restore noktası kullanıcı tarafından mutlaka DROP RESTORE POINT komutu ile düşürülmelidir. Guarante ile alınmış olan restore noktalarında zaman aşımı veya üzerine yazma gibi durumlar olmayacağından drop edilmediği sürece sürekli olarak yer kaplamaya devam edeceklerdir. Guarante restore point ile flash_recovery_area’ nın önemli bir alanı kullanıyor olabilirsiniz. Bu nedenle, oracle Guarante restore point create işlemi çok iyi düşünüldükden sonra yapılmalıdır der.

Flashback database işlemi geleneksel point-in-time recovery işlemine benzer. Size geçmiş bir zamana veritabanınızı dönmenizi sağlar. Flashback database, point-in-time recovery işleminden çok daha hızlıdır çünkü, datafile’ leri restore etmek için backup’ a ve archive loglara ihtiyaç duymaz.

Flashback Database’ in Limitleri;

Flashback database, komutu çalıştırdığınızda şu anda mevcut datafile’ ler için undoda ki değişiklikleri çalıştırdığından, aşağıdaki sınırlamalara sahiptir:

1 – Flashback database ile sadece Oracle Database’ i tarafından datafile üzerinde yapılan değişikliklerini geri alabilirsiniz. Kazara silinen datafile’ leri veya disk üzerindeki problemlerden dolayı oluşan durumları flashback database ile düzeltemezsiniz.

2 – Undo datafile’ i üzerinde shrink yaparsanız Flashback database’ i kullanamazsınız. Ancak, offline’ a alabilir, flasback database komutunu çalıştırıp sonrasında restore / recover işlemini gerçekleştirebilirsiniz.

3 – Drop edilen datafile için Flashback database komutunu kullanamazsınız. Sadece RMAN ile datafile’ I kurtarabilirsiniz.

4 – Control file dosyası backupdan restore edilir veya re-create edilirse, tüm flashback logları kullanılamaz hale gelir veya control file’ in create edildiği tarihden öncesine flashback database komutu kullanamazsınız.

5 – Flashback database komutu NOLOGGING yapılan işlemlerden etkilenir. Yani geçmişde direct-path yöntemiyle nologging yapılan bir insert işlemi öncesinde dönülmek istendiğinde blok corruption oluşabilir.

Bu kadar yazdıkdan sonra pratikde bir örneğini test ederek görelim.

Database’ imizi immediate ile kapatıp, mount modda açalım ;

SQL> shutdown immediate;
Veritabanı kapatıldı.
Veritabanı kullanıma kapatıldı.
ORACLE anı kapatıldı.
SQL> startup mount
ORACLE anı başlatıldı.
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 79694724 bytes
Database Buffers 524288000 bytes
Redo Buffers 7135232 bytes
Veritabanı kullanıma açıldı.

Rman’ e connect olup flashback database komutumuzu burdan çalıştıralım ;

C:\Documents and Settings\Administrator>rman target /
Kurtarma ¦darecisi : Release 10.2.0.1.0 – Production on Paz Oca 2 23:50:16 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
 hedef veritabanına bağlanıldı: WINDB (DBID=1657424315, açık değil)
RMAN> FLASHBACK DATABASE TO RESTORE POINT before_upgrade;
flashback başlatılıyor; saat 03/01/2011
ORA_DISK_1 kanalı kullanılıyor
ortam kurtarmayı başlatma
arşiv günlüğü thread’i 1 sıra 91 zaten D:\ARCH\ARCH_1_91_739205892.ARC dosyası o
larak diskte
arşiv günlüğü thread’i 1 sıra 92 zaten D:\ARCH\ARCH_1_92_739205892.ARC dosyası o
larak diskte



arşiv günlüğü thread’i 1 sıra 128 zaten D:\ARCH\ARCH_1_128_739205892.ARC dosyası
olarak diskte
arşiv günlüğü thread’i 1 sıra 129 zaten D:\ARCH\ARCH_1_129_739205892.ARC dosyası
olarak diskte
arşiv günlüğü thread’i 1 sıra 130 zaten D:\ARCH\ARCH_1_130_739205892.ARC dosyası
olarak diskte
ortam kurtarma tamamlandı, geçen süre: 00:04:10
flashback tamamlandı; saat 03/01/2011

İşlem tamamlandı, şimdi resetlog yapmadan alter database open ile açmaya çalışırsak;

RMAN> sql ‘alter database open’;
sql deyimi: alter database open
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============
RMAN-00571: ===========================================================
RMAN-03009: sql komutu, default kanalında 01/03/2011 16:45:02 konumunda başarısız
RMAN-11003: SQL deyiminin çözümlenmesi/çalıştırılması sırasında başarısızlık görülüyor: alter database open
ORA-01589: veritabanı açma için RESETLOGS veya NORESETLOGS seçeneği kullanılmalı

belirttiğimiz hatayı alıyoruz

Yukarıdaki hatayı alırız. Burada database’ I read only açabiliriz. Bu şekilde dönülen anın doğruluğunu test edebiliriz.

RMAN> sql ‘alter database open read only’;
sql deyimi: alter database open read only

Read only olarak açtıkdan sonra, kapatmadan resetlog ile açmayı denersek;

SQL> alter database open resetlogs;
alter database open resetlogs
*
1 satırında HATA:
ORA-01531: bir veritabanı zaten an tarafından açıldı

hatamızı aldık 🙂

Yine hata alırız. Yapılması gereken immediate ile kapatıp, mount ile start edip, sonrasında alter database open resetlogs komutunu göndermek.

SQL> shutdown immediate;
Veritabanı kapatıldı.
Veritabanı kullanıma kapatıldı.
ORACLE anı kapatıldı.
SQL> startup mount
ORACLE anı başlatıldı.
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 79694724 bytes
Database Buffers 524288000 bytes
Redo Buffers 7135232 bytes
Veritabanı kullanıma açıldı.
SQL> alter database open resetlogs;
Veritabanı değiştirildi.

Flashback konusunu (genel hatlarıylada olsa) tüm konularına değinerek bitirmiş olduk. Umarım faydalı olmuştur.

Be Sociable, Share!

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


bir × = 8