Test ortamlarını genelde çok yoğun olarak prod ortamlardan alınan exp ve rman backupları test database’ ine dönmek suretiyle oluşturulur. Ancak prod ile dataguard database’ leri farklı lokasyonlarda ve proddan alınacak olan backupın da network veya başka bir yolla testin oluşturulacağa atılması problem olduğu durumlarda kaynak olarak dataguardı kullanabiliriz. Bu belirtmiş olduğun case sıkca karşılaşılan bir durum olmasa bile en azından dataguardı bu tarz bir işlem içinde kullanılabileceğini bilmek de fayda var diye düşünüyorum. Test ortamı kurulacak olan sunucu üzerine oracle software’ inin öncesinde kurulu olması gerekmektedir. Şimdi bu adımlardan step by step bahsetmeye çalışalım.
* Dataguard’ dan pfile alarak işlemlere başlayabiliz.
create pfile from spfile ;
file created.
Create ettiğimiz bu pfile’ i test ortamının parametre dosyasını oluşturmak için kullacağız.
* Testin ortamın kurulacağı sunucu üzerinde gerekli dizinler create edilir. (örneğin adump,bdump vs.)
* Test ortamı tarafına taşınan pfile düzenlenir. (örneğin test ortamı için oluşturulan yukarıdaki dizinler pfile içerisinde güncellenir, pfile’ in ismi test ortamının sid’ ini içerecek şekilde rename edilir, pfile’ i dataguard dan aldığımız buradaki gereksiz parametreler silinir, örneğin fal_client, log_arch_dest_2, dest_2_state vs. )
* Test ortamı sunucusu üzerinde oracle sid’ si ve oracle_home’ u export edilir.
* Create database komutu ile en basit haliyle sid verilerek boş bir database create edilir.
startup nomount
komutu ile database hazılamış olduğumuz pfile’ i kullanılarak nomount moda alınır.
* Aşağıdaki komut yardımı ile yeni controlfile dosyası create edilir.
Control file dosyasını create etmeden;
Control file dosyasında belirtilen dizinlerin test ortamında oluşturulması gerekmektedir. Oluşturulan bu dizinlere DG database’ i shutdown immediate ile kapatılarak bu file’ ler buraya kopyalanır. (veya DG tarafında MRP processesi çalışmamasıda yeterli olacaktır. Kopyalama süresince proddan ortamda çıkan archive’ lar apply olmayacağından dolayı bu archive’ ların kopyalama işlemi bitip DG da apply tekrar başlatılana kadar saklanması gerekecektir)
Test ortamının kurulumu öncesinde, redologların manuel olarak create edilmesine gerek yoktur, Redologlar control file create edilirken aşağıdaki komut ile sistem tarafından otomatik olarak oluşturulacaktır.
STARTUP NOMOUNT
CREATE CONTROLFILE SET DATABASE “PRODTEST” RESETLOGS NOARCHIVELOG
MAXLOGFILES 32
MAXLOGMEMBERS 5
MAXDATAFILES 600
MAXINSTANCES 10
MAXLOGHISTORY 100
LOGFILE
GROUP 1 (
‘/u01/PRODTEST/redo01.log’ ) SIZE 50M,
GROUP 2 (
‘/u01/PRODTEST/redo02.log’) SIZE 50M,
GROUP 3 (
‘/u01/PRODTEST/redo03.log’) SIZE 50M,
DATAFILE
‘/u01/PRODTEST/system01.dbf’,
‘/u01/PRODTEST/undotbs01.dbf’,
‘/u01/PRODTEST/sysaux01.dbf’,
‘/u01/PRODTEST/users01.dbf’,
‘/u01/PRODTEST/data01.dbf’,
‘/u01/PRODTEST/data02.dbf’,
‘/u01/PRODTEST/data03.dbf’
;
Son dbf’ den sonra “,” olmamasına dikkat edilmelidir. Burada “,” kalması durumunda aşağıdaki gibi bir hata ile karşılaşırsınız ;
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-01163: SIZE clause indicates 12800 (blocks), but should match header
2621440
ORA-01110: data file 7: ‘/u01/PRODTEST/data03.dbf’
* Datafile’ leri kopyalayıp control file’i create ettikden sonra database’ imizi OPENRESETLOG ile açıyoruz;
Resetlog parametresini kullanmadığımızda aşağıdaki hatayı ile karşılaşırız.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
resetlogla açmamız gerekiyor;
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1: ‘/u01/PRODTEST/system01.dbf’
Resetlogda da datafile’ lerin SCN’ ların da uyumsuzluk olduğundan aşağıdaki gibi bir hata alıyoruz;
Aslında burdan sonraki kısmı sadece test ortamı oluştururken değil, datafile’ lerin SCN larında uyuşmazlık olduğu tüm durumlarda karşılaşabileceğimiz bir hata, bu örneği özellikle vermek istedim çünkü ne kadar çok hata durumunu izah etmeye çalışırsak, blog’ un o kadar faydası olacağını düşünüyorum. Her bir datafile’ in SCN değerini ve aralarındaki tutarsızlıkları aşağıdaki sorgu ile görebiliriz. Böyle bir durumda yapmamız gerekense SCN’ ları eşitlemek için recover işlemi yapmamız gerekmektedir.
SQL> select HXFIL File_num,substr(HXFNM,1,40) File_name, FHSCN SCN, FHSTA status ,FHRBA_SEQ Sequence from X$KCVFH;
Recover işlemi ;
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;
ORA-00279: change 3861769559 generated at 06/14/2011 00:13:33 needed for thread1
ORA-00289: suggestion : /oracle/flash_recovery_area_UAT/PRODTEST/archivelog/2011_06_14/o1_mf_1_87311_%u_.arc
ORA-00280: change 3861769559 for thread 1 is in sequence #87311
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
Burada iki seçeneğimiz var, birincisi AUTO yu seçip elimizde varsa archive larımız son archive kadar bunları işletip ana kadar gelebiliriz. Production bir ortamda benzeri bir durumla karşılaşıyor olsaydık bunu seçiyor olacaktık. Ama bizim örneğimizde test ortamı kurduğumuzdan dolayı CANCEL opsiyonunu seçerek recovery işlemini sonlandırıyoruz.
CANCEL
Media recovery cancelled.
* Recover işlemi yapıldıktan sonra tekrar open komutu çalıştırıyoruz;
SQL> alter database open resetlogs;
Database altered.
Test veritabanımız artık kurulmuş oldu. İşimizin
* Kurulum sonrası kontrol edilecekler ;
– İlk olarak Temp tablespace’ in olup olmadığı kontrol edilmelidir;
select * from dba_temp_files;
Sorgusunun no_rows dönmesi durumunda aşağıdaki script ile bir temp tablespace’ i oluşturmamız gerekir, path ve size bilgileri ihtiyaca göre göncellenmelidir;
CREATE TEMPORARY TABLESPACE TEMP TEMPFILE
‘/usr/ORACLE/ DATA/temp01.dbf’ SIZE 5000M AUTOEXTEND OFF
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP;
– İkinci olarak bir tane password file create etmemiz gerekir;
orapwd file=orapwPRODTEST password=sys_password entries=5 force=Y
Password file create edildikden sonra aktif olması için database’ in restart edilmesi gerekmektedir.
– Kullanıcıların yetkileri kontol edilebilir.
Bu adımlar bir test ortamı için yeterli olacaktır. Aslında test ortamı oluşturmak için izlenebilecek çok farklı yöntemler var. Buradaki bahsettiklerimde bunlardan sadece bir tanesi, en azından olaylara farklı bakış açılarıyla bakmamız gerektiğinde ve farklı durumlarda birden fazla çözüm üretmeniz gerektiğinde bu tarz bilgilerin faydalı olacağını düşünüyorum.