Flashback geniş bir konu. Drop edilen tabloların geri getirilmesinden, RMAN içinde kullanıma
kadar birçok başlık bulunuyor. Konu çok geniş olduğundan bu yazıda sadece Flashback
Database konusuna değineceğim.
Veri kayıplarını telafi etmek için çeşitli recover yöntemleri kullanılabilir. Fakat bu yöntemlerin
en büyük eksikleri, işlem süresinin uzun oluşudur. Data kaybını sıfıra indirseniz bile, bozulan
birkaç tabloyu geri getirmek için harcayacağınız süre, hatrı sayılır zaman alacaktır. Pratik,
hızlı ve güvenli bir yöntem gerekmektedir. Yarım saat geriden gelen bir physical standby
oluşturmak anlık hataların önüne geçmek için kullanılabilecek bir yöntemdir. Fakat yetersiz
kaldığı birçok nokta çıkacaktır. Oracle bu problemlerin önüne geçmek için FLASHBACK
özelliğini sunmuştur.
FLASHBACK özelliği sayesinde, saatler sürecek recover işlemini birkaç dakika içinde
tamamlayıp; veritabanını geçmişteki bir zaman dilimine kolayca geri çekebilirsiniz. Hatta
bununla kalmaz, veri tabanını geçmiş ve gelecek içinde getirip götürebilir ve read only
mode’da sorgular çekebilirsiniz. Fiziksel hatalardan ziyade, özellikle kullanıcı tabanlı hatalar
için bir can simidi olarak düşünebiliriz.
Veritabanını Hazırlamak
Flashback özelliğini kullanmak için üzerinden geçmemiz gereken belli başlı adımlar
bulunuyor. Önce veritabanının flashback mode’da olup-olmadığını kontrol ediyoruz:
SQL> SELECT FLASHBACK_ON FROM V$DATABASE;
FLASHBACK_ON
------------------
NO
Görüldüğü gibi veritabanımızın flashback özelliği açık değil. Bunu değiştirmek amacıyla
veritabanını kapatıp mount mode’da açmamız gerekiyor.
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> SELECT OPEN_MODE FROM V$DATABASE;
OPEN_MODE
----------
MOUNTED
Flashback’i aktif hâle getirmeden önce ikinci bir kontrol yapıyoruz. Flashback özelliği için
veritabanı ARCHIVELOG şeklinde çalışmalıdır. Bunu da kontrol edip, gerekirse
değiştiriyoruz:
SQL> SELECT LOG_MODE FROM V$DATABASE;
LOG_MODE
------------
NOARCHIVELOG
Sorgu sonucuna bakarak veritabanının arşiv modda olmadığını görüyoruz. Gerçek işlemlerin
yürütüldüğü, veri kaybına toleransın gösterilemeyeceği hiçbir ortamda NOARCHIVELOG
şeklinde çalışılmaz. Ancak örnek olarak kullandığım veritabanı, test amaçlı olduğundan
şimdiye kadar ARCHIVELOG’a çekme ihtiyacı duyulmamış. şimdi ise flashback’in
kullanılabilmesi için veritabanının arşiv mode’a geçmesini sağlamamız gerekiyor!
Önce arşiv dosyalarının yazılacağı hedef klasörü “/data2/TESTDB/archive/” şeklinde ayar-
lıyoruz:
SQL> ALTER SYSTEM SET log_archive_dest_1='LOCATION=/data2/TESTDB/archive/';
Kontrol edelim:
SQL> show parameter log_archive_dest_1
log_archive_dest_1 string LOCATION=/data2/TESTDB/archive/
Dosyaların yazılacağı lokasyon bilgisi tutuyorsa; archivelog mode desteğini açalım ve
log_mode bilgisini kontrol edelim:
SQL> ALTER DATABASE ARCHIVELOG;
Database altered.
SQL> SELECT LOG_MODE FROM V$DATABASE;
LOG_MODE
------------
ARCHIVELOG
Her şey tamamsa flashback için parametreleri düzenleyebiliriz.
DB_FLASHBACK_RETENTION_TARGET, DB_RECOVERY_FILE_DEST_SIZE ve
DB_RECOVERY_FILE_DEST olmak üzere bizi ilgilendiren üç temel parametre vardır. Bu
parametreleri kısaca özetlersek:
• •• • DB_FLASHBACK_RETENTION_TARGET : Veritabanını kaç dakika geriye
alabileceğinizi gösterir. Örneğin 600 değerini girerseniz, 10 saatlik zaman diliminde
herhangi bir noktaya gidebilirsiniz.
• •• • DB_RECOVERY_FILE_DEST_SIZE : Yedek işlemleri için ayrılan alanın
boyutunu belirler. 200 GB’lik bir disk alanına sahip olabilirsiniz. Ama 20 GB’tan
fazlasını tahsis etmek size cazip gelmeyebilir. Bu sebeple parametre değerini,
DB_RECOVERY_FILE_DEST_SIZE=20G şeklinde ayarlayıp, n’olursa olsun 20GB’i
geçme diye belirtmeniz mümkündür.
Fakat bu parametre bir üstte gördüğümüz DB_FLASHBACK_RETENTION_TARGET
değeri ile çakışabilir. Örneğin 10080 dakika (yani 7 gün) boyunca herhangi bir
zamana dönebilecek şekilde DB_FLASHBACK_RETENTION_TARGET
parametresini ayarlayabilirsiniz. Yalnız DB_RECOVERY_FILE_DEST_SIZE, 20G
şeklinde ayarlıysa ve siz sadece bir günde 20G’in üstünde flashback verisi
yarattıysanız, girilen 10080 değerinin pek bir anlamı kalmayacaktır.
DB_RECOVERY_FILE_DEST : Flashback bilgisinin nerede tutulacağını
belirtir. Arşiv dosyalarının koyulacağı lokasyonu belirten log_archive_dest_1
parametresine benzetebiliriz.
Bu parametrelere göre ayarlamalarımızı yapalım. Veritabanı için Flashback recovery area’yı
maksimum 20GB olsun. Flash recovery area lokasyonu olarak
/data2/TESTDB/flashback_area/ klasörünü verelim. Geri dönebileceğimiz zaman olaraksa
600 dakikalık (10 saat) bir aralık ayaralayalım.
-- 10 SAAT (600 DAKIKA) FLASHBACK AYARI
SQL> ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=600;
System altered.
-- 20GB UST LIMIT
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=20G;
System altered.
-- LOKASYON BELIRLENIYOR
SQL> ALTER SYSTEM SET
DB_RECOVERY_FILE_DEST='/data2/TESTDB/flashback_area/';
System altered.
Bazı durumlarda aşağıdaki gibi bir hata mesajıyla karşılaşabilirsiniz:
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-16018: cannot use LOG_ARCHIVE_DEST with LOG_ARCHIVE_DEST_n or
DB_RECOVERY_FILE_DEST
Aşağıdaki adımları takip ederek, sorunu çözebilirsiniz:
-- ARSIV LOKASYONUNU SIFIRLAYIN
SQL> ALTER SYSTEM SET log_archive_dest='';
-- FLASHBACK ICIN KULLANILACAK ADRESI TEKRAR GIRIN
SQL> ALTER SYSTEM SET
DB_RECOVERY_FILE_DEST='/data2/TESTDB/flashback_area/';
-- ARSIV LOKASYONUNU TEKRAR GIRIN
SQL> ALTER SYSTEM SET
log_archive_dest_1='LOCATION=/data2/TESTDB/archive/';
Gerekli değişiklikleri yaptıktan sonra, aşağıdaki ifadeyi çalıştırıp, ayarları kontrol edebilirsiniz:
SET FEEDBACK OFF
SET LINES 130
COLUMN NAME FORMAT A30
COLUMN FLASHBACK_ON FORMAT A30
COLUMN LOG_MODE FORMAT A50
SELECT NAME, FLASHBACK_ON,LOG_MODE FROM V$DATABASE;
COLUMN NAME FORMAT A30
COLUMN VALUE FORMAT A80
select name,value from v$parameter
where upper(name) in
('DB_FLASHBACK_RETENTION_TARGET','DB_RECOVERY_FILE_DEST_SIZE',
'DB_RECOVERY_FILE_DEST','LOG_ARCHIVE_DEST_1');
NAME FLASHBACK_ON LOG_MODE
----------------------------- ------------------------------ ------------
YATIRIM NO NOARCHIVELOG
NAME VALUE
------------------------------ -------------------------------------------
log_archive_dest_1 LOCATION=/data2/TESTDB/archive/
db_recovery_file_dest /data2/TESTDB/flashback_area/
db_recovery_file_dest_size 21474836480
db_flashback_retention_target 600
Bu noktaya kadar her şey doğruysa, flashback özelliğini aktif hâle getirip, veritabanını
açabiliriz:
-- FLASHBACK OZELLIGINI AKTIF HALE GETIRELIM
SQL> ALTER DATABASE FLASHBACK ON;
Database altered.
-- VERITABANINI ACALIM
SQL> ALTER DATABASE OPEN;
SQL> SELECT OPEN_MODE FROM V$DATABASE;
OPEN_MODE
----------
READ WRITE
* Çağatay Cebi'nin aynı başlıklı kitabından yararlanılmıştır.
Hiç yorum yok:
Yorum Gönder