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