22 Ekim 2010 Cuma

Rman ile bir database’ i farkli bir sunucu üzerine taşımak


Aşağıdaki örnek aslında küçük veya orta ölçekli database’ ler için uygulanabilir bir yöntemdir. Büyük ölçekli database’ ler için tape backuplar üzerinden restore daha optimum bir yöntemdir.

Konuyu iyi anlatabilmek için önce varsayımlarımızı ortaya koyalım;

- Kaynak sunucumuz A ,
- Restore yapılacak sunucumuz Sunucumuz B,
- B sunucusunun ’ nin directory yapısı A ‘dan farklı,
- Bu örnek için oracle versiyonumuz 10gR1,
- ORACLE_SID değişmeyecek (instance name’ imiz PRDTEST olsun),
- Sunucularımızın Linux tabanlı (windows makinalarda kimi komutlarda ufak farklılıklar olabilir)

Not :
Kaynak database ile hedef database’ inin versiyonlarının aynı olması gerekiyor. (Rman ile control file’ lerinde backupı taşınacağı için restore aşamasında compatible parametresinde uyumsuzluk olmaması için)
 

B sunucusu üzerinde sadece oracle software kurulu olması yeterlidir.

Bu işlemler için rman catalog database’ i oluşturulmasına gerek yoktur. (Catalog üzerinde de yapılabilir)

İşlemlerYapılacak işlemler üzerinden sırayla gitmeye çalışalım ;

1. PRDTEST database’ inin rman ile backupı alınır.

Sunucu A üzerinde rman’ e bağlanılır ;

Database’ in full backupı alınır,

- rman target /

Database’ in backupı;

backup tag whole_database_open format
 '/data/backup/df_%u' database;

archivelog ların backupı;

sql
 'alter system archive log current';
backup archivelog all format
 '/data/backup/arc_%u';

Controlfile’ ın backupı;

backup current controlfile tag = cf1 format
 '/data/backup/ctlf_%u';

veya bütün bu işlemleri tek seferde yapmak isterseniz aşağıdaki komutu kullanabilirsiniz;

run {
allocate channel t1 type disk;
allocate channel t2 type disk;
allocate channel t3 type disk;
backup tag whole_database_open format
 '/data/backup/df_%u' database;
sql
 'alter system archive log current';
backup archivelog all format
 '/data/backup/arc_%u';
backup current controlfile tag = cf1 format
 '/data/backup/ctlf_%u';
}

2. A
 sunucusu üzerindeki datafile’ lerin ve redologların pathlerini ve isimlerini (B sunucu üzerinde farklı directory’ lerde olacağından dolayı) almamız gerekiyor. Sonrasında bunları B sunucusu için düzenleyeceğiz.

Select file#, name from v$datafile;

select group#, member from v$logfile;

3. A
 sunucusundan almış olduğumuz backupları B sunucusu üzerine kopyalamamız gerekiyor.

4. Software kurulu olan B sunucuna, A sunucusu ora, pfile, initfile’ ler kopyalanır. Bdump, adump vs … dizinleri create edilir. Tnsnames.ora, listener.ora,sqlnet.ora dosyalarıda kopyalanır ve bunlar içerisindeki alanlar güncellenir (örneğin ORACLE_HOME path’i)

İnit.ora dosyası edit edilerek gerekli parametre değişiklikleri yapılır. Örneğin bdump, udump, cdump path’ leri değiştirilir. Sga ve pga parametreleri gerekiyorsa değiştirilir. (2 sunucuya ait ram ler farklılık gösterebilir) Control file’ in path’ i set edilir. Gereken tüm değişiklikler yapılır.

5. B sunucu üzerine pawd file create edilir.

orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=password force=Y

6. B sunucusu üzerinden sqlplus’ a bağlanılır ;

Database pfile kullanılarak nomount moda alınır.

startup nomount pfile=

7. B sunucusu üzerinde control file restore edilir.

A sunucusu üzerindeki backupları, B sunucusu üzerinde aşağıdaki dizine kopyaladığım için bu path’ i kullandım.

- Rman target /

restore controlfile from
 '/data/flash_recovery_area/PRDTEST/AUTOBACKUP/ctlf_1ulr3bhd';

8. B sunucusu üzerindeki database mount moda alınır.

alter database mount;

9. A
 sunucusu üzerinden rman backup ile alınan datafile’ ler önce rename sonra restore edilir.

Rename ve restore işi tek tek yapılabileceği gibi aşağıdaki gibi tek seferde de yapılabilir.

run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
set NEWNAME for datafile 1 to
 '/yeni_path/system01.dbf';
set NEWNAME for datafile 2 to
 '/yeni_path/undotbs01.dbf';
set NEWNAME for datafile 3 to
 '/yeni_path/sysaux01.dbf';
set NEWNAME for datafile 4 to
 '/yeni_path/users01.dbf';
set NEWNAME for datafile 5 to
 '/yeni_path/deneme01.dbf';
set NEWNAME for datafile 6 to
 '/yeni_path/prdtest01.dbf';
restore database;
switch datafile all;
}

10. Redologlar rename edilirek yeni pathleri tanımlanır. Restore işlemine ilk control file dan başlamıştık. Datafile ve redologlara ait tüm bilgiler control file içerisinde yer almaktadır. Datafile’ lerin pathlerini değiştirerek yeni lokasyonlarına restore ettik. Şimdi ise redologlar için aynı işlemi yapmamız gerekiyor.
 

Değişiklik önce redologlar hakkında bilgi edinmek için aşağıdaki scripti kullanabiliriz ;

SELECT V1.MEMBER, V2.*
FROM V$LOGFILE V1, V$LOG V2
WHERE V1.GROUP# = V2.GROUP#
ORDER BY 3;

Bu script sonucunda A sunucusu üzerinde tanımlamış olan 3 adet redo logun pathlerinin B sunucundaki directory yapısına göre (nerde olmasını istiyorsak) güncellenmesi gerektiğini görürüz.

Bunun için önce kendi redologlarımızı create edip,

ALTER DATABASE ADD LOGFILE GROUP 4 ('/data/oradata/redo04.log') SIZE 50M;

ALTER DATABASE ADD LOGFILE GROUP 5 ('/data/oradata/redo05.log') SIZE 50M;

ALTER DATABASE ADD LOGFILE GROUP 6 ('/data/oradata/redo06.log') SIZE 50M;

Yeni create edilen bu redologların
 

Alter system switch logfile;

İle kullanılmasını sağlayıp (drop edileceklerin durumunun active olmaması gerektiğinden) eski redologları drop edebiliriz.

ALTER DATABASE DROP LOGFILE GROUP 1;

ALTER DATABASE DROP LOGFILE GROUP 2;

ALTER DATABASE DROP LOGFILE GROUP 3;


Böylelikle A sunucusu üzerindeki bir database’ inizi B sunucu üzerine aynı SID ile taşımış olduk.


Kamil TÜRKYILMAZ 

Hiç yorum yok: