Tuesday, September 1, 2009

DATABASE FLASHBACK AYARLARI

Veritabanımızın flashback özelliğini açmak için aşağıdaki adımları izlemiz yeterli olacaktır.
Bu işlemleri yapmaya başlamadan önce bazı FLASHBACK parametrelerini ayarlamamız gerekecektir.

* DB_RECOVERY_FILE_DEST
* DB_RECOVERY_FILE_DEST_SIZE
* DB_FLASHBACK_RETENTION_TARGET

Bu parametreleri kısaca açıklamak gerekir ise

DB_RECOVERY_FILE_DEST FLASHBACK için kullanılacak olan dosyaların yerini belirtiyoruz.

DB_RECOVERY_FILE_DEST_SIZE ne kadarlık bir alanı bu iş için ayrıcağımızı belirtiyoruz. Bu parametreyi belirlerken FLASHBACK özelliğini kaç gün (ne kadarlık bir zaman dilimi ) için kullanacağız, Bu zaman diliminde üretilmesini tahmin ettiğimiz veri miktarı ne olacak, son olarak disk kapasitemiz ne kadar. Bu iş için ayırdığımız 500GB lik bir diskimiz var ise bunun tamamını buraya tahsis etmeyelim 450 GB sini verelim olurda disk dolar ve database'de işlemler devam ederken DB_RECOVERY_FILE_DEST_SIZE alanı doldu doluyor uyarısı alırsak tam dolmadan önlem alabiliriz.

DB_FLASHBACK_RETENTION_TARGET parametresi verileminiz ne kadarlık bir zaman dilimi için saklayacağimi belirtiyor. Burada 24 saat (1 günlük) olsun derseniz 24*60=1440 değerini belirlememiz gerekir. Anlaşılacağı gibi dakika olarak belirliyoruz.

DB_FLASHBACK_RETENTION_TARGET ve DB_RECOVERY_FILE_DEST_SIZE parametreleri sizin de farkedebileceğiniz gibi birbirleri ile ilişki içerisindeler.
senaryomuzun şu şekilde olduğunu varsayarsak benim günlük olarak 100 gb flashback datam oluşuyor, flashback dönme süremi 7 gün olarak belirliyorum.
bu durumda en az 700 GB lik bir DB_RECOVERY_FILE_DEST_SIZE alanına ihtiyacım olacak.

ORA-38700: Limit of %s flashback database logs has been exceed

Bu hata ile karşılaşmanız kaçınılmaz olacaktır.

Kurulum ile beraber varsayılan olarak gelen parametreler aşağıdaki sorgu ile görülebilir.

select * from v$parameter where name like '%db_recovery%' or name like '%db_flashback%'

Şimdi parametreleri ayarlamaya geldi sıra. Dosyalarımızı nerede saklayacağımızı belirliyoruz.

ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='C:\flashback_alani\';

Ne kadarlık bir süre için saklayacağımızı belirliyoruz.

ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=10080; -- 1 hafta haftalık full backup aldığımı varsayıyorum. Yeterli alanımda var :))

FLASHBACK için ayırdığım disk alanını belirliyorum.

ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=30G; -- 30 Gb olarak belirledim.

Evet flashback parametrelerini belirdik. Şimdi veritabanımızı flashback moda geçirelim. Ben makinamda yaptığım adımları aşağıda belirtiyorum.

Veritabanını açıyoruz.

SQL> startup;
ORACLE anı başlatıldı.

Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 201329540 bytes
Database Buffers 402653184 bytes
Redo Buffers 7135232 bytes
Veritabanı kullanıma açıldı.
Veritabanı açıldı.
SQL>

Hangi modda olduğunu görelim. Ben daha önce ARCHIVELOG moda almıştım (RMAN için). Flashback özelliğinin ARCHIVELOG mod istediğini belirtmek için
gecici olarak NOARCHIVELOG moda gececeğim.

SQL> select name,log_mode from v$database;

NAME LOG_MODE
--------- ------------
ORCL ARCHIVELOG

FLASHBACK özelliğini kontrol ediyoruz.

SQL> select flashback_on from v$database;

FLASHBACK_ON
------------------
NO

SQL> shutdown immediate;
Veritabanı kapatıldı.
Veritabanı kullanıma kapatıldı.
ORACLE anı kapatıldı.
SQL> alter database noarchivelog;
alter database noarchivelog
*
1 satırında HATA:
ORA-01034: ORACLE not available


SQL> startup mount

ORACLE anı başlatıldı.


Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 205523844 bytes
Database Buffers 398458880 bytes
Redo Buffers 7135232 bytes
Veritabanı kullanıma açıldı.

SQL> alter database noarchivelog;

Veritabanı değiştirildi

SQL> select log_mode from v$database;

LOG_MODE
------------
NOARCHIVELOG

NOARCHIVELOG modda olmadığını görüyoruz.

SQL> alter database flashback on;
alter database flashback on
*
1 satırında HATA:
ORA-38706: FLASHBACK VERITABANI günlüge kaydetme açilamiyor.
ORA-38707: Ortam kurtarma etkin degil.


SQL> ALTER DATABASE FLASHBACK ON;
ALTER DATABASE FLASHBACK ON
*
1 satırında HATA:
ORA-38706: FLASHBACK VERITABANI günlüge kaydetme açilamiyor.
ORA-38707: Ortam kurtarma etkin degil.


SQL> alter database archivelog;

Veritabanı değiştirildi

ve işlem tamam.

SQL> ALTER DATABASE FLASHBACK ON;

Veritabanı değiştirildi
SQL> alter database open;

ve işlem tamam. Artık anlık olarak yedekten dönebileceğiz. Kullanıcıların yanlışlık ile sildiği tablolar geri gelebicek.
Veritabanı değiştirildi
SQL>

FLASHBACK alanının son durumunu görmek için

SELECT NAME, TO_CHAR (space_limit, '999,999,999,999') AS flashback_max_size,
TO_CHAR (space_limit - space_used + space_reclaimable,
'999,999,999,999'
) AS flashback_kalan_alan,
ROUND ((space_used - space_reclaimable) / space_limit * 100,
1
) AS pct_full
FROM v$recovery_file_dest;

ayrıntılı bilgili buradan alabilirsiniz.
http://www.oracle.com/technology/deploy/availability/htdocs/Flashback_Overview.htm
http://www.cagataycebi.com/oracle/oracle_flashback_db.pdf

No comments: