Kill Oracle Session
Veritabanı kullanıcıları DML ( insert update delete …) sql’i çalıştırdığında commit yada rollback edene kadar işlem yapılan tablo kilitlenir. Başka birisi o kayıtlarla ulaşamaz. Oracle birden fazla kullanıcıya hizmet sağlarken verinin tutarlılığı ve güvenliğini sağlamak için table_lock (tabloları kilitleme ) yöntemini kullanır.
Milyonlarca kaydı update yada insert yada delete ederken yazdığımız sql’de index yada parallel gibi performans artırıcı oracle hintleri kullanmadıysak transaction’ın tamamlanması çok uzun sürebilir .Bu da transaction sonlanana kadar bizim o tabloya erişmemize engel olur.Boyle bir durumda ilgili tabloya hemen erişmemiz gerekiyorsa veritabanı yönetiicisi oalrak kilitlenmeye sebep olan oturumu sonlandırmamız (kill etmemiz) gerekebilir.
Kilitlenmeye sebep olan kullanıcıyı bulmak , o kilidi ve kitleyen kişiyi öğrenmek için aşağıdaki sorguyu kullanabiliriz.
SELECT DISTINCT (vs.sid),
vs.serial#,
vs.osuser,
vs.machine,
vs.program,
vs.schemaname schema,
dmll.name table_name,
dmll.mode_held,
vs.blocking_session_status blocking,
vsql.sql_text
FROM v$SESSION vs,
v$locked_object vlo,
dba_objects dbao,
dba_dml_locks dmll,
dba_ddl_locks ddll,
dba_lock dbal,
v$sqlarea vsql
WHERE vs.sid = vlo.session_id
AND dbao.object_id = vlo.object_id
AND vs.sid = dmll.session_id
AND vs.sid = ddll.session_id
AND vs.sid = dmll.session_id
AND vs.sid = dbal.session_id
AND vs.sql_address = vsql.address;
Böylelikle hangi kullanıcının hangi tabloyu ne zaman kitlediğini öğrendik ve gerekirse oturumu kill ederek tablonun LOCK durumunu ortadan kaldırabiliriz.
ALTER SYSTEM KILL SESSION
Kilitlenmeye sebep olan oturumu öldürmek için kullandığımız temel sözdizimi aşağıdaki gibidir.
Yukardaki Sql sorgumuz sonucu gelen ‘SID’ ve ‘SERIAL’ değerleri aşağıdaki sorgumuza yazarız.
SQL> ALTER SYSTEM KILL SESSION ‘sid,serial’;
Cluster’daki nodelar üzerindeki bir session ‘ı kill etmek istediğimizde node üzerinden sonlandırmak için ilgili instance ‘ın ismini girerek, aşağıdaki gibi session ‘ı sonlandırabiliriz
SQL> ALTER SYSTEM KILL SESSION ‘sid,serial#,@inst_id’;
KILL SESSION komutu oturumu hemen öldürmez. Otumu öldürülmek üzere işaretler ve kilite sebep olan transaction’ın tamamlanmasını bekler ve işlem bittikten sonra oturumu kill eder.Oturumu kilite sebep olan transaction’ın tamamlanmasını beklemeden anında sonlandırmak için aşağıdaki sql çalıştırmamız yeterlidir.
SQL>ALTER SYSTEM KILL SESSION ‘sid,serial#’ IMMEDIATE;
Unix otamında oturumları öldürmek
UNIX yada Linux işletim sistemlerinde sessionları öldürmek için aşağıdaki komut dizini ile sonlandırmak istediğimiz işlemin process_id sini buluruz.
root@TEST # ps -ef | grep check
UID PID PPID C STIME TTY TIME CMD
oracle 3365 3364 0 10:30:00 ? 0:00 /bin/ksh /u01/app/scripts/check_db_lock_state.s
root 3370 1223 0 10:30:01 pts/5 0:00 grep check
Alan adı
|
acıklama
|
UID
|
İşlemi yapan kullanıcı
|
PID
|
İşlem numarası ( process id), her işlem için atanmış uniq bir değerdir
|
PPID
|
parent process id, gecerli işlemi başlatan process
|
C
|
Bu lan kullanılmıyor
|
STIME
|
Gecerli işlemin başlangıç zamanı
|
TTY
|
Gecerli işlemin kontrol terminali
|
TIME
|
Gecerli işlemin cpu kullanım süresi
|
CMD
|
İşlemi çağırmak için kullanılan komut
|
Kill komutundan sonra yukarda bulmuş olduğumuz PID değerini yazarak entere bastığımızda proocess sonlanır.
Burada doğru PID değerini vermemiz dikkat etmemiz gereken en önemli şeydir.Yoksa farkında olmadan yanlış bir processi sonlandırabilirz.
root@TEST # kill pid
Eğer bir kaç dakika içinde process durmazsa , sessionı aşağıdaki şekilde öldürebilirz.
root@TEST # kill -9 pid
İyi çalışmalar…
Yunus Emre Kilinc
Mersin Üniversitesi Bilgisayar Mühendisliği bölümünü bitirdikten sonra Ankara'da yaşamaya başladım. Şu anda Fatih Üniversitesinde İşletme yüksek Lisansı(MBA) na devam etmekteyim. 2010 yılında Oracle DBA eğitimi aldım. OCA 11gR2 sertifikasına sahibim. 2009 yılından beri Türk Telekom A.Ş de xDSL teknolojileri alanında çalışmaktayım. Oracle veritabanı yönetimi konularında kendimi geliştirmeye çalışmaktayım. İlgilendiğim ve kullandığım teknolojiler : Oracle SQL , PL/SQL Oracle 11g , Oracle 10g , UNIX (Sun Solaris), UNIX (HP-UX) ,OSI Model , IP ,DSL ,Unix Shell Scripting
Latest posts by Yunus Emre Kilinc (see all)
- External Table - Ara 9, 2013
- Crontab - Ara 8, 2013
- Unix üzerinde çalışan Oracle 11g Nasıl Kaldırılır - Ara 8, 2013
Powered by Starbox