قبل از kill یک session در اوراکل به چه نکاتی باید توجه کرد

در برخی موارد، ممکن است نیاز باشد که یک session در حال اجرا در Oracle Database را kill کنیم. این کار می‌تواند به دلایل مختلفی انجام شود، از جمله قفل‌های طولانی‌مدت، مصرف بالای منابع، یا مشکلات برنامه‌نویسی. در این مقاله به نکات مهمی که باید در نظر گرفته شوند و مراحل kill کردن یک session یا برنامه در Oracle Database می‌پردازیم.

نکات مهم قبل از Kill کردن یک Session

  1. بررسی میزان Undo: قبل از kill کردن یک session، باید میزان undo آن را بررسی کنید. اگر session مورد نظر مقدار زیادی undo دارد، kill کردن آن ممکن است زمان‌بر باشد و بر عملکرد کلی سیستم تأثیر بگذارد.

  2. زمان پیک بار: بررسی کنید که آیا سیستم در زمان پیک بار قرار دارد یا نه. Kill کردن یک session در زمان پیک بار می‌تواند به کندی سیستم منجر شود و تأثیر منفی بر عملکرد سایر کاربران داشته باشد.

  3. بررسی ارتباطات: اطمینان حاصل کنید که kill کردن session منجر به قطع ارتباطات مهم نشود. برای مثال، یک session ممکن است در حال اجرای تراکنش‌های حیاتی باشد.

مراحل Kill کردن یک Session در Oracle Database

1. شناسایی Session

ابتدا باید session مورد نظر را شناسایی کنید. برای این کار از جستجوی زیر استفاده کنید:

SELECT sid, serial#, username, program, status

FROM v$session

WHERE status = 'ACTIVE' and ...

;

دقت کنیم که باید چند پارامتر دیگر مثل ماشینی که در از آن آمده، نام کاربر، نام برنامه و ... را هم اضافه کنیم که دقیقا همان Session را پیدا کنیم.

2. بررسی Undo

برای بررسی میزان undo یک session می‌توانید از جستجوی زیر استفاده کنید:

SELECT s.sid, s.serial#, s.username, t.used_urec, t.used_ublk

FROM v$session s

JOIN v$transaction t ON s.saddr = t.ses_addr

WHERE s.sid = :sid;

3. Kill کردن Session

برای kill کردن یک session از دستور زیر استفاده کنید:

ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;

Kill کردن Process در سطح سیستم عامل

اگر session در سطح دیتابیس kill نشد، می‌توانید process مربوطه را در سطح سیستم عامل kill کنید. برای این کار ابتدا PID مربوط به session را پیدا کنید:

SELECT p.spid

FROM v$process p

JOIN v$session s ON p.addr = s.paddr

WHERE s.sid = :sid;

سپس در سیستم عامل، دستور زیر را اجرا کنید (در لینوکس/یونیکس):

kill -9 <PID>

نکته مهم دیگر اینکه اگر shared server کانفیگ کرده باشیم، کمی کارمون متفاوت میشه

پیدا کردن dispatcher

SELECT s.sid, s.serial#, p.spid as "PID", q.paddr as "Dispatcher PID"

FROM v$session s

JOIN v$queue q ON s.paddr = q.sid

JOIN v$process p ON q.paddr = p.addr

WHERE s.sid = :sid;

و بعد kill کردن اون و اگر نشد باید باز هم از طریق سیستم عامل اقدام کنیم.