Anasayfa > Adım Adım Dökümantasyon, Data Guard, Kurulum, RMAN Backup and Recovery > RMAN ile Aktif Veritabanı Üzerinden Standby Veritabanı Kurulumu

RMAN ile Aktif Veritabanı Üzerinden Standby Veritabanı Kurulumu

Merhaba Arkadaşlar,

Bu makalemde RMAN kullanarak aktif veritabanı üzerinden physical standby veritabanı kurulumu için gerekli işlem adımlarını yazacağım. Physical Standby veritabanı kurulumu için birkaç yöntem mevcuttur. Bunlar; Cold yedek kullanarak (veritabanı kapalı iken veri dosyalarının manuel kopyalanması), RMAN ile primary (ana veritabanımız) veritabanı yedeğini alıp standby (yedek veritabanımız) veritabanına geri dönülmesi yöntemleridir. Aşağıda anlatacağım yöntem ise primary veritabanı aktifken RMAN üzerinden standby veritabanı oluşturulmasıdır.

İsterseniz önce senaryomuzu belirleyelim. Biz bir banka kuruyoruz. Bankamız Türkiye ve Azerbaycan’da faaliyet gösterecek🙂 Bankamızın genel müdürlüğü İstanbul’da olsun. Olağan üstü durum merkezimiz ise Bakü’de olsun. İstanbul’da çalışacak ana veritabanımızın (primary,production) yedeğini olağan üstü durum merkezimiz olan Bakü’de oluşturmamız isteniyor. Bakü’deki yöneticilerimiz tüm raporlamalarını Bakü’de ki standby veritabanımız üzerinden real-time yapıyor olacaklar. Veritabanlarımız 11g R2 ve işletim sistemi olarak Oracle Enterprise Linux 5 üzerinde çalışıyor olacak. Anlaşılması kolay olsun diye sunucu isimlerimi İstanbul (primary) ve Bakü (standby) olarak verdim. Istanbul sunucusunda bulunan veritabanı adımı TALIP olarak set edeceğim. Baküde ki ise TALIPDR olsun.  Aşağıda her işlem adımından önce komutları hangi sunucu üzerinde çalıştıracağımızı [sunucu] ismiyle size hatırlatacağım. Bir hatırlatma daha yapmak istiyorum. Çalıştırdığımız komutlar linux üzerinde ise “$” ile, sqlplus üzerinde ise “SQL>” ile, rman üzerinde ise “RMAN>” olarak başlayacaktır.

Kısaca yapımız;

Sunucu adı IP Veritabanı adı Rolü
Istanbul 192.168.2.101 TALIP Primary
Baku 192.168.2.102 TALIPDR Standby

 1-   Daha önce yazdığım https://taliphakanozturk.wordpress.com/2010/12/12/oracle-enterprise-linux-5-kurulumu/   makaleme göre iki sunucuya Oracle Enterprise Linux kurulumu yapıyorum. Kurulum esnasında sunucu isimlerimi Istanbul ve Baku olarak, iplerimi ise yukarıdaki tabloya göre set ediyorum.

 2-   Yine daha önce yazdığım https://taliphakanozturk.wordpress.com/2010/12/21/oracle-database-11g-r2-kurulumu-icin-enterprise-linux-uzerinde-yapilmasi-gerekenler/ makaleme göre iki sunucu için kernel parametrelerimi set ediyorum.

 3-   https://taliphakanozturk.wordpress.com/2011/01/01/oracle-database-11g-r2-kurulumu/ makaleme göre Istanbul(primary) sunucumda oracle 11g r2 veritabanı kurulumunu yapıyorum. 16. Adımda “Global Database Name” ve “SID” olarak “TALIP” adını veriyorum.

4-   https://taliphakanozturk.wordpress.com/2011/01/01/oracle-database-11g-r2-kurulumu/ Bakü (standby) sunucumda makalemin 5. adımına kadar aynen takip ediyorum. 5. Adımda “Install database software only” seçeneğini seçerek sadece software kurulumunu gerçekleştiriyorum. Veritabanı oluşturmuyorum. RMAN ile sonradan standby veritabanı oluşturacağız.

 5-   Istanbul (primary) veritabanımız arşiv modda olmalıdır. Arşiv modda değilse aşağıdaki gibi arşiv moda geçirmeliyiz.

Önce primary veritabanımızın(Istanbul) arşiv modda olup olmadığını aşağıdaki gibi kontrol edelim;

 select log_mode from v$database;

Eğer değilse (NOARCHIVELOG) ozaman aşağıdaki işlem adımları ile veritabanımızı arşiv moda geçirmemiz gerekiyor. Zaten biz bankayız🙂 7/24 hizmet veriyoruz ve veritabanımız kesin arşiv modda olması gerekir🙂.

SQL>shutdown immediate;

SQL>startup mount;

SQL>alter database archivelog;

SQL>alter database open;

 6-   [Istanbul] primary veritabanımda bulunan oracle password dosyamı karşı sunucuya (Baku) ftp yada scp linux komutlarıyla kopyalıyorum. Baku sunucusunda veritabanına login olurken gerekecektir.

