SWITCHOVER

Standby teknolojisi kullanıyorsak sistemimizi test etmek adına veya production veritabanında ki planlı kesintilerden dolayı veritabanları arasında rol değişimi yapmamız gereken durumlar oluşabiliyor.Böyle planlı durumlara switchover(rol degişimi) denilir.Yani switchover ile production veritabanımız stand by’a,standby veritabanımız ise production veritabanı olur.Switchover’da 3.parti uygulamalarla(Broker,Cloud,dbvisit) yapılabileceği gibi sql komutlarıyla da yapılabilir.Biz örneğimiz de sql komutları ile yapacağız.

  1. Production  veritabanımızda tüm loglarımızın taşınması için logfile switch yapıyorum.(primary)
ALTER system switch logfile;
  1. Switchover yapmadan önce veritabanımızın switchover durumunu görelim.(primary)
SELECT switchover_status FROM v$database;


NOT : “TO_STANDBY” şeklinde çıktı almamız gerekiyor.

  1. Production veritabanımızı standby olarak değiştirelim.(primary)
ALTER DATABASE COMMIT TO switchover TO physical standby WITH session shutdown;
shutdown immediate;
startup nomount;
ALTER DATABASE mount standby DATABASE;
  1. Standby  veritabanımızın switchover durumunu görelim.(secondary)
SELECT switchover_status FROM v$database;

NOT : “TO_PRIMARY” şeklinde çıktı almamız gerekiyor.

  1. Eski standby şimdi production olacak veritabanımızı switchover yaparız ve bundan sonra kapatır açarız.(secondary)
ALTER DATABASE COMMIT TO switchover TO PRIMARY;
shutdown immediate;
startup;
  1. Son olarak eski production şimdi ki standby makinemiz de apply prosesini başlatırız.(primary)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

FAILOVER

Production veritabanının bozulması durumunda standby veritabanının primary olarak aktif edilmesidir. Geri dönüşü yoktur. Aktif edildiğinde, standby veritabanı yeniden oluşturmalıdır.

  1. Eğer production veritabanına ulaşılabilir durumda ve çalışıyorsa, redo buffer standby veritabanına gönderilmesi sağlanır ve son arşivler oluşturulur.(primary)
ALTER system flush redo TO standby_db_name;
ALTER system archive log CURRENT;

NOT : Hata alınmaz ise 5. Adım ile devam edebilirsiniz. Bu durumda sıfır veri kaybı ile sistem açılabilir. Hata alırsanız, en az veri kaybı ile sistemimizi açabilmek için 2. Adım ile devam ediyoruz.

  1. Standby veritabanımızda aşağıdaki sorguyu çalıştırarak apply edilen son arşiv sıra numarasını redo thread numarasına göre öğrenmemiz gerekiyor.(secondary)
SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG;

NOT : Production veritabanının bulunduğu sunucuda archivelog dosyaların çıkartıldığı yere bakmaktada fayda var.

  1. Eğer arşiv loglara ulaşılabiliyorsa, copyalanmamış logları standby veritabanına kopyala. Kopyalama işleminden sonra arşiv log dosyaları standby veritabanına aşağıdaki gibi register edilmelidir. Bu işlem her thread için uygulanmalıdır.(secondary)
ALTER DATABASE register physical logfile '/u01/app/oracle/fast_recovery_area/ORCLSTBY/archivelog/2014_01_07/o1_mf_1_79_9drr9d8n_.arc';
  1. Standby veritabanında redo gap olup olmadığı kontrol edilmelidir. Varsa ilgili arşiv log dosyaları primary sunucudan standby sunucuya kopyalanıp register edilmelidir.(secondary)
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
ALTER DATABASE register physical logfile '/u01/app/oracle/fast_recovery_area/ORCLSTBY/archivelog/2014_01_07/o1_mf_1_79_9drr9d8n_.arc';

NOT : Yukarıdaki sorgu sonucu sıfır dönene kadar 4. Adımdaki log taşıma ve register etme işlemi yapılmalıdır.(secondary)

  1. Standby veritabanında redo apply işlemi durdurulur.(secondary)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
  1. Production den kopyaladığımız bütün arşivlerin apply edilmesi sona erdirilir.(secondary)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;

NOT : Hata alacak olursanız, apply edilmemiş redolarınız var demektir. 2 ve 4. Adımları tekrar gözden geçirmek gerekecektir. Yinede redo kaybını göze alıp devam etmek isterseniz;

ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;

NOT : Bu durumda veritabanınızı 8. Adımdaki gibi direk açabilirsiniz. Hata almazsanız 7. Adımla devam edebilirsiniz.

  1. Standby veritabanı, primary veritabanı olarak switch edilir.(secondary)
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
  1. Önceki standby şimdiki production veritabanı açılır.(secondary)
ALTER DATABASE OPEN;

NOT : Failover ile Standby veritabanı primary olarak açıldığında mutlaka full yedek alınmalıdır.

Loading