ORA-01154: database busy. Open, close, mount, and dismount not allowed now

Bu hata ile daha önce hiç karşılaşmamış olanlarımız var ise öncelikle shutdown immediate komutunu database’i nasıl kapatamıyor diye düşünebilir. Ancak hemen belirteyimki kendi içinde tutarlı bir açıklaması var 🙂

Bu durum öncelikle eğer physical standby database’ iniz varsa ve protection mode’ da çalışıyor ise database’ i kapatmaya çalıştığınızda bu hayatı alırsınız. Çünkü protection mode NO DATA LOSS yani sıfır data kaybı mantığına göre çalıştığından dolayı eğer siz database’ i kapatabilseydiniz ve o esnada primary database’ inizde bir crash durumu yaşanması durumunda buda veri kaybını olacağı anlamına gelecektiki buda maximum protection mode’ ın doğasına aykırı bir durum oluştururdu. Bu yüzden sistem size bu mode geçerli olduğu sürece database’ i kapatmanıza izin vermeyecektir. Peki database’ imizi kapatmamız gerekiyor, nasıl kapatabiliriz.

Öncelikle primary database’ imizin protection mode’ unu kontrol edelim;

SQL> select protection_mode, protection_level from v$database ;

PROTECTION_MODE PROTECTION_LEVEL
——————– ——————–
MAXIMUM PROTECTION MAXIMUM PROTECTION

Dataguardımızı kapatmaya çalışalım, hatayı alalım ;

SQL> shutdown immediate
ORA-01154: database busy. Open, close, mount, and dismount not allowed now

Bu komutu çalıştırdığımızda alert loga aşağıdaki satırlar yansıyacaktır;

Tue Jul 17 21:15:10 2012
Attempt to shut down Standby Database
Standby Database operating in NO DATA LOSS mode
Detected primary database alive, shutdown primary first, shutdown aborted

Burada önemli bir nokta da şu, eğer primary database’ inizin mode maxiumum protection ve standy database’ iniz bir tane ise ve DG mutlaka kapatmak istiyorsanız mutlaka primary’ ide kapatmak zorunda olmanızdır. Mantık şu, maxiumum protection mode’ da olup DG’ ı kapattınız anda data kaybı riskiniz başlamış demektir ve sistem buna izin vermeyeceğinden dolayı primary ile DG arasındaki bağlantı koptuğunda primary veritabanınız da otomatik olarak hang olacak ve hiçbir transaction response vermeyecektir. Dolayısıya DG’ ınız için bu tarz bir planlama yapacaksanız Primary’ ide dikkate almanız sizin faydanıza olacaktır.

İsterseniz öncelikle bunu deneyelim;

Standby’ i abort ile kapatıyorum ;

SQL> shutdown abort
ORACLE instance shut down.

Primary’ inin alert loguna eşzamanlı olarak aşağıdaki satırlar düşer ;

Tue Jul 17 21:50:39 2012
Error 1034 received logging on to the standby
LGWR: Error 1034 attaching to RFS for reconnect
Error 1034 received logging on to the standby
Tue Jul 17 21:50:47 2012
Error 1034 received logging on to the standby
Errors in file /u01/sq/ora_1/oracle/diag/rdbms/oradba/oradba/trace/oradba_arc2_29494.trc:
ORA-01034: ORACLE not available
PING[ARC2]: Heartbeat failed to connect to standby ‘oradba_stby’. Error is 1034.
Tue Jul 17 21:50:47 2012
LGWR: Error 1034 attaching to RFS for reconnect
Tue Jul 17 21:50:53 2012
Error 1034 received logging on to the standby

Benim test ortamımda maalesef iki tane pyhsical standby database’ im olmadığı için size sadece komutları vermekle yetiniyor olacağım.

Ilk olarak ;

Apply işlemini cancel edip abort ile kapatabiliriz;

SQL> alter database recover managed standby database cancel;
Database altered.

SQL> shutdown abort
ORACLE instance shut down.

Alert log satırlarımız;

alter database recover managed standby database cancel
Tue Jul 17 21:32:18 2012
MRP0: Background Media Recovery cancelled with status 16037
Errors in file /u01/sq/ora_1/oracle/diag/rdbms/oradba_stby/oradba/trace/oradba_pr00_9881.trc:
ORA-16037: user requested cancel of managed recovery operation
Recovery interrupted!
Errors in file /u01/sq/ora_1/oracle/diag/rdbms/oradba_stby/oradba/trace/oradba_pr00_9881.trc:
ORA-16037: user requested cancel of managed recovery operation
Waiting for MRP0 pid 9866 to terminate
Tue Jul 17 21:32:18 2012
MRP0: Background Media Recovery process shutdown (oradba)
Managed Standby Recovery Canceled (oradba)
Completed: alter database recover managed standby database cancel
Tue Jul 17 21:32:29 2012
Shutting down instance (abort)
License high water mark = 11
USER (ospid: 6129): terminating the instance
Instance terminated by USER, pid = 6129
Tue Jul 17 21:32:31 2012
Instance shutdown complete

Ikinci yöntemimiz ise ki daha biliçli olduğunu söyleyebilirim ;

Öncelikle primary’ de log_archive_dest_state parametresini defer edip, sonrasında standby’ i kapatabiliriz; (iki tane datagyardınız olduğunu düşünürsek diğerine log akışı devam edeceğinden dolayı bir tanesini kapatmanıza sistem izin verecektir.)

SQL> alter system set log_archive_dest_state_2=defer scope=memory;

Sonra standby’ ı shutdown immediate ile kapatabilirsiniz.

Eğer sizinde benim gibi bir tane physical standby’ iniz varken bu parametreyi değiştirmeye çalıştırırsanız aşağıdaki hatayı alırsanız;

SQL> alter system set log_archive_dest_state_2=defer scope=memory;
alter system set log_archive_dest_state_2=defer scope=memory
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-16072: a minimum of one standby database destination is required

Son bir not, protection mode kullanmaya karar verirken çok iyi düşünmenizi öneririm. DG tarafında yaşanacak olan tüm problemlerden production etkilendiğinden dolayı zaman zaman problem yaşayabilme ihtimaliniz bulunmaktadır.

Be Sociable, Share!

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


− 3 = üç