26 Kasım 2010 Cuma

Database Seviyesinde SUSPEND ve RESUME Operasyonları


Suspend komutu instance' a özgü bir komut değildir. RAC kullanılan bir sistemde node' lardan birinden çalıştırılacak olan suspend komutu tüm node' ları etkileyecektir. Alter system resume komutu ile sistem normal işleyişine geri dönecektir. Resume ve Suspend komutları farklı instance' lardan çalıştırılabilir. Sonuçda hepsi çalıştırılan komutdan etkilenecektir. Database Suspend modda iken DDL komutları dahil olmak üzere hiçbir komut response dönmeyecektir. Ne zamanki Resume komutu çalıştırılırsa database kaldığı yerden işleyişine devam edecektir.

Database’ den consistent backup almak (db kapatmadan) için veya database’ de belli bir süre için hiçbir işlem yapılmak istenmiyorsa yapılabilir.  Aynı zamanda diskler üzerinde yapılan i/o işlemlerini sıfırlamak içinde kullanılabilir. Ancak genelde çalışan sorgu hata vermeden doğabilecek fiziksel alan problemlerini ortadan kaldırmak için kullanıldığını söyleyebiliriz.
Database’ i Suspend moda almak için ;

ALTER SYSTEM SUSPEND;
System altered

Kontrol etmek için ;

SELECT DATABASE_STATUS FROM V$INSTANCE;

DATABASE_STATUS
SUSPENDED

Suspend moddan çıkartmak için ;

ALTER SYSTEM RESUME;
System altered

Kontrol etmek için ;

SELECT DATABASE_STATUS FROM V$INSTANCE;
DATABASE_STATUS
ACTIVE

Yukarıdaki şekilde manuel olarak database’ in statüsünü değiştirmenin dışında sisteme özellikle kritik yapılan bazı operasyonlarda hata dönmeden önce bizim hatayı düzeltmemiz için gereken süre kadar beklemesini, yapılan işi askıya almasını söyleyebilriz.  Örneğin yüklü yapılan bir takım insert işlemlerinde tablespace’ de yer kalmaması gibi durumlar oluşabilir. İşlem sırasında tablespace’ in doluluk durumunu izlediğimizi varsayarsak resize işlemini yapacak kadar bir süre işlem öncesinde tanımlanırsa bu bize çalışan sorguyu tekrar tekrar yeniden çalıştırmamızı engellemiş olur. Diğer türlü her hata aldığımızda (insert işlemi için özellikle hata verdiğinde sistem yapılan tüm işlemin geri alınması için rollback yapmaya başlayacakki, rollback maliyetli bir süreçtir) işlemimizi tekrar başlatmamız gerekecektir.

ALTER SYSTEM SET RESUMABLE_TIMEOUT=60;

Yukarıdaki işlem ile database seviyesinde yapılan tüm işlemler için 60 sn’ lik bir suspend zamanı tanımlanmış olur. Değişiklik spfile’ e yazılmadığı için database restart olduğu zaman işlevliğini kaybedecektir.

Resumable timeout parametresini devre dışı bırakmak yani disable yapmak için ;

ALTER SYSTEM SET RESUMABLE_TIMEOUT=0;

Komutu çalıştırmamız yeterli olacaktır.

Yukarıdaki resumable operasyonunu sesion bazında yapmakta mümkündür.

ALTER session SET RESUMABLE_TIMEOUT=60;

Session kapatıldığında yapılan değişiklikde önemini yitirecektir.

System genelinde resumable timeout süresi verildiği halde, çalışılan bir session için bu tarz bir süre kullanılmak istenmiyorsa, çalıştırılmak istenen sorgudan önce aşağıdaki komutun çalıştırılması yeterli olacaktır ;

ALTER SESSION DISABLE RESUMABLE;


Kamil TÜRKYILMAZ

Hiç yorum yok: