Anasayfa > Adım Adım Dökümantasyon, Data Guard > PHYSICAL STANDBY VERİTABANI SWITCHOVER & FAILOVER İŞLEMLERİ

PHYSICAL STANDBY VERİTABANI SWITCHOVER & FAILOVER İŞLEMLERİ

SWITCHOVER:
 
Daha önce yazmış olduğum makalede RMAN ile aktif veritabanı üzerinden standby veritabanı kurulumunu örnek bir senaryo üzerinde incelemiştik. Bu yazımda, önceki makalemdeki senaryo üzerinden switchover nasıl yapıldığını anlatacağım.
 
Kısaca switchover, planlı rol değişimidir. Yani, canlı (primary) veritabanının standby rolüne, yedek (standby) veritabanının ise canlı (primary) rolüne geçmesidir. Yedek veritabanımızın çalışabilirliğini test etmek, canlı (primary) veritabanımızda bakım işleri yapmak, v.s gibi işler için switchover yapıyor olabiliriz. Switchover işlemi Enterprise manager, Data Guard Broker gibi GUI arayüzüyle yapılabildiği gibi sqlplus üzerinden de manuel yapılabilmektedir. Bu makalemde sqlplus üzerinden manuel switch yöntemini kullanacağım. İlerleyen yazılarımda Data Guard Broker, Enterprise manager üzerinden nasıl yapacağımızı da paylaşacağım. Aşağıda her işlem adımından önce komutları hangi sunucu üzerinde çalıştıracağımızı [sunucu] ismiyle sizlere hatırlatacağım.
 
1.   [istanbul] Canlı (primary) veritabanımızda tüm loglarımızın taşınması için logfile switch yapıyorum.

SQL>alter system switch logfile;

2.   [istanbul] Switchover yapmadan önce veritabanımızın switchover durumunu görelim.

SQL>select switchover_status from v$database;

“TO_STANDBY” şeklinde çıktı almamız gerekiyor.
3.   [istanbul] Şimdi canlı (primary) veritabanımızı standby veritabanı olarak switch edelim.

SQL>alter database commit to switchover to physical standby with session shutdown;

SQL>shutdown immediate;

SQL>startup nomount;

SQL>alter database mount standby database;

4.   [istanbul] Log larımızı apply için veritabanımızı bekletmemiz gerekiyor. Çünkü [baku] standby veritabanımızı henüz primary olarak set etmedik.

SQL>alter system set log_archive_dest_state_2=defer;

5.   [Baku] Standby veritabanımızı primary olarak switch edebiliriz. Switch etmeden önce switchover durumumuzu görelim.

SQL>select switchover_status from v$database;

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

SQL>alter database commit to switchover to primary;

SQL>shutdown immediate;

SQL>startup;

Artık [Istanbul] sunucusu standby veritabanı, [Baku] sunucusu ise primary veritabanlarımızı barındırmaktadır.
6.   [Istanbul] Standby veritabanımızda real-time redo log appy işlemini başlatabiliriz.

SQL>recover managed standby database using current logfile disconnect;

Son olarak veritabanımızı “Read Only with Apply” olarak açalım. Böylelikle rapor kullanıcılarımız redo apply esnasında sorgulama yapabileceklerdir.

SQL>recover managed standby database cancel;

SQL>alter database open;

SQL>recover managed standby database using current logfile disconnect;

FAILOVER:
Kısaca failover, canlı (primary) veritabanının bozulması durumunda yede (standby) veritabanının primary olarak aktif edilmesidir. Geri dönüşü yoktur. Aktif edildiğinde, standby veritabanı yeniden oluşturmalıdır. Failover durumunda yapılması gerekenler:
(Önemli hatırlatma: Istanbul primary sunucu, Baku ise standby sunucudur)
1.   [Istanbul] Eğer primary veritabanına ulaşılabilir durumda ve çalışıyorsa, redo buffer standby veritabanına gönderilmesi sağlanır ve son arşivler oluşturulur.

SQL> alter system flush redo to standby_db_name;

SQL>alter system archive log current;

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.
2.   [Baku] Standby veritabanımızda aşağıdaki sorguyu çalıştırarak apply edilen son arşiv sıra numarasını redo thread numarsına göre öğrenmemiz gerekiyor.

SQL> SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG;

3.   [Istanbul’dan Baku’ye] 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.

SQL> alter database register physical logfile '/oracle/ora11g/dbs/arch/ TALIP_991834413_1_102.arc ';

4.   [Baku] Standby veritabanında redo gap olup olmadığı kontrol edilmelidir. Varsa ilgili arşiv log dosyaları primary sunucudan standby sunucuya kopyalanıp register edilmelidir.

SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;

SQL> alter database register physical logfile '/oracle/ora11g/dbs/arch/ TALIP_991834413_1_101.arc ';

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.
5.   [Baku] Standby veritabanında redo apply işlemi durdurulur.

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

6.   [Baku] Primary den kopyaladığımız bütün arşivlerin apply edilmesi sona erdirilir.

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;

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;

SQL> ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;

Bu durumda veritabanınızı 8. Adımdaki gibi direk açabilirsiniz. Hata almazsanız 7. Adımla devam edebilirsiniz.
7.   [Baku] Standby veritabanı, primary veritabanı olarak switch edilir.

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;

8.   [Baku] Veritabanı açılır.

SQL> ALTER DATABASE OPEN;

Failover ile Standby veritabanı primary olarak açıldığında mutlaka full yedek alınmalıdır. Ve en kısa sürede yeni bir sunucuyu standby veritabanı olarak konfigüre etmeniz gerekir. Unutmayın verilerimiz bizim için çok kıymetlidir🙂

Talip Hakan Öztürk

  1. 02/08/2011, 4:27 am

    Selam Talip,

    Onemli konu incelemishsiniz, not-larda guzel, ama burda bence duzelish etmeniz lazim.

    FAILOVER:
    Kısaca failover, canlı (primary) veritabanının bozulması durumunda yede (standby) veritabanının primary olarak aktif edilmesidir. Geri dönüşü yoktur. Aktif edildiğinde, standby veritabanı yeniden oluşturmalıdır.

    Bu hec de her zaman boyle degil, bazan A (primary) DB-ni B(Standby) switch edib,gorevlerini yani A (Standby), B (primary) etdikden sonra, yeniden bir daha back yani A (primary) DB-ni B(Standby) switch etmek mumkun, bu OCM sorularindan biridir zaten, dogru configurasyon yapilirsa, duzgun switch etmek mumkun, yani sizin notunuzda “Geri dönüşü yoktur. Aktif edildiğinde, standby veritabanı yeniden oluşturmalıdır.” hec de her zaman degil, yani demin yazdigim kimi bir daha geri ala bilmek oluyor.

    • 08/08/2011, 6:32 pm

      Salam Ulfet. senin bahsettiğin mövzu switchover mövzusu. Switchover role değişimidir. Yeniden oluşturmaya gerek yok. İstediğin vakit geri alabilersen. Ama failover tamam başka mövzu. Failover demek primary db nin itmesi demek. Onda standby ı primary olarak açırsan. Uje teze standby yaratmalısan. Failover ve switchover ı birbirine karıştırdın sanırım. Oracle dökümantasyonlarını okuyabilirsin.

  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: