Pages

20 Ocak 2011 Perşembe

Fiziksel standby sunucuya primary rolünü switch etme

Primary veritabanın rolünü standby sunucuya olağan durumlarda devretme olayına switchover denir. Genellikle primary veritabanında işletim sistemi güncellemesi veya donanım yükseltmesi gibi planlanan kesintiler olacağı zaman meydana gelir. Switchover esnasında herhangi bir veri kaybı yaşanmaz. Switchover sonrasında her veritabanı yeni rolünde görev yapmaya başlar. Standby veritabanına primary rolününe switchover yapma adımları aşağıda yer almaktadır.

1. Öncelikle primary veritabanının standby rolüne switch yapabileceğinden emin olmamız gerekecektir.

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS
------------------------------
TO STANDBY

Primary veritabanında çalıştırılan yukardaki sorgu sonucunda eğer TO STANDBY veya SESSIONS ACTIVE sonucu dönerse primary veritabanı standby rolüne dönüşebilecektir. Aksi durumda redo taşıması yanlış yapılandırılmış veya düzgün şekilde çalışmıyor demektir, bu durumdada switchover mümkün olmayacaktır. Böyle bir durumla karşılaşıldığı zaman her bir redo taşıma hedefine en güncel arşivlenmiş redo log dosyalarını raporlamak için primary veritabanında aşağıdaki sorguyu çalıştırın. En son arşivlenmiş redo log dosyaları aynı numarada olduğu zaman ve statü değeri VALID olduğu durumlarda yapılandırma sorunu bulunmadığı anlaşılır.

SQL> SELECT DESTINATION, STATUS, ARCHIVED_THREAD#, ARCHIVED_SEQ#
      2> FROM V$ARCHIVE_DEST_STATUS
      3> WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';

DESTINATION       STATUS     ARCHIVED_THREAD#    ARCHIVED_SEQ#
---------------------    ----------     -----------------------------     ------------------------
orclprm                    VALID           1                                          947
orclstdby                 VALID           1                                          947

Bunun yanında, primary ve standby arasında redo boşluğu olursa, primary ve standby arasında switchover yapılamaz. Bunu analiz etmek için standby veritabanında aşağıdaki sorgu çalıştırılarak fiziksel standby veritabanında redo boşlukları olup olmadığı anlaşılacaktır.

SQL> SELECT * FROM V$ARCHIVE_GAP;

THREAD#       LOW_SEQUENCE#   HIGH_SEQUENCE#
--------------       -------------------------     -------------------------
1                      875                              877

Yukardaki örnekte görüldüğü üzere standby sunucuda 875, 876 ve 877 nolu redo log dosyaları yer almamaktadır. Bu durumda bu eksik redo log dosyalarının fiziksel isimlerini bulup, bunları manuel olarak standby sunucuya kopyalamamız gerekmektedir.

SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND
     2> DEST_ID=1 AND SEQUENCE# BETWEEN 875 AND 877;

NAME
-------------------------------------------
/u02/orclprm/arch/arcr_1_875.arc
/u02/orclprm/arch/arcr_1_876.arc
/u02/orclprm/arch/arcr_1_877.arc

Ardından yukardaki 3 arşin log dosyası standby sunucuda ilgili lokasyona kopyalanarak alttaki komutlar ile standby veritabanına kayıt edilir.

SQL> ALTER DATABASE REGISTER LOGFILE
'/u02/orclstdby/arch/arcr_1_875.arc';
SQL> ALTER DATABASE REGISTER LOGFILE
'/u02/orclstdby/arch/arcr_1_876.arc';
SQL> ALTER DATABASE REGISTER LOGFILE
'/u02/orclstdby/arch/arcr_1_877.arc';

2. Artık primary veritabanında switchover işlemine geçebiliriz. Aşağıdaki komut çalıştırılarak, primary veritabanı standby rolüne geçiş yapacaktır.

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY  
WITH SESSION SHUTDOWN;

3. Yeni standby rolüne dönüşen eski primary veritabanını kapatıp MOUNT modda yeniden başlatıyoruz.

4.  Eski standby veritabanını primary rolüne dönüştürüp veritabanını açıyoruz.

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

SQL> ALTER DATABASE OPEN;

5.  Yeni fiziksel standby veritabanında redo uygulama hizmetini başlatıyoruz.

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING
CURRENT LOGFILE DISCONNECT FROM SESSION;

0 yorum:

Yorum Gönder