Pages

5 Şubat 2011 Cumartesi

Oracle 11g R2 RAC veritabanının başka bir sunucuya single instance veritabanı olarak kopyalanması

Oracle 11g sürümü herhangi bir yedek kullanmadan Oracle Net yoluyla veritabanın kopyalanmasına imkan vermektedir. Bunun için kaynak veritabanının açık ve arşiv log özelliği etkin olmalıdır veya temiz bir kapatma sonrasında MOUNT modda açık tutulmalıdır.

Bu yazıda çift düğümlü Oracle 11.2 RAC veritabanının, başka bir sunucuda tekil instance olarak çalışmak üzere kopyalanması işlemini adım adım yapılandıracağız.

$ olsnodes -n
rac1    1
rac2    2

RAC veritabanında iki tane ASM disk grubu vardır;
Verilerin tutulduğu diskgrubu:+DATA
flash recovery alanı: +FLASH

1. Kopyalanacak veritabanın bulunacağı sunucu üzerinde Oracle yazılımı (Enterprise veya Standard, kaynak ile aynı olmalı) yüklenmelidir. Yükleme için blogta yazılarım mevcuttur. Aynı zamanda audit trail (adump dizini) ve kontrol dosyalarının tutulacağı fiziksel dizinin oluşturulması gerekmektedir.

2. Hedef sunucuda listener.ora dosyasında statik listener girişi ekleyin.

  (SID_LIST =
        (SID_DESC =
              (GLOBAL_NAME = nunhem)
              (SID_NAME = nunhem)
                (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
    )
  )

“nunhem” tekil instance adı olmaktadır.

3. $ORACLE_HOME/dbs içinde initnunhem.ora adı altında pfile dosyası oluşturup db_name parametresini aşağıdaki gibi tekil instance işaret edecek şekilde ekliyoruz.

db_name=’nunhem’

4. Hedef sunucuda kaynak veritabanındaki sys kullanıcısının şifresi ile aynı olacak şekilde aşağıdaki gibi bir password dosyası oluşturuyoruz.

orapwd file=orapwnunhem password=password ignorecase=y

5. Kopyalanacak instance NOMOUNT modda başlatılır.

 SQL> startup nomount;

6. Kaynak sunucuda TNS girişinde aşağıdaki gibi ekleme yapılacaktır. RAC düğümlerinden hangisinde kopyalama işlemi yapılacaksa o düğüm üzerinde tnsnames.ora dosyasında bu ekleme yapılabilir. Aynı girişi hedef sunucuda da yapılandırın.

NUNHEM =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = hedef_sunucu_ip_adresi)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = nunhem)
    )
  )

7. RMAN uygulaması üzerinden auxiliary hedef veritabanı olacak şekilde oturum açıyoruz.

$ rman target / auxiliary sys/password@nunhems

8. Komut, çeşitli takılarla ayarlanmış parametreleri(set ve parameter_value_convert) mevcut parametrelerin üzerine yazarak spfile dosyasını kaynaktan klonlamanın olacağı hedef sunucuya kopyalayacaktır. 11gR2 üzerinde uzak listener listener scan(listener tarama) için ayarlıyken, lokal listener ise VIP TNS girişine ayarlanmıştır. Hedefte, tekil instance çalışacağından remote ve lokal listener değerleri resetlenmelidir.  db_create_file_dest and db_recovery_file_dest kullanılacağından dolayı veri dosyaları OMF formatında otomatik olarak hedef veritabanında oluşturulacak, ancak kontrol dosyası lokasyonu otomatik olarak oluşturulmadığından ilk adımdada belirtildiği gibi hedefte manuel olarak oluşturulmalıdır.

Bu aşamada eğer işlem hata mesajı ile karşılaşır ve başarız olarak sonlanırsa, yeniden işleme başlamadan önce mutlaka hedef $ORACLE_HOME/dbs dizini altındaki spfile dosyası silinmelidir.
RMAN> DUPLICATE TARGET DATABASE
         2> TO nunhem
         3> FROM ACTIVE DATABASE
         4> SPFILE PARAMETER_VALUE_CONVERT 'racdb', 'nunhem', '+DATA',   
              '/data/oradata', '+FLASH','/data/flash_recovery'
         5> SET cluster_database='false'
         6> RESET REMOTE_LISTENER
         7> RESET local_listener
         8> SET db_create_file_dest = '/data/oradata'
         9> SET db_recovery_file_dest = '/data/flash_recovery';

Starting Duplicate Db at 31-JAN-11
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=10 device type=DISK

contents of Memory Script:
{
   backup as copy reuse
   targetfile  '+DATA/rac11g2/spfilerac11g2.ora' auxiliary format
 '/u01/app/oracle/product/11.2.0/db_1/dbs/spfilenunhem.ora'   ;
   sql clone "alter system set spfile= ''/u01/app/oracle/product/11.2.0/db_1/dbs/spfilenunhem.ora''";
}
executing Memory Script
..
..
..
datafile 2 switched to datafile copy
input datafile copy RECID=1 STAMP=732970731 file name=/data/oradata/NUNHEM/datafile/o1_mf_sysaux_12lr0eq9_.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=2 STAMP=732970731 file name=/data/oradata/NUNHEM/datafile/o1_mf_undotbs1_13lr0es0_.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=3 STAMP=732970731 file name=/data/oradata/NUNHEM/datafile/o1_mf_users_15lr0esj_.dbf
datafile 5 switched to datafile copy
input datafile copy RECID=4 STAMP=732970731 file name=/data/oradata/NUNHEM/datafile/o1_mf_undotbs2_14lr0esf_.dbf

contents of Memory Script:
{
   Alter clone database open resetlogs;
}
executing Memory Script

database opened
Finished Duplicate Db at 31-JAN-11

"rac11g2"  adlı RAC veritabanı ismi, klonlanacak hedef sunucuda "nunhem" olarak değişecektir. ASM diskgrubuna referans olan tüm dizinlerde hedefte ilgili dizinler şeklinde değişecektir.

9. Yukardaki DUPLICATE komutu başarılı olarak çalıştıktan sonra işlem bitecektir. UNDOTBS1 adlı undo tablespace hedeftede aynı şekilde undo tablespace işlevine devam ederken ikinci UNDOTBS2 hedefte normal bir tablespace olarak bulunacaktır. Klonlama esnasında diğer tablespacelerden bazıları es geçilse dahi undo tablespaceler kesinlikle es geçilmemelidir, aksi durumda aşağıdaki hata mesajı alınır.

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 10/21/2010 16:46:01
RMAN-05514: Tablespace UNDOTBS2 has undo information, cannot skip

10. Klonlanmış hedef veritabanı instance(nunhems) içinde hala bazı parametreler RAC veritabanını işaret etmektedir.

rac11g21.__db_cache_size=369098752
rac11g22.__db_cache_size=339738624

nunhem.__db_cache_size=436207616
rac11g21.__java_pool_size=4194304
rac11g22.__java_pool_size=25165824

nunhem.__java_pool_size=4194304
rac11g21.__large_pool_size=8388608
rac11g22.__large_pool_size=8388608

nunhem.__large_pool_size=4194304
rac11g21.__oracle_base='/opt/app/oracle'#ORACLE_BASE set from environment
rac11g22.__oracle_base='/opt/app/orac

..
..
rac11g22.instance_number=2
rac11g21.instance_number=1

*.log_archive_format='%t_%s_%r.dbf'
*.open_cursors=300
*.pga_aggregate_target=209715200
*.processes=150
*.remote_login_passwordfile='exclusive'
*.sga_target=631242752
rac11g22.thread=2
rac11g21.thread=1
rac11g22.undo_tablespace='UNDOTBS2'
rac11g21.undo_tablespace='UNDOTBS1'

Bu RAC instance'ını işaret eden değerler klon instance üzerinde resetlenmeli veya mevcut spfile dosyasından bir pfile oluşturup, ardından bu eskimiş değerler pfile üzerinden silindikten sonra tekrardan bu pfile dosyasından yeni bir spfile oluşturulmalıdır.

Ancak benim tavsiyem; aşağıdaki gerekli parameterleri kullanarak $ORACLE_HOME/dbs içerisindeki initNUNHEM.ora pfile dosyasını değiştirmeniz ve ardındada DUPLICATE DATABASE komutu ile RAC instance’a ait tüm girişlerin ve parametrelerin tamamen hedef sistemden kaldırılması şeklinde olacaktır. Bunun sebebi, RAC instance içinde bazı hidden(gizli) parametreler “create spfile from pfile” yapsanız dahi değerlerini muhafaza etmekte ve bu da ilerde size sıkıntı çıkarabilecektir.

Aşağıdaki pfile parametreleri klonlanmış tekil instance (nunhem) için yeterli olacak parametrelerdir. SGA ve pga_aggregate_target değerlerini kendi sistem yapınıza uygun değiştiriniz.

*.audit_file_dest='/u01/app/oracle/admin/nunhem/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/data/oradata/nunhem/controlfile/o1_mf_62n35l5c_.ctl','/data/flash_recovery/nunhem/controlfile/o1_mf_62n35lcp_.ctl'
*.db_block_size=8192
*.db_create_file_dest='/data/oradata'
*.db_domain='domain.net'
*.db_name='nunhem'
*.db_recovery_file_dest='/data/flash_recovery'
*.db_recovery_file_dest_size=40705720320
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=nunhemXDB)'
*.log_archive_format='%t_%s_%r.dbf'
*.open_cursors=300
*.pga_aggregate_target=1326448640
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=3707764736
*.undo_tablespace='UNDOTBS1'

Yukardaki değişiklikler pfile dosyasına eklendikten sonra klonlanmış instance STARTUP NOMOUNT PFILE=’$ORACLE_HOME/dbs/initNUNHEM.ora’ komutuyla açılır ve başka bir terminalden RMAN uygulaması başlatılıp, alttaki RMAN komutu çalıştırılır.

RMAN> DUPLICATE TARGET DATABASE
          2> TO nunhem
          3> FROM ACTIVE DATABASE;

Starting Duplicate Db at 31-JAN-11
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=10 device type=DISK

contents of Memory Script:
{
   sql clone "create spfile from memory";
}
executing Memory Script

sql statement: create spfile from memory

contents of Memory Script:
{
   shutdown clone immediate;
   startup clone nomount;
}
executing Memory Script
..
..
contents of Memory Script:
{
   Alter clone database open resetlogs;
}
executing Memory Script

database opened
Finished Duplicate Db at 31-JAN-11

Bu işlem sonunda klonlanmış instance’ın spfile dosyası artık RAC instance’a ait hiçbir girişi içermeyecektir.

0 yorum:

Yorum Gönder