Pages

11 Mart 2011 Cuma

Tablespace salt okuma moda getirilirken o an aktif işlemlerin tespit edilmesi ve sonlandırılması

ALTER TABLESPACE...READ ONLY ile tablespaceleri read only moda girişi ancak  o an devam eden tüm işlemlerin ya commit ile onaylanması yada rollback ile değişikliklerin geri alınması sonucunda gerçekleşir. Bazı durumlarda kullanıcılar, salt okuma(read only) durumunda açılacak olan tablespace içindeki tablolarda işlem yapıyor olabilir. İşte bu durumda bu tablespace'ı salt okuma durumuna getirmek için çalıştırılan komut uzun zaman devam ediyorsa ve muhtemelen askıda kalıyorsa, kimlerin on aktif işlem yaptığını tespit etmeniz ve bu kullanıcıların işlemlerini sonlandırmanız gerekmektedir.  

Bu noktada; öncelikle ALTER TABLESPACE...READ ONLY komutunun oturum adresini tespit etmemiz gerekecektir. Ardından aktif oturum adreslerini ve kimlere ait olduğunu bulacağız. Bunun sonucunda ALTER TABLESPACE...READ ONLY  komutunun işaret ettiği oturum adresinden önceki tüm oturum adreslerinin sonlandırılması gerekecektir. Bu işlemleri gerçekleştiren kullanıcılar bilgilendirilerek işlemlerin sonlandırılması talep edilebilir. Akabinde, ALTER TABLESPACE...READ ONLY  komutu başarıyla çalışacaktır.

Aşağıdaki sorgu ALTER TABLESPACE...READ ONLY cümlesinin oturum adresini verecektir.

SELECT SQL_TEXT, SADDR
FROM V$SQLAREA,V$SESSION
WHERE V$SQLAREA.ADDRESS = V$SESSION.SQL_ADDRESS
AND SQL_TEXT LIKE 'alter tablespace%';

SQL_TEXT                                                     SADDR
----------------------------------------                    ----------------
alter tablespace tbs1 read only                       80034AF0

Tüm aktif işlemlerin SCN başlangıcı V$TRANSACTION görünümüde yer almaktadır. Büyükten küçüğe sıralama ile işlemlerin çalışma sırasına göre SCN başlangıçları listelenir. Küçük SCN başlangıçları ALTER TABLESPACE...READ ONLY komutundan önce çalışmaya başlamış aktif işlemlerin oturum adresini işaret edecektir. ALTER TABLESPACE...READ ONLY komutunun çalıştığı andan itibaren bu komutun başarılı şekilde tamamlanıncaya kadar geçen sürede, kullanıcılar tarafından yapılan tüm işlemler geçersiz olacağından bu SQL cümleleri bloklama yapmaz

SELECT SES_ADDR, START_SCNB
FROM V$TRANSACTION
ORDER BY START_SCNB;

SES_ADDR               START_SCNB
--------                        -----------------
800352A0                   3621    --> bu işlem tamamlanmayı bekliyor
80035A50                   3623    --> bu işlem tamamlanmayı bekliyor
80034AF0                   3628    --> ALTER TABLESPACE komutunun oturum adresi

Artık bloklamayı yapan kullanıcıları tespit edebiliriz.

SELECT T.SES_ADDR, S.USERNAME, S.MACHINE
FROM V$SESSION S, V$TRANSACTION T
WHERE T.SES_ADDR = S.SADDR
ORDER BY T.SES_ADDR;

SES_ADDR     USERNAME               MACHINE
--------            --------------------      --------------------
800352A0       USER1                        TEST1   --> Bu kullanıcı ile irtibata geçin…
80035A50       USER2                        TEST2   --> Bu kullanıcı ile irtibata geçin…
80034AF0       DBA01                        LINUX1

0 yorum:

Yorum Gönder