4 Ağustos 2010 Çarşamba

11g: Yeni Özellik (Data Guard)

Merhaba,

Bu yazımda 11g ile birlikte gelen Data Guard özelliklerinden bahsedeceğim. Aslında hepsinden bahsetmenin pek imkanı yok çünkü ciddi değişiklikler mevcut.

Bir standby veritabanının yaratılışı ile başlayalım.

Yeni Bir Yedek Veritabanı Yaratmak

11g ile birlikte data guard yedek (standby) veritabanının kurulumu tek bir komut ile yapılabilmekte! Aslına bakarsanız bu bir 11g özelliği sayılmayabilir zira 10g'de yedek alınması ve karşı tarafa taşınması dışında herşey aynı, komut bile.

Yapmanız gereken aşamalar ise sırasıyla;

1) Birincil veritabanında pfile dosyasını yaratıyoruz;

SQL> create spfile from pfile;

2) Standby redolog'larını yaratmak zorunda değilsiniz ancak yaratmayı bilmek ve çalışmak güzel olabilir. Bunun dışında maximum availability ve maximum protection data guard koruma seviyeleri için yaratmak zorundasınız.

SQL> alter database add standby logfile group 4 ('/db/oracle/stby_redo01.log') size 200M;
SQL> alter database add standby logfile group 5 ('/db/oracle/stby_redo02.log') size 200M;
SQL> alter database add standby logfile group 6 ('/db/oracle/stby_redo03.log') size 200M;

3) Yedek veritabanında bir listener tanımlamamız ve reload ya da stop / start yapmamız gerekmektedir.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCLSTBY)
(ORACLE_HOME = /db/oracle/product/11g/db_1)
(SID_NAME=ORCLSTBY)
)
)

LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orclsb)(PORT = 1521))
)

4) Ana sunucudaki tnsnames.ora dosyasının içerisine ORCLSTBY'nin bilgilerini ekleyelim;

ORCLSTBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = orclsb)(PORT = 1521))
)
(CONNECT_DATA =
(SID = orclstby)
)
)

5) ORCLSTBY için kullanacağımız init.ora dosyasını yaratacağız. Yaratacağımız init.ora dosyasının içerisinde sadece aşağıdaki satır olacak;

db_name=prolin11

Bu noktada önemli bir not. Kuracağımız veritabanı fiziksel yedek olacağı için db_name parametresi, primary ile aynı olmak zorunda yoksa redolog ya da archivelog'ları standby veritabanına işleyemeyiz. Aynı zamanda db_unique_name parametrelerinin de farklı olması gerekmekte. Sadece mantıksal yedek (logical standby) veritabanı için db_name'lerin farklı olması gerekmektedir.

6) ORCLSB sunucusu üzerinde $ORACLE_BASE/admin dizinine gidelim. Burada orclstby isimli bir dizin yaratalım. Bu dizinin içerisinde de adump isimli başka bir dizin yaratlım. Bu dizin standby veritabanının audit dosyalarını tutan dizin olacak.

7) ORCL sunucusu üzerindeki $ORACLE_HOME/dbs dizinine gidelim. Burada orapworcl isimli bir password dosyası bulacaksınız. Bu dosyanın amacı sysdba ve sysoper'lerin şifrelerini tutmasıdır. Bu dosyayı ORCLSB sunucusundaki $ORACLE_HOME/dbs dizini altına, orapworclstby ismi ile kopyalayalım.

8) ORCLSB sunucusu üzerindeki orclstby veritabanını nomount modda açıyoruz.

$ sqlplus / as sysdba
SQL> startup nomount

Tabii bu komutu koşarken ORACLE_SID parametresinin ORCLSTBY olarak kaydedilmiş olması gerekmekte çünkü / as sysdba ile bağlanıyoruz, yani bulunduğumuz sunucu üzerindeki veritabanını işaret ediyoruz. Veritabanı anı (instance) başlatılacak ve SGA tahsis edilecek ancak veritabanı mount edilmeyecektir.

9) Veritabanını replike eden RMAN komutunu çalıştırıyoruz. Çalıştıracağımız yer ise ORCL sunucusu;

connect target sys/password@orcl
connect auxiliary sys/password@orclstby
run {
allocate channel c1 type disk;
allocate auxiliary channel s1 type disk;

duplicate target database
for standby
from active database
dorecover
spfile
parameter_value_convert 'orcl','orclstby'
set db_unique_name='orclstby'
set db_file_name_convert='/orcl/','/orclstby/'
set log_file_name_convert='/orcl/','/orclstby/'
set control_files='/oradata/orclstby/control01.ctl'
set fal_client='orclstby'
set fal_server='orcl'
set standby_file_management='AUTO'
set log_archive_config='dg_config=(orcl,orclstby)'
set log_archive_dest_2='service=orcl LGWR ASYNC valid_for
(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=orclstby'
set log_archive_dest_state_2='enable'
set log_archive_format='orclstby_%t_%s_%r.arc'
;
sql channel c1 "alter system archive log current";
sql channel s1 "alter database recover managed standby database using current logfile
disconnect";
}

Bir fiziksel veritabanı kurmak aslında bu kadar basit. Yukarıdaki aşamaları takip ederseniz eğer kurulumu rahatlıkla tamamlarsınız.

Active Data Guard

10g versiyonunda ve öncesinde fiziksel veritabanını sadece read only olarak açabiliyordunuz. Bunu yapabilmeniz içinse recovery işlemini tamamen sonlandırmanız gerekiyordu.

SQL> alter database recover managed standby database cancel;
SQL> alter database open read only;

Geri dönmek içinse;

SQL> alter database recover managed standby database disconnect from session;
SQL> select open_mode from v$database;

11g'deki en büyük özellik ise fiziksel veritabanını yine read only olarak açabilir ve açtıktan sonra media recovery işlemini başlatarak, ana makine ile senkronizasyonu sağlayabilirsiniz.

İlk önce media recovery'i kapatıyoruz;

SQL> alter database recover managed standby database cancel;

Database altered.

Ardından veritabanını read only olarak açıyoruz;
SQL> alter database open read only;

Database altered.

Buraya kadar herşey normal ve herhangi bir 11g özelliği görmediniz. Az önce gösterdiğim komutu çalıştırdığınız zaman 11g'nin özelliği devreye girecektir;

SQL> alter database recover managed standby database disconnect;

Database altered.

Veritabanlarındaki anlık değişimleri gözlemleyelim;
SQL> alter system switch logfile;

System altered.

SQL> select max(Sequence#) from v$log;
MAX(SEQUENCE#)
--------------
79

Şimdi de yedek veritabanına bakalım;
SQL> select max(Sequence#) from v$log;
MAX(SEQUENCE#)
--------------
79

Aynı sayıyı görmemiz, veritabanlarındaki log işleminin devam ettiğiniz göstermektedir.

Ana sunucuda bir tablo yaratlım;

SQL> create table deneme (sutun1 number);

Table created.

Birkaç log geçişi yapın ve bir süre bekledikten sonra yedek veritabanını inceleyin;

SQL> desc deneme

Name Null? Type
----------------------------------------- -------- ---------------------------
sutun1

Gördüğünüz üzere yarattığımız tablo, fiziksel yedek veritabanı read only olarak açıkken, işlenen log dosyaları ile yaratıldı.

Veritabanı Yükseltme

Veritabanının yükseltme işlemlerini yapmak için veritabanını uzun bir süre kapatmak zorunda kalabilirsiniz. Bu konu başlı başına bir büyük dokuman olduğu için ilgili link'i gönderiyorum ve bir sorunuz olursa bu doküman üzerinden takip edebiliriz. Doküman İngilizce olduğu için takıldığınız yer olursa lütfen oganozdogan@gmail.com adresine sorularınızı gönderiniz.

http://download.oracle.com/docs/cd/B28359_01/server.111/b28294/rollup.htm#BABGHIGF

Redo Sıkıştırması

Data Guard'ın çalışma mantığı, ana sunucuda oluşan archivelog'ların, yedek sunucuya aktarılarak, işlenmesi ve replikasyonun sağlanmasıdır. Buradaki en büyük sorunlardan biri iki sunucu arasındaki archivelog taşınmasının yavaşlaması ve lag'lar (gecikmeler) oluşması. Redo'ların sıkıştırılması, bu sorunu çözebilir.

11g veritabanında oluşan redo'lar sıkıştırılabilir ve bu şekilde karşı tarafa aktarılabilir, yani redo akışına dahil edilirler. Aşağıdaki komutu koşarak sıkıştırılmış redo aktarımını aktif hale getirebilirsiniz. Yalnız önemli bir ayrıntı, redo'lar sadece bir gap (boşluk) kapatılırken sıkıştırılarak gönderilecek ve aradaki açık mümkün olduğunca hızlı kapatılmaya çalışılacaktır;

SQL> alter system set log_archive_dest_2 = 'service=pro11sb LGWR ASYNC
valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=pro11sb compression=enable'

Sonuç

11g ile birlikte gelen en büyük özellik kesinlike Active Data Guard'dır. Fiziksel veritabanı read only olarak açıkken, archivelog'ların işlenebilmesi kesinlikle devrim niteliğinde bir Data Guard özelliğidir. Ben bu zamana kadar 10g üzerinde birçok defa Data Guard kurdum ve Active Data Guard, Redo Sıkıştırması ve hızlı replikasyon özellikleri olmadığı için ciddi vakit ve emek harcadım dersem yanlış olmaz.

Bu makalenin İngilizce ve Arup Nanda tarafından yazılmış verisyonunu görüntülemek için lütfen tıklayınız

İyi çalışmalar.

Ogan

Hiç yorum yok:

Takip et: @oganozdogan