26 Nisan 2011 Salı

Veritabanının Çoğaltılması (Database Duplication / Replication)

Veritabanının Çoğaltılması (Database Duplication / Replication)

Bir kaynak veritabanının, başka bir yere kopyasının oluşturulmasına, çoğaltılmasına veritabanı çoğaltılması denmektedir ve kahraman komutumuzun adı 'DUPLICATE'dir. Çoğaltılan veritabanına da kaynak veritabanından RMAN aracılığı ve DUPLICATE komutu ile replike edilmiş veritabanı denmektedir. Bu yazımda DUPLICATE komutunu ve 11g ile birlikte gelen müthiş farklılıklardan bahsediyor olacağım.

Bir veritabanının çoğaltılmasını en basit anlamıyla test amacı için isteyebiliriz. Çoğaltılmış bir veritabanında aşağıdaki fonksiyonları yerine getirebilmekteyiz;

- Yedekleme ve yedekten dönme operasyonlarının test edilmesi.
- Yeni bir Oracle veritabanı sürümünün yükseltilmesi çalışması ve bu çalışmanın test edilmesi.
- Kurulumunu yaptığınız uygulamanın ana veritabanı üzerinde oluşturabileceği potansiyel yükün izlenmesi.
- Yedek veritabanı yaratmak için (Bkz. Oracle Data Guard / Fast Start Failover - Observer - Broker , Data Guard)
- Rapor çekilmesi ve oluşturulması.

Örneğin elinizde iki adet unix makine var. Bir tanesinde birincil veritabanınız bulunmakta ve üzerinde 7/24 çalışmakta olan bir uygulama bulunmakta. Bu uygulamayı çok fazla sarsmadan, ikinci unix makinesine DUPLICATE komutu ile bir replike veritabanı yaratabilirsiniz. Bu yarattığınız veritabanında da yukarıda gösterdiğim aksiyonları alabilirsiniz. Bu sayede birincil veritabanınızdaki uygulama direkt olarak etkilenmemiş olacaktır (Veritabanının, RMAN ile yedeklemesini yaparken ve DUPLICATE komutu koşarken Large Pool kullanılabileceği için performans açısından birincil veritabanına etkisi olacaktır. Benin tavsiye gece çalışmasıdır).

Burada bahsettiğim konu sonuçta bir replikasyon, kopyalama olduğu için birincil veritabanının ismi, yani DBID'si replikasyonu yapılmış kopya veritabanı ile aynı olacaktır. Bunu da sağlayan yine DUPLICATE komutudur. Kopyalanmış veritabanının DBID'sini değiştirmek ve bir recovery catalog'a tanımlamak isterseniz DBNEWID Oracle aracını kullanarak, DBID'sini değiştirebilirsiniz (# nid TARGET=SYS DBNAME=ORCL).

DUPLICATE komutu bize bütün bir kopya oluşturabilir veya fiziksel yedek veritabanı yaratabilir. Kopya veritabanının özelliklerini fiziksel yedek veritabanı için ya da fiziksel yedek veritabanına ait özellikleri, kopya veritabanı için kullanamazsınız. İkisi birbirinden başka amaçlara hizmet etmektedir.

11g ile aramıza katılan "Active Database Duplication" yani Aktif Veritabanı Çoğaltılması özelliğinden bahsetmek istiyorum. Bir veritabanı çoğaltabilmek için iki yolumuz var artık. Birincisi eski yöntem ve hala geçerli olan yöntem RMAN yedeğinin taşınması ile yapılan çoğaltma işlemi, diğeri de aktif veritabanı çoğaltılması operasyonu.


Yukarıdaki şemada gördüğünüz gibi aktif veritabanından DUPLICATE koştuğumuzda ve 11g özelliğinden faydalandığımızda bir başka aşamaya ihtiyacımız bulunmuyor. Yedeklerle uğraşmak isterseniz iki aşamalı bir yol yine sizi bekliyor olacaktır.

11g Yeni Özellik: Aktif Veritabanı Çoğaltılması 
(Active Database Duplication)

Bir ağ üzerinden gerçekleştirilen replikasyon işlemine aktif veritabanı çoğaltılması denmektedir. Bu yöntemde RMAN yedeği ile uğraşmanıza gerek kalmamaktadır.


RMAN arayüzü ile bağlandığımız hedef (target) ve uzak (auxiliary) veritabanlarını ve aralarındaki ilişkiyi yukarıdaki şemada görebilirsiniz. Aktif veritabanı coğaltılması tek bir komuta baktığı için aslında yedek bazlı çoğaltma işleminin çok ufak bir parçasını kapsamaktadır. Buradan sonra yedek bazlı veritabanı çoğaltılması işlemine detaylı olarak bakacağız.

Yedek Bazlı Veritabanı Çoğaltılması (Backup-Based Duplication)

Bu çoğaltma işleminde RMAN, önceden aldığımız bir ana veritabanı yedeğini kullanarak DUPLICATE işlemini gerçekleştirmektedir. Bu tekniğin kullanılabilmesi için 3 farklı seçeneğimiz ve yolumuz bulunmaktadır. Bunlar;

a) Hedef veritabanı bağlantısı olmadan gerçekleştirilen çoğaltma operasyonu. Recovery catalog veritabanı kullanılarak RMAN yedek bilgileri elde edilmektedir.



b) Hedef veritabanı bağlantısı ile birlikte bir recovery catalog bağlantısı olmadan gerçekleştirilen çoğaltma operasyonu. Yedek lokasyonundan alınan RMAN metadata bilgisi ile hareket edilmektedir.



c) Hedef veritabanı bağlantısı varken gerçekleştirilen çoğaltma operasyonu ise üçüncü metottur. RMAN, yedeklere ait metadata bilgisini ya hedef veritabanının controlfile'ınından ya da recovery catalog veritabanından elde etmektedir.



RMAN'in gerçekleştirdiği çoğaltma operasyonu sırasında uyguladığı aşamalar aşağıdadır;

1) Uzaktaki instance için bir spfile yaratır ancak bunu yapabilmesi işin aşağıdaki koşulların gerçekleşmemiş olması gerekmektedir.
a) Yedek veritabanı replikasyonu.
b) spfile replikasyonu.
c) Uzak instance'ın bir spfile ile başlatılmış olması.
2) Bir yedekten veya image copy'den aldığı bilgileri, en son controlfile ile birlikte restore etmesi.
3) Uzak veritabanını mount konumuna getirmesi.
4) RMAN repository'sini kullanarak, uzak veritabanı için işlenecek ve restore edilecek yedeklerin, image copy'lerin ve datafile'ların belirlenmesi. Bu aşama yalnızca yedek bazlı çoğaltma işlemi için geçerlidir.
5) Çoğaltılacak datafile'ların restore ve recover operasyonlarının gerçekleştirilmesi.
6) Uzak veritabanını kapatır ve nomount modunda yeniden açar.
7) Yeni bir controlfile yaratır, ardından datafile'ların içerisinde bu yeni DBID'yi işler.
8) Çoğaltılmış veritabanını RESETLOGS opsiyonu ile açar ve online redolog'larını oluşturur.

Birkaç örnek vermek istiyorum;

DUPLICATE TARGET DATABASE TO duplicate_database1
FROM ACTIVE DATABASE
PASSWORD FILE
SPFILE
PARAMETER VALUE CONVERT '/u01', '/u02'
SET DB_FILE_NAME_CONVERT '/u01', '/u02'
SET DB_LOG_FILE_NAME_CONVERT '/u01', '/u02'
SET SGA_MAX_SIZE 24G
SET SGA_TARGET 20G; 


DUPLICATE TARGET DATABASE 'ORCL' TO 'duplicate_database1' NOFILENAMECHECK;


RUN
{
SET NEWNAME FOR DATABASE TO '/u01/%b'^;
DUPLICATE TARGET DATABASE TO duplicate_database1
LOGFILE
GROUP 1 ('/u02/logs01.log', '/u02/logs02.log') SIZE 100M REUSE,
GROUP 2 ('/u03/logs03.log', '/u03/logs04.log') SIZE 100M REUSE;
}

Veritabanı Çoğaltılmasının Temel Adımları

1) Veritabanı çoğaltılması işlemi için hazırlıkların yapılması.
2) RMAN'nin başlatılması ve ilgili veritabanı instance'larına bağlantının sağlanması.
3) Kaynak (hedef) veritabanını geçerli aşamaya çekmek.
4) RMAN kanallarının ayarlanması ve yapılandırılması.
5) Çoğaltma işleminin gerçekleştirilmesi.

Yukarıda bahsettiğim 5 adet aşamayı sırasıyla inceleyelim.

1) Bu aşamada ilk olarak bir replikasyon tekniği ve yol haritası çıkartmamız gerekiyor. İşletmeniz ve operasyonunuz için en iyi çözümün ve yolun hangisi olduğuna karar vermelisiniz. Bunu yapabilmek için kendinize şu soruları sorabilirsiniz;

- Veritabanı çoğaltma tekniklerini ve gereksinimlerini biliyor muyum?
- Kaynak (hedef) veritabanına ait RMAN yedeklerini aldım mı ya da alıyor muyum?
- Bir recovery catalog veritabanına sahip miyim?
- Sunucular üzerinde yeterli disk alanı olduğunu biliyor muyum?
- İlgili sunucular ne tipte bir ağ bağlantı yapısına sahip (LAN, WAN)?
- Veritabanı çoğaltma işlemini ne zamana planlamak istiyorsunuz?

Soruların cevapları sizde varsa konumuza devam edelim. Bir veritabanı çoğaltılması sırasında RMAN, controlfile'lara, datafile'lara, tempfile'lara ve online redolog'lara isimleri vermektedir. Bu durumda isimlendirme için de bir stratejinizin olması gerekmektedir. Oracle'ın tavsiyesini dinlemek isterseniz derler ki; kaynak veritabanı ile çoğaltılacak uzak veritabanının bu tipte dosyalarının isimlerinin değiştirilmeden çoğaltma işleminin yerine getirilmesi. Bu işleme devam edebilmeniz içinse aşağıdaki gereksinimlerin yerine getirilmiş olması şarttır;

- Eğer kaynak veritabanı bir ASM diskgroup kullanmaktaysa, çoğaltılacak uzak veritabanının da bir ASM disk group kullanması.
- Eğer kaynak veritabanı OMF (Oracle Managed File) kullanmaktaysa, çoğaltılacak uzak veritabanındaki DB_FILE_CREATE_DEST parametresinin kaynak veritabanındaki lokasyonu ile aynı olması.
- Eğer replikasyonu yapacağınız ortamda bir Oracle RAC yapılandırması geçerli ise, ORACLE_SID parametresinin, hem kaynak hem de ilgili uzak veritabanınları için aynı olması.
- Eğer kaynak veritabanındaki datafile'lar bir dizin içermekteyse (/u01/oradata/datafiles... gibi) o zaman bu dizin yapısının çoğaltılacak uzak veritabanında da aynı olması.

Şimdi bahsedeceğim aşamayı eğer aktif veritabanı çoğaltması operasyonu yapıyorsanız geçebilirsiniz fakat yedek bazlı çoğaltma işlemini anlattığım için yine de belirtiyor olacağım. Bir replikasyon operasyonunun başarılı olabilmesi için RMAN'in DUPLICATE komutunun ilgili yedekleri görebiliyor ve uygulayabiliyor olması gerekmektedir. Bildiğiniz gibi bunu yapabilmenin birkaç yolu bulunmaktadır. Bu yolları yukarıda diyagramlarla ifade etmeye çalıştım (3 yol). RMAN yedeklerine ait metadatanın ilk oluştuğu ve doğduğu yer controlfile'dır. Genelde yapılan uygulama bir recovery catalog veritabanı kurmaktır ve metadata bilgilerini burada saklamaktır. Bunun en büyük nedeni ise controlfile'in aklında tutabileceği metadata bilgisi sınırlıyken, saklanabilecek yedek miktarı ve yedeklerin geçerlilik süreleri (retention period) oldukça değişken ve uzun vadeli olabilmektedir. Bu bağlamda hem metadata bilgisine hem de fiziksel olarak restore ve recover edilecek yedeklere ihtiyacımız vardır. Bu yedekler bir disk'te veya SBT'de (kaste, tape ünite) tutuluyor olabilir. Eğer yedekleriniz bir kaset ünitesinde bulunmaktaysa ilk bakacağınız yer erişim noktalarıdır. Kaset ünitesinden okunabilirliği incelemek durumundasınız.

Bu aşamadan sonra spfile ve passwordfile gibi Oracle instance'ına ait dosyaların kontrolünü tamamlamamız gerekiyor. Bu aşamayı RMAN'e bırakabilirsiniz ancak devri tamamlamadan önce bakılması gereken bir diğer nokta ise aradaki bağlantının sağlanıp sağlanmadığı. Bunu yapabilmek için bir listener oluşturmanız ve tns bilgilerini tanımlamanız gerekmektedir.

2) İkinci aşamada kontrol edeceğimiz nokta kaynak ve çoğaltılacak uzak veritabanının durumlarıdır (nomount, mount, open). Eğer kaynak veritabanı açık değilse mount veya open moduna alıyoruz. Burada aktiv veritabanı çoğaltması opsiyonu ile devam etmek istiyorsak; kaynak veritabanı open aşamasında ise archivelog modunda olmalıdır. Kaynak veritabanı open aşamasında değilse bir instance recovery işlemine gerek yoktur.

RMAN'in çalıştırılmasıyla devam edecek olursak tek yapmamız gereken aşağıdaki komutu, unix ortamında koşmaktır (geçerli Oracle kullanıcısı ile tabii).

# rman

CONNECT, TARGET ve AUXILIARY argümanlarını sıklıkla kullanıyor olacağız. Madem RMAN'i başlattık, şimdi de gerekli veritabanlarına ve recovery catalog'a bağlanabiliriz.

RMAN> CONNECT TARGET SYS/password@ORCL     --> Kaynak veritabanı 
connected to target database: ORCL (DBID=23041923)



RMAN> CONNECT AUXILIARY SYS/password@duplicate_database1     --> Uzak veritabanı
connected to target database: DUPLICATE_DATABASE1 (DBID=29101923)

RMAN> CONNECT CATALOG SYS/password@ORCL_CAT     --> Recovery catalog veritabanı
connected to target database: ORCL_CAT (DBID=19031984)

3) Üçüncü aşamada RMAN kanallarının yapılandırılması ve akışa hazır hale getirilmesi gelmektedir. Uzak veritabanındaki kanallar yedeğin restore işlemine yardımcı olan akış kanallarıdır. Bu kanalların nasıl ve ne kadar kullanılacağı sizin replikasyon tekniğinize ve sistemine yapısına bağlıdır.

CONFIGURE komutu ile kanalların yapılandırmasını gerçekleştirebiliriz.

RMAN> CONFIGURE CHANNEL DEVICE TYPE SBT;

5) Beşinci ve son aşamada ise uzak veritabanının çoğaltılması işlemini açıklayacağım. Bütün bir veritabanının nasıl replike edildiğini göstermeye çalışacağım. DUPLICATE isminde oldukça sihirli bir komuta sahibiz.

DUPLICATE TARGET DATABASE TO duplicate_database2
FROM ACTIVE DATABASE
PASSWORD FILE
SPFILE
NOFILENAMECHECK;

Yukarıdaki komutla çoğaltılacak uzak veritabanına ait dizin yapısının aynı olduğunu ve geçirilecek, restore ve recover edilecek veritabanı parçalarının (datafile, controlfile) aynı isimle kalacağını gösteriyoruz. Passwordfile ve spfile opsiyonlarını kullanarak bu dosyaların da geçirilmesini, kopyalanmasını istediğimizi belirtiyoruz. Son noktada, bütün işlemler gerçekleştiği anda kopyalanan veritabanı RESETLOGS opsiyonu ile yeniden açılıyor. Buradaki en önemli nokta FROM ACTIVE DATABASE argümanının kullanılmasıdır. Bu argümanla birlikte RMAN'e aktif veritabanı çoğaltma işlemini yapacağımızı gösteriyoruz. Aksini yapmak istersek;

DUPLICATE TARGET DATABASE ORCL TO duplicate_database3
DBID 19031984     --> Kaynak veritabanının DBID'si
UNTIL TIME "TO_DATE('25/04/2011', 'DD/MM/YYYY')"
SPFILE
NOFILENAMECHECK;

DBID argümanını vermemizin nedenini şöyle açıklayabilirim; ORCL veritabanı adı bu operasyonu gerçekleştirdiğimiz recovery catalog içerisinde tekil değil. Bu sebepten dolayı hangi ORCL'den bahsettiğimizi göstermek zorundayız. NOFILENAMECHECK argümanını da birincil veritabanı ile uzak çoğaltılacak veritabanı arasında isimsel bir ilişki sorunu oluşmaması için yazdık. Bu şekilde bütün isimlendirmeler aynı olarak replikasyon gerçekleştirilecektir.

DUPLICATE komutu ile yalnızca bütün veritabanının taşınmasını değil, TABLESPACE argümanını vererek de hangi tablespace'leri kopyalamak istediğimizi gösterebilmekteyiz.

İyi çalışmalar dilerim.

Ogan

Hiç yorum yok:

Takip et: @oganozdogan