Pages

7 Nisan 2011 Perşembe

Oracle veritabanında sürdürülebilir alan tahsisi (resumable space allocation)

Oracle veritabanındaki görevlerin(job) hata vermesine sebep olan disk alanı problemleri üç kategoriye ayrılmaktadır.

1. Segmentleri genişletememe durumunda
Eğer bir görev, içinde tanımlanan işlem neticesinde ilgili segment için yeni extent oluşturamaz veya tahsis edemezse bu görev askıya alınır ve Oracle buna bağlı hata raporlar. Oracle hata mesajı segment adını ve tablespace ismini göstermektedir. ORA-1650’dan ORA-1655’e kadar olan hatalar bu kategori içinde yer almaktadır.

2. Maksimum sayıdaki extent sayısı aşıldığı durumda
Eğer bir görev içinde tanımlanan işlem neticesinde ilgili segmentin extent sayısı  maxextents parametresindeki maksimum değeri aşarsa, görev askıya alınır. Oracle mesajı segment ismi boyunca maksimum sayıdaki extentleri göstermektedir. ORA-1629’dan ORA-1632’e kadarki Oracle hataları bu kategori içindedir.

3. Kota alanı aşıldığı durumda
Kullanıcı, görevin ilgili olduğu tablespace için kendisine atanan alan kotasını aştığında görev askıya alınır ve aşağıdaki hata raporlanır.

     ORA-01536-“space quota exceeded for tablespace ’xxx’’’

Aşağıda sürdürülebilir alan tahsisi olmadığında meydana gelen hata mesajları yer almaktadır.

 ORA-1653 unable to extend table ... in tablespace ...
 ORA-1654 unable to extend index ... in tablespace ...
 ORA-1650 unable to extend rollback segment ... in tablespace ...
 ORA-1628 max # extents ... reached for rollback segment ...
 ORA-1654 max # extents ... reached in index ...
 ORA-1631 max # extents ... reached in table ... 

Paralel Çalışma ve Sürdürülebilir Alan Tahsisi
Paralel çalışma durumlarında, eğer bu paralel çalışma sunucu proseslerinden birisi bir hata ile karşılaşırsa, bu sunucu prosesi çalışmasını askıya alacaktır. Diğer paralel çalışma sunucu prosesi ise bir hata ile karşılaşana kadar veya askıdaki sunucu prosesi tarafından direkt veya indirekt olarak bloklanana kadar, kendi görevini çalıştırmaya devam edecektir. Bu düzeltilebilir hata çözümlendiğinde, askıdaki proses çalışmasına kaldığı yerden devam edecek ve paralel operasyon çalışmaya devam edecektir.Eğer askıdaki proses sonlandırılırsa, paralel operasyon kesintiye uğrayacak ve kullanıcıya hata döndürecektir.

Farklı paralel çalışma sunucu prosesleri bir veya birden fazla düzeltilebilir hata ile karşı karşıya kalabilir. Bu durum AFTER SUSPEND tetikleyicinin birçok kez paralel olarak ateşlenmesinden kaynaklanabilir.

Aynı zamanda, eğer paralel çalışma sunucu prosesi başka bir paralel çalışma sunucu prosesi askıdayken düzeltilemeyen bir hata mesajı ile karşı karşıya kalırsa, bu askıdaki işlem hemen tamamlanmadan kesilir.

Paralel çalışmalar için, her paralel çalışma koordinatörü ve sunucu prosesi, DBA_ RESUMABLEveya USER_RESUMABLE görünümleri içinde kendi verilerini tutmaktadır.

Sürdürülebilir Alan Tahsisini etkinleştirmek ve devredışı bırakmak
Sürdürülebilir alan tahsisi, işlemlerin sürdürülebilir(resumable) mod aktif olduğu oturumlarda çalıştığı zaman mümkün olmaktadır. Sürdürülebilir alan tahsisinin etkinleştirilmesinin ve devredışı bırakılmasının iki anlamı vardır. Bu, RESUMABLE_TIMEOUT başlangıç parametresi ile sistem seviyesinde kontrol edilebilir veya kullanıcılar oturum seviyesinde ALTER SESSION komutu ile etkinleştirebilir.

RESUMABLE_TIMEOUT başlangıç parametresinin ayarlanması
Aşağıdaki RESUMABLE_TIMEOUT parametresi değişkliği ile tüm oturumlarda başlangıçtan itibaren sürdürülebilir alan tahsisi etkinleştirilecek ve süre aşımı periyodu ise 1 saat olarak ayarlanacaktır.

RESUMABLE_TIMEOUT = 3600

Eğer bu parametre 0 olarak ayarlanırsa, bu durumda tüm oturumlar için başlangıçta sürdürülebilir alan tahsisi devre dışı kalacaktır. Bu değer varsayılan ayardır.

ALTER SYSTEM SET komutu kullanılarak bu parametresnin değeri sistem seviyesinde değiştirilebilir. Örneğin, aşağıdaki örnekte sürdürülebilir alan tahsisi tüm oturumlar için devredışı bırakılmaktadır.

ALTER SYSTEM SET RESUMABLE_TIMEOUT=0;

Oturum içinde kullanıcılar ALTER SESSION SET komutu ile RESUMABLE_TIMEOUT başlangıç parametresini ayarlayabilir ve sürdürülebilir alan tahsisini etkinleştirebilir, süre aşım değerini değiştirebilir veya sürdürülebilir modu devredışı bırakabilirler.

ALTER SESSION komutunu kullanarak sürdürülebilir alan tahsisini etkinleştirmek ve devredışı bırakmak
Bir kullanıcı aşağıdaki komutları kullanarak bir oturum  için sürdürülebilir modu etkinleştirebilr veya devredışı bırakabilir. Askıdaki işlemler sistem kaynaklarından bazılarını tuttuğundan dolayı kullanıcıların etkinleştirme işlemlerini yapabilmesi için RESUMABLE sistem hakkında sahip olması gerekebilmektedir.

ALTER SESSION ENABLE RESUMABLE;
ALTER SESSION DISABLE RESUMABLE;

Süre aşım aralığının tanımlanması
İşlemler sınırsız bir zamana kadar askıda kalmaz. Sürdürülebilir mod etkinken, askıdaki bir işlemin herhangi bir müdahale yapılmadan ne kadar zaman sonra hata vereceği süre aşım periyodu ile tanımlanabilir. Aşağıdaki örnekte sürdürülebilir işlemler 3600 saniye sonra süre aşımına uğrayacak ve hata verecektir. Varsayılan süre aşım değeri sürdürülebilir alan tahsisi etkinleştirildiğinde 7200 saniyedir.

ALTER SESSION ENABLE RESUMABLE TIMEOUT 3600;

Eğer sürdürülebilir işlem “out of space” durumu yüzünden askıda kalırsa, aşağıdaki durumlar meydana gelir.

  • Tetikleyici bir sistem olayı başlatılır. Yazılımcılar, bir işlem askıya alındığında ateşlenecek olan otomatik tetikleyiciler kodlayabilirler.  
  • Girişler sistem veri dizin tablolarına yerleştirilir. dba_resumable ve user_resumable duraklayan işlemin kimliğini, tekstini, statusunu ve hata mesajını bulmak için kullanılmaktadır.  
  • Alert log içine yazılan mesajlar işlemin kimliğini ve hata sebebini bildirmektedir. 
Sürdürülebilir işlemlerin adlandırılması
Sürdürülebilir işlemler isimlerle tanımlanabilir.

ALTER SESSION ENABLE RESUMABLE TIMEOUT 3600 NAME 'insert into table';

NAME takısının varsayılan değeri  'User username(userid), Session sessionid, Instance instanceid'. İşlem ismi sürdürülebilir işlemlerin DBA_RESUMABLE ve USER_RESUMABLE görünümlerinde tanımlanması için kullanılmaktadır.

Kullanıcıları AFTER SUSPEND sistem olayı ve tetikleyicisi ile uyarmak
Eğer sürdürülebilir işlem düzeltilebilir bir hata ile karşılaşırsa, sistem dahili olarak AFTER SUSPEND sistem olayı oluşturur. Kullanıcılar hem veritabanı hemde şema seviyesinde bu olay için tetikleyicileri kaydedebilir. Eğer bir kullanıcı bu sistem olayını ele alacak tetikleyiciyi kaydederse, tetikleyici SQL işlemi askıya alındıktan sonra işleme girer.

AFTER SUSPEND tetikleyicisi içinde çalıştırılan SQL işlemleri her zaman sürdürülemez ve her zaman otonomdur. Bu tetikleyiciler SYSTEM rollback segmentini kullanmaktadır. Bu olaylar deadlock’ların üstesinden gelmektedir. Kullanıcılar USER_RESUMABLE or DBA_RESUMABLE görünümlerini veya DBMS_RESUMABLE.SPACE_ERROR_INFO fonksiyonunu kullanarak sürdürülebilir işlemler hakkında tetikleyiciler ile ilgili detaylı bilgiler edinebilir.

Tetikleyiciler ayrıca DBMS_RESUMABLE paketini çalıştırarak askılı işlemleri sonlandırabilir ve sürdürülebilir süre aşım değerlerini değiştirebilir. Aşağıdaki örnekte varsayılan sistem süre aşım değeri, DBMS_RESUMABLE paketi çağırılarak süre aşım değerini 3 saat olan AFTER SUSPEND tetikleyicisi ile değiştirilmektedir.

CREATE OR REPLACE TRIGGER resumable_default_timeout
AFTER SUSPEND
ON DATABASE
BEGIN
DBMS_RESUMABLE.SET_TIMEOUT(10800);
END;
/

Askıdaki işlemler hakkında bilgi elde etmek için görünümlerin kullanılması
Aşağıdaki görünümlere sorgu çekilerek sürdürülebilir alan tahsisi ile ilgili detaylı raporlara ulaşılabilir.

  • DBA_RESUMABLE ve USER_RESUMABLE: Bu görünümler o an işlem gören veya askıdaki sürdürülebilir işlemler ile ilgili bilgileri tutar. AFTER SUSPEND tetikleyicisi sonunda veya o anki süreci izlemek için veya sürdürülebilir işlemler hakkında belirli bilgilere ulaşmak için kullanılmaktadır.
SELECT user_id, session_id, error_number, error_msg, suspend_time
FROM dba_resumable;

  • V$SESSION_WAIT: Bir işlem askıya alınırsa, işlemin ait olduğu oturum bekleme durumuna alınır. "statement suspended, wait error to be cleared” satırı içeren EVENT kolonu bu görünüm içinde yer almakta ve ilgili oturumu işaret etmektedir.
SELECT sid, event, seconds_in_wait
FROM gv$session_wait

0 yorum:

Yorum Gönder