$scp orapwTALIP oracle@192.168.2.102:/oracle/ora11g/dbs/orapwTALIPDR

7-   [Baku] standby veritabanı sucumda adump klasörümü aşağıdaki gibi varsayılan yerinde oluşturuyorum. Çünkü veritabanı açılışta bu klasörü arayacaktır ve bulamazsa hata verir.

$mkdir $ORACLE_BASE/admin/$ORACLE_SID/adump

8-   [Baku] Standby veritabanı parametre dosyamı oluşturuyorum. ($ORACLE_HOME/dbs  altında olacak) ve dosya içine sadece veritabanı adını yazıyorum. Gerisini RMAN zaten oluşturacak J

 $vi $ORACLE_HOME/dbs/initTALIPDR.ora

Vi editör ile dosyamı açıyorum. “a” tuşuna basarak ekleme (insert) moduna geçiriyorum ve aşağıdaki satırı ekleyiyorum. Sonra “Escape” tuşuna basıyorum “wq” yazarak dosyamı kaydediyorum.

db_name='TALIPDR'

9-   [Baku ]Listener dosyamı aşağıdaki gibi açıp set ediyorum.

 $vi $ORACLE_HOME/network/admin/listener.ora

Vi editör ile dosyamı açıyorum. “a” tuşuna basarak ekleme (insert) moduna geçiriyorum ve aşağıdaki satırları ekleyiyorum. Sonra “Escape” tuşuna basıyorum “wq” yazarak dosyamı kaydediyorum. 4. Adımda Baku sunucusu üzerinde oracle software kurulumu yaparken ORACLE_HOME olarak verdiğiniz dizini aynen aşağıdaki ORACLE_HOME yazan yere yazmanız gerekmektedir. Ben “/oracle/ora11g” verdiğim için bu şekilde yazdım.

LISTENER =
   (DESCRIPTION_LIST =
        (DESCRIPTION =
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
        (ADDRESS = (PROTOCOL = TCP)(HOST = baku)(PORT = 1521))
        )  
 )

SID_LIST_LISTENER =
  (SID_LIST =
        (SID_DESC =
        (GLOBAL_DBNAME = TALIPDR)
        (SID_NAME = TALIPDR)
        (ORACLE_HOME = /oracle/ora11g)
        )
   )

 10- [Baku] Listener ımızı aşağıdaki gibi stop start ediyoruz. Böylelikle TALIPDR (henüz oluşturmadık) dinlemesini sağlıyoruz.

$lsnrctl stop
$lsnrctl start

11- [Istanbul ve Baku ikisinde de yapılacak] İki sunucumda da tnsnames.ora dosyamı aşağıdaki gibi set ediyorum.

$ vi $ORACLE_HOME/network/admin/tnsnames.ora

Vi editör ile dosyamı açıyorum. “a” tuşuna basarak ekleme moduna geçiriyorum ve aşağıdaki satırları ekleyiyorum. Sonra “Escape” tuşu “wq” yazarak dosyamı kaydediyorum.

TALIP =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = istanbul)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = TALIP)
    )
  )

TALIPDR =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = baku)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = TALIPDR)
    )
  )

 12-[Istanbul] Primary veritabanımda bulunan redo log dosya sayısı kadar standby log dosyası oluşturmamız gerekiyor. Default olarak 3 redo log dosyamız oluşmuştu. 3 tane standby log dosyası oluşturuyorum. Bu dosyalar RMAN ile standby(Baku) veritabanımıza da taşınacak. Primary de oluşturmamın sebebi ileride switchover ile rol değiştirirsem, yani Istanbul yedek veritabanı sunucusu Baku ise ana veritabanı sunucusu olursa Istanbulda tekrar oluşturma zahmetinde kalmamış oluruz. (Switchover için gerekli işlem adımlarını  bir sonraki makalemde yazacağım)

SQL>alter database add standby logfile '/oracle/ora11g/data_TALIP/srl01.log' size 10M;

SQL>alter database add standby logfile '/oracle/ora11g/data_TALIP/srl02.log' size 10M;

SQL>alter database add standby logfile '/oracle/ora11g/data_TALIP/srl03.log' size 10M;

13-[Baku] Şimdi Baku sunucumuzda bulunacak olan TALIPDR veritabanımızı “nomount” modda açıyoruz.

 SQL> startup nomount;

 14-[Istanbul] Artık yavaş yavaş Standby veritabanımız oluşturmaya başlayabiliriz. Önce RMAN scriptimizi hazırlayalım.

 $vi /oracle/ora11g/dataguard

Vi editör ile dosyamı açıyorum. “a” tuşuna basarak ekleme moduna geçiriyorum ve aşağıdaki satırları ekleyiyorum. Sonra “Escape” tuşu “wq” yazarak dosyamı kaydediyorum.

 run {
         allocate channel prmy1 type disk;
         allocate channel prmy2 type disk;
         allocate channel prmy3 type disk;
         allocate channel prmy4 type disk;
         allocate auxiliary channel stby type disk;
duplicate target database for standby from active database nofilenamecheck
         spfile
             parameter_value_convert 'TALIP','TALIPDR'
                  set db_file_name_convert='/TALIP/','/TALIPDR/'
                   set log_file_name_convert='/TALIP/','/TALIPDR/'
                   set db_unique_name='TALIPDR'
                   set control_files='/oracle/ora11g/data_TALIP/TALIPDR.ctl'
                   set log_archive_max_processes='5'
                   set fal_client='TALIPDR'
                   set fal_server='TALIP'
                   set standby_file_management='AUTO'
                   set log_archive_config='dg_config=(TALIP,TALIPDR)'
                   set log_archive_dest_1='service=TALIP LGWR ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=TALIP' ;
         sql channel prmy1 "alter system set log_archive_config=''dg_config=(TALIP,TALIPDR)''";
         sql channel prmy1 "alter system set log_archive_dest_2=''service=TALIPDR LGWR ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=TALIPDR''";
         sql channel prmy1 "alter system set log_archive_max_processes=5";
         sql channel prmy1 "alter system set fal_client=TALIP";
         sql channel prmy1 "alter system set fal_server=TALIPDR";
         sql channel prmy1 "alter system set standby_file_management=AUTO";
         sql channel prmy1 "alter system set log_archive_dest_state_1=enable";
         sql channel prmy1 "alter system archive log current";
         sql channel stby "alter database recover managed standby database using current logfile disconnect";
}

 15-[Istanbul] Ve geriye scriptimizi çalıştırmak kalıyor.

RMAN target sys/oracle@talip auxiliary sys/oracle@talipdr

RMAN>@dataguard

RMAN gerisini halledecektir:)

16-[Istanbul ve Baku] Son olarak iki sunucumuzun durumunu aşağıdaki sorgular ile öğrenebiliriz.

Instance ların durumunu görmek için;

SQL>select status from v$instance

Switchover durumunu ve veritabanımızın hangi rolde olduğunu görmek için;

SQL>select switchover_status,database_role from v$database;

[Baku] sunucumuzda arşivlerin apply edilip edilmediğini görmek için;

select sequence#, first_time, next_time, applied
from v$archived_log
order by sequence#;

11g ile gelen önemli özelliklerden biride arşiv apply edilirken standby veritabanımızın read-only modda açılabilir olmasıdır. Bunuda aşağıdaki gibi test edebiliriz

1-   [Baku] Recovery işlemi iptal edilir.

SQL>alter database recover managed standby database cancel;

2-   [Baku] veritabanı açılır.

SQL>alter database open read only;

3-   [Baku] Veritabanı modumuzu kontrol edelim.

SQL>select open_mode from v$database;

4-   [Baku] Tekrar apply başlatıyorum

SQL>alter database recover managed standby database using current logfile disconnect;

 5-   [Baku] Tekrar veritabanı modumuzu kontrol edelim.

SQL>select open_mode from v$database;

“READ ONLY WITH APPLY” olarak sonucu görebiliriz.

Artık canlı çalışan bir veritabanımız (Istanbul) ve bunun yedeği (Baku) standby veritabanımız hazırdır. İlerleyen makalelerimde switchover ve failover durumlarında ne yapacağımızı yazacağım.

Talip Hakan Öztürk

  1. 13/07/2011, 9:26 am

    Ellerinize salık

  2. 07/09/2011, 8:55 am

    bu işlemi windows server 2008 R2 de yapmaya çalışıyorum. 10. adıma kadar geldim fakat listener’i açarken aşağıdaki hatası veriyor. windows servislerinde listener servisi yaratılmamış incelediğimde. bu problemi nasıl aşabilirim.
    ——————
    C:\Users\admin>lsnrctl start listener
    LSNRCTL for 64-bit Windows: Version 11.2.0.2.0 – Production on 07-SEP-2011 11:53:43
    Copyright (c) 1991, 2010, Oracle. All rights reserved.
    Starting tnslsnr: please wait…

    TNS-12560: TNS:protocol adapter error
    TNS-00530: Protocol adapter error
    ——————

    • 07/09/2011, 7:04 pm

      NETCA ile listener oluşturabilirsin. (komut satırından netca yazıp [ENTER] a basın )

  3. kenan
    27/07/2012, 9:12 am

    Elinize Saglık Çok yararlı olmuş

  4. Yunus
    24/12/2012, 7:54 pm

    Talip abi yukarıda yapmış olduğunuz işlemlerin aynısını yaptım ancak , end of file diyor ve bekliyor. Bu süreyi beklemem mi gerekiyor yoksa yanlış birşeyler mi yaptım?

    • 31/12/2012, 9:25 pm

      Scriptte bir satır veya harfi hatalı yazmış olabilir misin? Çünkü bu script tamamen test edilip yazıldı.

  5. 04/08/2013, 1:29 pm

    script deki hatali satir: ( end of file ve sonra parse hatası )
    set log_archive_dest_1=’service=TALIP LGWR ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=TALIP ;

    sonunda tek tırmak yok (noktalı virgülden önce )

    set log_archive_dest_1=’service=TALIP LGWR ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=TALIP’ ;

    • 04/09/2013, 12:39 am

      Evet dediğiniz yerde ‘ işareti olmalı. Makalede ilgili yeri güncelledim.

  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: