Active DataGuard ve Golden Gate ile Yüksek Kullanılabilirlik Çözümleri Emrah Uysal Veritabanı Danışmanı
Yüksek Kullanılabilirlik Neden Önemli ? İşletmeniz 7 x 24 x 365 online olmalı. Kritik uygulamalarınız, sunucularınız ve verileriniz kullanılamaz hale geldiğinde, bütün işiniz tehlikeye girebilir. Milyonlarca liralık zararlar ve gelir kayıpları.
Sistemleriniz Neden Kesintiye Uğruyor ? İşletim sisteminin çökmesi Sistem üzerinde çalışan yazılımın çökmesi Depolama alanının bozulması Sunucudaki Fiziksel Problemler Elektrik Kesintileri Planlı çalışmalar nedeniyle servis kesintileri (Patch, Upgrade) Veritabanı performans sorunları Ve onlarca neden ...
Oracle Yüksek Kullanılabilirlik Teknolojileri Real Application Clusters (RAC) Veritabanını birden çok sunucuda ölçeklendirerek sürekli ve kesintisiz çalışma imkanı sunar. Active Data Guard İkincil Veritabanıyla kaynak kullanımı optimizasyonu sağlar ve felaket yönetimi sunar. Golden Gate Gerçek zamanlı veri replikasyonu ile iş yükünüzü dağıtmanıza imkan tanır.
Oracle Active Data Guard
Active Data Guard Nedir ? Felaket yönetimi için en hızlı ve güvenli çözüm. Sıfır zaman kayıp ile gerçek zamanlı veri replikasyonu. Standby Veritabanına hızlı switch opsiyonu. Bozulan veri bloklarına bütünleşik veri koruma mekanizması. Standby veritabanına “read-only” erişim imkanı.
Physical Standby Database Geleneksel Yöntemler Idle Failover Server Production Database Physical Standby Database Log Shipping Fiziksel standby veritabanınız sorgulara açık olamaz. Sadece yedekte bekletebilir ve bir problem olduğunda devreye alabilirsiniz. Boş bekleyen bir veritabanı için maliyetli bir çözümdür.
Active Dataguard ile Yeni Yaklaşım Standby veritabanınızı “read-only” açarak, raporlama veritabanı olarak kullanabilirsiniz. Amacınıza göre kopyalama yöntemleri belirleyebilirsiniz: Fiziksel Standby Veritabanı : Arşiv geridönüş loglarının işlenmesi. Veri ve zaman kaybı olmadan felaket durumlarında kurtarma imkanı sunar. Mantıksal Standby Veritabanı: Logların Sql cümleciklerine dönüştürülerek işlenmesi. Yedekleme işlerini ve raporlama işlerini üstlendikleri için performans artışı sağlar.
Çalışma Prensibi Eş zamanlı yada gecikmeli replikasyon seçenekleri sunar. Sunucular aynı İşletim Sistemi platformuna ve aynı Veritabanı versiyonu’na sahip olmalıdır. Veritabanları kesinlikle enterprise edition olmalıdır. Active DataGuard, Enterprise edition lisansına ek olarak ayrı lisanslanmaktadır.
Kurulum 1 SQL> ALTER DATABASE FORCE LOGGING; SQL> alter database add standby logfile '/u01/app/oracle/oradata/EDUCATE/srl01.log' size 52428800; SQL> alter system set log_archive_config='dg_config=(educate,educated)'; alter system set log_archive_dest_2='service=orclsby1 async valid_for=(online_logfile,primary_role) db_unique_name=orclsby1'; TNS ve LİSTENER Servisleri yaratılır $ cp orapwdEDUCATE orapwdeducated initeducated.ora DB_NAME=educated Dump Directoryleri yaratılır.
Kurulum 2 $ export ORACLE_SID=educated $ sqlplus '/as sysdba' SQL> startup nomount $ export ORACLE_SID=EDUCATE $ rman target / RMAN> connect auxiliary sys/oracle@educated RMAN > 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 spfile parameter_value_convert 'educate','educated' set db_unique_name='educated'
Kurulum 3 set db_file_name_convert='/u01/app/oracle/oradata/EDUCATE/','/u01/app11g/oracle/oradata/educated/' set log_file_name_convert='/u01/app/oracle/oradata/EDUCATE/','/u01/app11g/oracle/oradata/educated/' set control_files='/u01/app11g/oracle/oradata/educated/educated.ctl' set log_archive_max_processes='5' set fal_client='educated' set fal_server='educate' set standby_file_management='AUTO' set log_archive_config='dg_config=(educate,educated)' set log_archive_dest_1='service=educate ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=educate' set log_archive_dest_2='service=educated async valid_for=(online_logfile,primary_role) db_unique_name=educated' ; } $ export ORACLE_SID=EDUCATE
Kurulum 4 SQL> SELECT sequence#, first_time, next_time FROM v$archived_log ORDER BY sequence#; SQL> alter system switch logfile; $ export ORACLE_SID=educated $ sqlplus "/as sysdba" SQL> alter database recover managed standby database using current logfile disconnect; SQL> shutdown immediate; SQL> startup mount; SQL> alter database open read only; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
Monitoring SQL> select value from v$dataguard_stats where name='apply lag'; VALUE ---------------------------------------------- +00 00:00:01 SQL> select value from v$dataguard_stats where name='transport lag'; ----------------------------------------------- +00 00:00:00 SQL> select database_role from v$database; SQL> select name from v$database; SQL> select db_unique_name from v$database;
Snapshot Standby Standby veritabanı bu yeni özellikle, canlı veritabanın birebir kopyası olan bir test ortamına kolayca dönüstürülebilir. Standby veritabanı ( ‘physical standby database ’ ) geçici bir süreligine okuma-yazmalara açılarak test amaçlı kullanılabilir, bu süre zarfında Canlı veritabanından gönderilen islem log ları (redo log) –uygulanmaksızın- kabul edilir. Test bitiminde yedek veritabanı eski haline ve fonksiyonuna dönerek kaldıgı yerden Canlı veritabanını takip etmeye devam eder.Bu özellik gerçekten daha önceleri en çok ihtiyaç duruyulan konulardan biri idi.11G ile bu özellik kullanıcılardan gelen talepler doğrultusunda eklenmiştir. Kullanım için Data Guard Broker(DB Broker)’ı aktif etmemiz gerekmektedir.
DataGuard Broker(DGMGRL) [oracle@rac1 ~]$ export ORACLE_SID=EDUCATE [oracle@rac1 ~]$ sqlplus "/as sysdba" SQL> show parameter dg_broker_start; NAME TYPE VALUE ------------------------------------ ----------- -------------------------- dg_broker_start boolean FALSE Eğer parametre değeri false ise Primary ve secondary tarafta bu parametre değerlerini enable etmemiz gerekmektedir. SQL> ALTER SYSTEM SET dg_broker_start = true; [oracle@rac1 ~]$ export ORACLE_SID=educated SQL> show parameter dg_broker_start
DataGuard Broker(DGMGRL) [oracle@rac1 admin]$ cat listener.ora # listener.ora Network Configuration File: /u01/app11g/oracle/product/11.2.0/db_1/network/admin/listener.ora # Generated by Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1) (PROGRAM = extproc) ) (GLOBAL_DBNAME = educated) (ORACLE_HOME = /u01/app11g/oracle/product/11.2.0/db_1) (SID_NAME = educated) (GLOBAL_DBNAME = educated_DGMGRL) (GLOBAL_DBNAME = EDUCATE_DGMGRL) (SID_NAME = EDUCATE) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) (ADDRESS = (PROTOCOL = TCP)(HOST = rac1.localdomain)(PORT = 1521)) ADR_BASE_LISTENER = /u01/app11g/oracle
DataGuard Broker(DGMGRL) [oracle@rac1 admin]$ dgmgrl DGMGRL> connect sys/oracle DGMGRL> show configuration ORA-16532: Data Guard broker configuration does not exist Configuration details cannot be determined by DGMGRL DGMGRL> create configuration 'DGConfig1' as > primary database is 'educate' > connect identifier is educate; Configuration "DGConfig1" created with primary database "educate« Configuration - DGConfig1 Protection Mode: MaxPerformance Databases: educate - Primary database Fast-Start Failover: DISABLED Configuration Status: DISABLED
DataGuard Broker(DGMGRL) DGMGRL> add database 'educated' as > connect identifier is educated; DGMGRL> show configuration Configuration - DGConfig1 Protection Mode: MaxPerformance Databases: educate - Primary database educated - Physical standby database Fast-Start Failover: DISABLED Configuration Status: DISABLED DGMGRL> enable configuration SUCCESS
SWITCHOVER DGMGRL> switchover to educated; Şu anda geçiş işlemi yapılıyor. Lütfen bekleyin... Yeni birincil veritabanı "orclsby1" açılıyor... İşlem, "educate" anının "EDUCATE" veritabanında kapatılmasını gerektiriyor. "educate" anı kapatılıyor... ORA-01109: veritabanı açık değil Veritabanı kullanıma kapatıldı. ORACLE anı kapatıldı. İşlem, "educate" anının "EDUCATE" veritabanında başlatılmasını gerektiriyor. "educate" anı başlatılıyor... ORACLE anı başlatıldı. Veritabanı kullanıma açıldı. Veritabanı açıldı. Geçiş başarılı oldu. Yeni birincil: "educated"
SNAPSHOT STANDBY [oracle@rac1 ~]$ export ORACLE_SID=EDUCATE [oracle@rac1 admin]$ dgmgrl DGMGRL> connect sys/oracle DGMGRL> convert database orclsby1 to snapshot standby; [oracle@rac1 ~]$ export ORACLE_SID=educated [oracle@rac1 ~]$ sqlplus "/as sysdba" SQL> select status from v$instance; STATUS ------------ OPEN SQL> select open_mode from v$database; OPEN_MODE -------------------- READ WRITE
SNAPSHOT STANDBY [oracle@rac1 ~]$ export ORACLE_SID=EDUCATE [oracle@rac1 admin]$ dgmgrl DGMGRL> connect sys/oracle DGMGRL> convert database orclsby1 to physical standby; [oracle@rac1 ~]$ export ORACLE_SID=educated [oracle@rac1 ~]$ sqlplus "/as sysdba" SQL> select status from v$instance; STATUS ------------ MOUNTED SQL> select open_mode from v$database; OPEN_MODE -------------------- SQL> alter database open read only;
AUTOMATIC BLOCK RECOVERY SQL> select dbms_rowid.ROWID_BLOCK_NUMBER(rowid) from emp; DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) ------------------------------------ 188 dd if=/dev/null of=/u02/oradata/apex/monitor_data01.dbf bs=8192 conv=notrunc seek=188 << EOF CORRUPT corrupt CORRUPT corrupt CORRUPT corrupt CORRUPT corrupt CORRUPT corrupt EOF [oracle@rac1 ~]$ /u01/oracle/scripts> ./corrupt.sh 0+0 records in 0+0 records out SQL> alter system flush buffer_cache; System altered. SQL> select * from monitor.emp; select * from monitor.emp * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 5, block # 188) ORA-01110: data file 5: '/u02/oradata/educate/monitor_data01.dbf'
AUTOMATIC BLOCK RECOVERY Automatic Block Recovery Standby üzerinden Canlı veritabanına doğru yapılır. Corrupt block relative dba: 0x018005da (file 5, block 188) Fractured block found during user buffer read Data in bad block: type: 6 format: 2 rdba: 0x018005da last change scn: 0x0000.001b3ebf seq: 0x2 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3: 0x0 consistency value in tail: 0x00000000 check value in block header: 0x1b14 computed block checksum: 0xb2a8 Reading datafile '/u01/oracle/testdr01.dbf' for corruption at rdba: 0x018005da (file 5, block 188) Reread (file 5, block 188) found same corrupt data Requesting Auto BMR for (file# 5, block# 188) Waiting Auto BMR response for (file# 5, block# 188) Auto BMR successful
DELAY TIME Max Performans için Canlı ve Standby veritabanları arasına delay time koymak mümkündür. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby DELAY=180'; oracle@rac1 ~]$ export ORACLE_SID=EDUCATE [oracle@rac1 admin]$ dgmgrl DGMGRL> EDIT DATABASE educate SET PROPERTY DelayMins='180'; DGMGRL> EDIT DATABASE educated SET PROPERTY DelayMins='180';
Oracle Golden Gate
İşlem Bazlı Veri Yönetimi - TDM Gerçek zamanlı: Saniyeden daha kısa sürede veri replikasyonu. Heterojen: Farklı veritabanları ve platformlar arasında veri iletimi. Güvenli: Sistem/network kesintilerine bakmaksızın “commit” verilmiş bütün kayıtların hedef veritabanına işlenmesi. Yüksek performans: Sadece değişen verilerin sn’den daha kısa sürede replikasyonu ile minimum kaynak tüketimi. Yüksek süreklilik : Kesintisiz versiyon yükseltme, migrasyon ve gerçek zamanlı raporlama
Nasıl Çalışıyor ? Capture: İşlem loglarına bakarak sadece commit edilmiş kayıtları alır. Trail: Değişmiş verileri platforma bağlı olmadan taşınabilir şekilde sıralar. Pump: Trail dosyalarını hedef sunucuya gönderir. Route: Sıkıştırılmış ve şifrelenmiş veri Delivery: Verileri hedef sistemin sql komutlarını kullanarak iletir.
İşinizi Garantiye Alın Dilerseniz bütün veritabanınızı, dilerseniz spesifik tablo ve şemalarınızın taşımasını gerçekleştirebilirsiniz. “Auto-commit” ile sadece değişen kayıtlarınızı yüksek hızda hedef veritabanınıza gönderebilirsiniz. Gerçek zamanlı güncellenenen hedef veritabanınızı “read-write” modda kullanarak iş yükünüzü dağıtabilirsiniz. Oracle, MS Sql Server, DB2 ve Mysql desteğiyle dilediğiniz platformlarda veri senkronizasyonu yapabilirsiniz. Upgrade / Patch işlemlerinizi sıfır kesinti ile gerçekleştirebilirsiniz.
KURULUM 1
KURULUM 2
KURULUM 3
KURULUM 4 [root@FOBSTST01 /]# mkdir /ggs [root@FOBSTST01 /]# chown oracle:oinstall /ggs [root@FOBSTST01 ggs]# ls V26185-01.zip [root@FOBSTST01 ggs]# chown oracle:oinstall V26185-01.zip [root@FOBSTST01 ggs]# su - oracle [oracle@FOBSTST01 ~]$ cd /ggs [oracle@FOBSTST01 ggs]$ ls [oracle@FOBSTST01 ggs]$ unzip V26185-01.zip t [oracle@FOBSTST01 ggs]$ tar -xvf fbo_ggs_Linux_x64_ora11g_64bit.tar [oracle@FOBSTST01 ggs]$ export PATH=$PATH:/ggs [oracle@FOBSTST01 ggs]$ export GGATE=/ggs [oracle@FOBSTST01 ggs]$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$GGATE
KURULUM 5 [oracle@FOBSTST01 ~]$ cd /ggs [oracle@FOBSTST01 ggs]$ ggsci GGSCI (FOBSTST01) 1> CREATE SUBDIRS GGSCI (FOBSTST01) 2> exit [oracle@FOBSTST01 ggs]$ mkdir $GGATE/discard SQL> create user ggate identified by ggate default tablespace users temporary tablespace temp; SQL> grant connect,resource,unlimited tablespace to ggate; SQL> grant execute on utl_file to ggate; SQL> grant select any dictionary, select any table to ggate; SQL> grant create table to ggate; SQL> grant flashback any table to ggate; SQL> grant execute on dbms_flashback to ggate;
KURULUM 6 SQL> @marker_setup.sql; SQL> @ddl_setup.sql; SQL> @role_setup.sql; SQL> grant GGS_GGSUSER_ROLE to ggate; SQL> @ddl_enable.sql;
GOLDEN GATE EXTRACT [oracle@FOBSTST01 ggs]$ ggsci GGSCI (FOBSTST01) 2> dblogin userid ggate GGSCI (FOBSTST01) 7> ADD EXTRACT ext1, TRANLOG, BEGIN NOW GGSCI (FOBSTST01) 8> ADD EXTTRAIL /home/oracle/OGG_Source/dirdat/lt, EXTRACT ext1 GGSCI (FOBSTST01) 9> ADD EXTRACT dpump, EXTTRAILSOURCE /home/oracle/OGG_Source/dirdat/lt GGSCI (FOBSTST01) 10> EDIT PARAMS ext1 EXTRACT ext1 USERID ggate, PASSWORD ggate TRANLOGOPTIONS EXCLUDEUSER ggate EXTTRAIL /home/oracle/OGG_Source/dirdat/lt TABLE source.*; GGSCI (FOBSTST01) 11> ADD RMTTRAIL /home/oracle/OGG_Target/dirdat/rt, EXTRACT dpump
GOLDEN GATE EXTRACT GGSCI (FOBSTST01) 13> EDIT PARAMS dpump EXTRACT dpump USERID ggate, PASSWORD ggate RMTHOST vmora-02.oracle.com, MGRPORT 7901 RMTTRAIL /home/oracle/OGG_Target/dirdat/rt PASSTHRU TABLE source.*; GGSCI (FOBSTST01) 14> edit params mgr PORT 7901 GGSCI (FOBSTST01) 15> start mgr GGSCI (vmora-02.oracle.com) 13> info all Program Status Group Lag Time Since Chkpt MANAGER RUNNING EXTRACT STOPPED DPUMP 00:00:00 00:19:24 EXTRACT STOPPED EXT1 00:00:00 00:24:12 EXTRACT ABENDED EXT_1A 00:00:00 672:08:09 EXTRACT ABENDED PUMP_1A 00:00:00 672:08:08
GOLDEN GATE REPLICAT [oracle@fobstst02 ggs]$ ggsci GGSCI (fobstst02) 0> dblogin userid ggate GGSCI (fobstst02) 1> add checkpointtable GGATE.CHKPTAB GGSCI (fobstst02) 2> ADD REPLICAT rep1, EXTTRAIL /home/oracle/OGG_Target/dirdat/rt CHECKPOINTTABLE GGATE.CHKPTAB GGSCI (fobstst02) 3> EDIT PARAMS rep1 REPLICAT rep1 ASSUMETARGETDEFS USERID ggate, PASSWORD ggate MAP source.*, TARGET target.*;
PROCESS START GGSCI (vmora-02.oracle.com) 7> start mgr GGSCI (FOBSTST01) 19> START EXTRACT ext1 GGSCI (FOBSTST01) 20> START EXTRACT dpump GGSCI (vmora-02.oracle.com) 16> info all Program Status Group Lag Time Since Chkpt MANAGER RUNNING EXTRACT RUNNING DPUMP 00:00:00 00:29:34 EXTRACT RUNNING EXT1 00:34:14 00:00:08 GGSCI (vmora-02.oracle.com) 7> start mgr GGSCI (fobstst02) 15> START REPLICAT rep1 GGSCI (vmora-02.oracle.com) 11> info all REPLICAT RUNNING REP1 00:00:00 00:00:06
SAMPLE REPLICATION SOURCE: SQL> delete from source.big_emp where empno=224; SQL> select * from source.big_emp where empno=224; TARGET: SQL> select empno from target.big_emp where empno=224; EMPNO ---------- 224