Control File Yönetimi – 2

Selamlar,

bir önceki makalede (burada) control file’ın ne işe yaradığından, nerede bulunduğundan, backup’ının nasıl alıcağı gibi konulardan bahsetmiştik. Şimdi ise control file ile ilgili uygulamalar yapalım.

Yeni bir control file eklemek

Control file’larımız “control_files” parametresi nereyi gösteriyor ise oradadır demiştik. Yani bu parametreyi değiştirip yeni bir lokasyon eklersek ve o lokasyona da control file’ın bir kopyasını koyarsak database’e yeni bir control file eklemiş oluruz.

ctl03

SQL> alter system set control_files='+DATA/orcl/controlfile/current.262.807119395','+FRA/orcl/controlfile/current.256.807119395','/u01/app/control03.ctl';

Yukarıdaki komut ile parametreyi değiştirip control file’ın yeni lokasyonunu eklemeye çalıştım fakat hata aldım. Çünkü control_files parametresi dinamik bir parametre değildir yani bu parametre memoryde değiştirilemez. Bu nedenle bu parametreyi sadece spfile üzerinde değiştirip database’i kapatıp açmam gerekli.

SQL> alter system set control_files='+DATA/orcl/controlfile/current.262.807119395','+FRA/orcl/controlfile/current.256.807119395','/u01/app/control03.ctl' scope=spfile;
System altered.
SQL> shutdown immediate;

Şimdi control file’ı kopyalayalım. Benim sitemimde +ASM kurulu olduğu için bu işlemi asmcmd (asm command line) üzerinden yapmak gerekiyor. File system kurulu sistemlerde direk cp komutunu kullanabilirsiniz. Ya da elle copy paste işlemini gerçekleştirebilirsiniz.

ctl02

Görüldüğü gibi “/u01/app” dizini altına “control03.ctl” dosyası başarı ile kopyalandı. Şimdi database’i açabilirim.

SQL> startup
ORACLE instance started.
Total System Global Area 1653518336 bytes
Fixed Size 2213896 bytes
Variable Size 1023412216 bytes
Database Buffers 620756992 bytes
Redo Buffers 7135232 bytes
Database mounted.
Database opened.

Database open moda geldi. Şimdi control file’ların lokasyonlarına bakalım.

ctl04

Görüldüğü gibi yeni eklediğim control file ile database sorunsuz bir şekilde çalışıyor.

Kaybedilirse ne olur ?

1. Control file’lardan herhangi biri kaybolursa database down olur.

2. Database hang olur. Yani control file yoktur ama database askıda kalır. Bunun örneğini yapalım.

+DATA ve +FRA disklerindeki control file’lar o an database tarafından kullanıldığı için ASM bunları silmeme izin vermiyor. Ben de “/u01/app” dizini altındaki “control03.ctl” adlı dosyayı silicem. Önce database’in açık olup olmadığını kontrol ediyorum ve ardından control file’ı elle siliyorum.

ctl05

Normal şartlarda database’in anında down olması gerekir. Fakat bazen database askıda kalabiliyor. Kontrol edelim.

ctl06

Bir süre bekledikten sonra alert_<SID>.log dosyasını incelerseniz control file ile ilgili logları görebilirsiniz. Ancak database halen açık durumda.

ctl07

Görüldüğü gibi alert.log dosyasına sürekli aynı hata mesajı düşüyor.

Bu durumdan kurtulmak için database’i kapatmaya çalışınca aşağıdaki gibi bir hata alıyorum.

ctl08

Bu hatayı almamın sebebi database’in kapanırken checkpoint atmak istemesi ve controlfile’lara bir şeyler yazmaya çalışması. Bizim ‘/u01/app’ dizini altındaki controlfile’ımız yerinde olmadığı için ona bir şey yazamıyor ve dolayısıyla database’in tutarsız kapanmasına izin vermiyor.

Bu durumdan kurtulmanın 2 yolu var.

1.si kaybolan control file’ı diğer current control file’lardan kopyalayarak yerine geri koymak.
2. yol ise database’i “shutdown abort” ile kapatıp (shutdown abort ile ilgili bilgi burada.), kaybolan controlfile’ı aynı yerine kopyalayıp database’i açmak.

Kaybedilen control file nasıl restore edilir ?

Default’ta 2 adet control file var demiştik. Eğer bu control file’lardan birini kaybedersek yukarıdaki yöntemler ile (current control file’dan bir kopya oluşturarak) kurtarabiliriz.

Ama database’deki tüm control file’lar kaybedilir ise o zaman mutlaka bu control file’ların en az bir yedeğinin olması gerekmektedir. Control file’ın yedeğinin nasıl alınacağını bir önceki yazıda öğrenmiştik (burada). Şimdi control file’ın yedeğini alalım daha sonra database’deki tüm control file’ları silelim ve yedekten geri dönelim.

İlk önce control file’ın yedeğini alıyorum.

ctl09

Yedek alma işlemi tamamlandıktan sonra database’i kapatıyorum ve 2 control file’ı da elle siliyorum (database açık iken bunu yapmak istemiyorum cunku benim sistemim sürekli olarak hang’e düşüyor ve database down olmuyor).

ctl10

Şimdi database’i açmaya çalışıyorum ancak mount moduna geçemeden aşağıdaki gibi bir hata alıyorum.

ctl11

RMAN’e bağlanıp controlfile’ları almış olduğum yedekten dönüyorum.

ctl12

Control file’ları backup’tan başarılı bir şekilde döndüm şimdi database’i açabilirim. Database’i açmaya çalışırken aşağıdaki gibi hata alıyorum, daha sonra resetlog ile açmaya çalışıyorum ve
“ORA-01152: file 1 was not restored from a sufficiently old backup”
hatasını alıyorum. 

ctl13Bu hata bize şunu demek istiyor;
‘+DATA/orcl/datafile/systems.260.807119173’ database file’ı ile controlfile’ın SCN’ı uyuşmuyor. Bir önceki yazımda da belirttiğim gibi tüm database file’lar ve controlfile’ların SCN’ı aynı olmaz ise database açılamaz. Bunu çözmek için database’e logları işletmem gerekli. Onun için de RMAN’e bağlanıp “recover database;” komutunu veriyorum.

ctl14Şimdi database’i açabilirim.

ctl15Evet controlfile’ı başarılı bir şekilde backuptan döndük.

Kolay gelsin.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s