top of page
Yazarın fotoğrafıAlperen ÜLKÜ

Dataguard ile Flashback Database Operasyonu


Bu yazıda Oracle Flashback teknolojileri hakkında konuşacağız. Flashback teknolojilerinin kullanım alanı ve amaçlarından bahsederek Dataguard üzerinde bir Flashback Database uygulaması yapacağız.


Flashback Nedir?


Flashback, adından da anlaşılacağı gibi geçmişe dönüş anlamına gelir. Veritabanında kullanıcı hatasından kaynaklanan problemlere karşı alınabilecek bir güvenlik önlemi olarak değerlendirebiliriz. Veritabanı Archivelog modda ise her işlemin Roll Forward (ileri sarma) için Redo kayıtları arşivlenir, Flashback modu aktif ise aynı şekilde her işlemin Roll Back (geri sarma) kayıtları flashback log olarak üretilir.


Günlük hayatta flashback teknolojileri hatalı tablo silme, hatalı kayıt silme gibi kullanıcı hatalarının telafisi için veya tablonun herhangi bir andaki halini görmek için kullanılır. Bu yazıda kabaca flashback'ten bahsettikten sonra günlük hayat uygulaması yapacağız. Önce Dataguard üzerinde flashback özelliğini aktif edeceğiz. Daha sonra kritik bir tabloda istenilen ana dönüp o andaki veriye erişeceğiz.



Neden Flashback'i Dataguard Üzerinde Uyguluyoruz?


Öncelikle çalışan bir veritabanını zaman sarmalında geriye döndürmenin çok istisnai durumlar dışında production ortamında uygulanması pek muhtemel değildir. Genelde bu uygulama belirli bir tablonun veya üzerindeki verinin kurtartılması için kullanıldığından production'da bütün veritabanını geri sarmanın hem kesintiye yol açması hem de riskli olabilmesinden dolayı uygulanması istenmez. Flashback logların üretilmesinin veritabanına her transaction'da ek bir yük getirdiğini de bilmek gerekir. Hem production'da kesintiye yol açmamak hem de gereksiz yük bindirmemek için flashback'i Dataguard üzerinde aktif ederiz.


NOT: Production (birincil) veritabanı üzerinde Flashback kullanılırken NOLOGGING bir işlemin yapıldığı ana dönmeye çalışılırsa, veritabanı objelerinin ve datafile'ların block corruption'a uğraması muhtemeldir. Örneğin saat 9:00 ve 9:15 arasında NOLOGGING modda direct-path INSERT yapan bir transaction çalışıyor ve saat 9:07'ye flashback ile dönüldü ise bu durumda veritabanında block corruption'lar görülebilir. Dataguard olmadan birincil veritabanında Flashback kullanılacaksa bu duruma dikkat edilmelidir! Dataguard'ı olan bir sistemde zaten FORCE LOGGING çalışılacağından bu risk olmayacaktır.


Kullanıcı Hatasına Bağlı Veri Kaybında İzlenilmesi Gereken Adımlar


  1. Eğer bir tabloda hatalı DML işlemi yapılmış (truncate bir DML değildir) ve üzerinden çok fazla zaman geçmemiş ise production veritabanında UNDO_RETENTION süresi boyunca Flashback Query kullanılarak geriye dönük veriye ulaşabiliriz. UNDO_RETENTION parametresini saniye bazında istediğimiz değere set ederken dikkat edilmesi gereken UNDO Tablespace'inin büyüklüğü ve gelen transaction'ların yoğunluğu olmalıdır. Eğer çok fazla retention süresi belirlersek bu sırada gelen yoğun transaction'lar Undo hatası alarak Rollback olacaktır. Flashback Query örneklerini bu yazıda inceleyeceğiz.

  2. Eğer Dataguard kullanma amacımız veri güvenliği ve yedeklilik ise Dataguard'ı belirlediğimiz DELAY parametresi ile geriden getirmek güzel bir uygulama olacaktır. Örneğin 12 saat geriden getirdiğimiz bir Dataguard'ımız var ve bu 12 saat içerisinde bir kullanıcı hatalı silme gerçekleşti ise derhal Read Only açık olan Dataguard üzerinden veriyi görebilir ve DB Link ile production'a transfer edebiliriz.

  3. Eğer Dataguard'da belirlediğimiz geriden gelme (delay) süresini geçtikten sonra hatayı farkettiysek veya Real Time Apply ediyorsak bu yazının ana konusu olan Flashback Database ile veritabanı geri sarılır. Bunun için önce MRP durdurulur, veritabanı Mount moda alınır ve flashback komutu ile istenilen zamana gidilir. Veritabanı Read Only olarak açılır, veri kurtarıldıktan sonra tekrar MRP başlatılır.

Dataguard ile Flashback Database Operasyonu


"Read Only With Apply" konumunda olan Dataguard'da MRP durdurulur ve veritabanı Mount moda getirilir.

$ sqlplus / as sysdba
SQL> select open_mode from v$database;
SQL> recover managed standby database cancel;
SQL> shutdown immediate
SQL> startup mount


Flashback ön koşullarının sağlandığından emin olunur.

  • Versiyon minimum 10g veya üzeri olmalıdır.

  • Veritabanı Mount modda olmalıdır.

  • Archivelog modunda olmalıdır. (Flashback gerekirse Archivelog'ları da kullanabilir.)

  • Fast Recovery Area tanımlanmış olmalıdır. (db_recovery_file_dest)

Dataguard kurulumunu "Oracle Dataguard Kurulumu (19c)" yazımızdaki gibi yaptıysak ön koşulları karşılıyor olacağız. Eğer sağlanmamış bir şart varsa bunu sağlayarak devam etmeliyiz.

SQL> archive log list
SQL> sho parameter db_reco
SQL> sho parameter db_flashback
SQL> sho parameter undo_ret

SQL> alter database flashback on;
SQL> alter database open read only;

db_recovery_file_dest => Archivelog, flashbacklog gibi FRA dosyalarının bulunduğu dizin.

db_recovery_file_dest_size => Recovery dizininin boyutu.

db_flashback_retention_target => Flashback logların saklanacağı süre (saniye).

undo_retention => Undo'nun saklanacağı süre (saniye).


Flashback'i aktif ettikten sonra veritabanını Read Only modda açıyoruz.

v$recovery_area_usage view'ine sorgu atarak Flashback logların üretildiğini görebiliriz.

SQL> select * from v$recovery_area_usage;


Birincil (production) veritabanında bir tablo oluşturulup içerisine kayıt eklenir.

$ sqlplus / as sysdba
SQL> create table hr.onemli_tablo (id number, bilgi (varchar2(200));
SQL> insert into hr.onemli_tablo values (1, 'bu satiri silme!');
SQL> commit;


Dataguard tarafında MRP başlatılır ve ilgili tabloya sorgu atılarak bu tarafa geldiği görülür.

SQL> recover managed standby database using current logfile disconnect from session;
SQL> select * from hr.onemli_tablo;


Bu noktada Flashback Query örneği yapabiliriz. Tabloyu az önce oluşturduk ve bu tablonun 1 saat önceki haline "as of timestamp" kalıbı ile sorgu atmayı deneyelim.

SQL> select * from hr.onemli_tablo;
SQL> select * from hr.onemli_tablo as of timestamp sysdate - 1/24;


1 saat önce bu tablo olmadığı için sonuç gelmedi. Bu sorgu kalıbı ile Undo'da tablonun eski versiyonu olduğu sürece sorgulama yapılabilir. Aşağıda Flashback Query ile sorgulama yapabileceğiniz birkaç örnek görebilirsiniz.

SQL> select * from hr.onemli_tablo as of timestamp {my_date};
SQL> select * from hr.onemli_tablo as of scn {my_scn};

Birincil veritabanında tabloya kayıt eklenmeden önce sistemin SCN'i alınır. Daha sonra bir kayıt eklenerek commit edilir.

SQL> select * from hr.onemli_tablo;
SQL> select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER from dual;
SQL> insert into hr.onemli_tablo values (2, 'yeni satir.');
SQL> commit;
SQL> select * from hr.onemli_tablo;


Dataguard tarafında yeni eklenen kaydın geldiği görülür. Flashback uygulayabilmek için MRP durdurulur, veritabanı Mount moda getirilir.

SQL> select * from hr.onemli_tablo;
SQL> recover managed standby database cancel;
SQL> shutdown immediate;
SQL> startup mount


Flashback database komutu ile veritabanı ikinci kaydın henüz eklenmediği SCN'e kadar geri sarılır. Bu komutu SCN ile kullanabildiğimiz gibi timestamp ile de kullanabiliriz. Veritabanı Read Only olarak açılır, tablonun o andaki hali sorgulanır. Beklenildiği gibi ikinci kayıt görünmedi. Daha sonra MRP tekrar başlatılıp Real Time Apply edildiğinde tablonun güncel halini görüyor olacağız.

SQL> flashback database to scn 2421245;
SQL> alter database open read only;
SQL> select * from hr.onemli_tablo;
SQL> recover managed standby database using current logfile disconnect from session;
SQL> select * from hr.onemli_tablo;


Aşağıda örnek olarak kullanabileceğiniz bazı flashback database komutlarını görebilirsiniz.

SQL> flashback database to timestamp {my_date};
SQL> flashback database to before timestamp {my_date};
SQL> flashback database to scn {my_scn};
SQL> flashback database to before scn {my_scn};

Böylece uygulamamızın sonuna geldik. Bu uygulamada Flashback Database ile bir kayıt eklemeden önce SCN numarasını aldık ve kayıt eklenip Dataguard'a uygulandıktan sonra flashback ile bu SCN numarasına geri dönerek tablonun kayıt eklenmediği anına dönmüş olduk. Aynı uygulama bir tablodan kayıt veya kayıtlar silinmeden veya güncellenmeden önceki anına dönüş için kullanılabilir. Yine bir veya birkaç tablonun drop edilmeden önceki anına dönüş için kullanılabilir. Kısacası Flashback teknolojisi ile veritabanında istenilen ana dönüp bu andaki verilerin nasıl sorgulanabileceğini ve kurtarılabileceğini göstermiş olduk.

 

Gelecek yazılarımızda görüşmek üzere, sağlıcakla kalın...

223 görüntüleme0 yorum

Son Yazılar

Hepsini Gör

Comments

Rated 0 out of 5 stars.
No ratings yet

Add a rating
bottom of page