ESC را فشار دهید تا بسته شود

زمیوس آموزش، یادگیری و سرگرمی

آموزش جامع پکیج DBMS_MONITOR در Oracle | مانیتورینگ حرفه‌ای SQL و Session

مقدمه: وقتی Performance دیتابیس دردسرساز می‌شود…

اگر با Oracle کار کرده باشی، حتماً این سناریو را تجربه کرده‌ای:

«سیستم کند شده، کاربران شاکی‌اند، اما هیچ‌کس دقیق نمی‌داند مشکل از کجاست!»

در این شرایط، Trace گرفتن از کل دیتابیس نه منطقی است و نه امن؛

اینجاست که DBMS_MONITOR مثل یک ذره‌بین حرفه‌ای وارد عمل می‌شود.

📌 با DBMS_MONITOR می‌توانی:

  • فقط همان Session مشکل‌دار
  • یا حتی فقط یک SQL خاص
  • یا یک Service اپلیکیشن

را مانیتور کنی، بدون اینکه کل سیستم را تحت فشار بگذاری.

در این مقاله آموزش Oracle در بخش آموزش پکیج های اوراکلی، DBMS_MONITOR را واقعی، کاربردی و حرفه ای یاد می‌گیری.

اگر DBA یا توسعه‌دهنده‌ی اوراکل باشی، احتمالاً بارها با این سؤال مواجه شدی:

«چرا این کوئری کنده و دقیقاً چی کار کنم بهتر بشه؟»

اینجاست که پکیج قدرتمند DBMS_ADVISOR وارد بازی می‌شود؛ پکیجی که مغز متفکر بسیاری از ابزارهای تحلیلی Oracle مثل SQL Tuning Advisor، SQL Access Advisor و Segment Advisor است.

پیشنهاد می کنم این مقاله زیر رو حتما مطالعه کنی.

در این مقاله شما می خوانید

پکیج DBMS_MONITOR چیست؟

DBMS_MONITOR یک پکیج سیستمی در Oracle است که برای فعال‌سازی Trace هدفمند استفاده می‌شود.

✅ برخلاف SQL_TRACE قدیمی، این پکیج:

  • دقیق
  • قابل کنترل
  • و مناسب محیط Production است

چرا پکیج DBMS_MONITOR از SQL_TRACE بهتر است؟

DBMS_MONITOR SQL_TRACE ویژگی
Trace هدفمند
مناسب Production
SQL_ID خاص
Service-based Trace
کامل محدود کنترل Wait و Bind

✅ نتیجه ساده است:

پکیج DBMS_MONITOR انتخاب حرفه‌ای‌هاست.

پیش‌نیاز استفاده از پکیج DBMS_MONITOR

دسترسی لازم

				
					GRANT EXECUTE ON DBMS_MONITOR TO your_user;
				
			

مسیر فایل‌های Trace

				
					SELECT value
FROM v$diag_info
WHERE name = 'Diag Trace';

				
			

مانیتور کردن یک Session خاص (Session Trace)

یک کاربر خاص باعث مصرف CPU بالا شده و کل سیستم را کند کرده است.

پیدا کردن SID و SERIAL#

				
					SELECT sid, serial#, username
FROM v$session
WHERE username = 'HR';

				
			

فعال‌سازی Trace

				
					BEGIN
  DBMS_MONITOR.SESSION_TRACE_ENABLE(
    session_id => ۱۲۳,
    serial_num => ۴۵۶,
    waits      => TRUE,
    binds      => TRUE
  );
END;
/

				
			

📌 با این کار فقط همان Session مانیتور می‌شود.

غیرفعال‌سازی Trace

				
					BEGIN
  DBMS_MONITOR.SESSION_TRACE_DISABLE(
    session_id => ۱۲۳,
    serial_num => ۴۵۶
  );
END;
/

				
			

مانیتور کردن SQL خاص با SQL_ID

فعال‌سازی Trace برای SQL_ID

گاهی فقط یک Query بد کل دیتابیس را زمین‌گیر می‌کند.

				
					BEGIN
  DBMS_MONITOR.SQL_TRACE_ENABLE(
    sql_id => '۶g8f9k2abc123',
    waits  => TRUE,
    binds  => TRUE
  );
END;
/

				
			

✅ مزیت بزرگ:

حتی اگر این SQL توسط چند Session اجرا شود، فقط همان SQL Trace می‌شود.

غیرفعال‌سازی

				
					BEGIN
  DBMS_MONITOR.SQL_TRACE_DISABLE(
    sql_id => '۶g8f9k2abc123'
  );
END;
/

				
			

مانیتور کردن Service (بهترین روش در محیط های عملیاتی)

در محیط واقعی، اپلیکیشن‌ها معمولاً با Service Name وصل می‌شوند.

فعال‌سازی Trace روی Service

				
					BEGIN
  DBMS_MONITOR.SERVICE_TRACE_ENABLE(
    service_name => 'OLTP_SERVICE',
    waits        => TRUE,
    binds        => TRUE
  );
END;
/

				
			

✅ فقط همان اپلیکیشن مانیتور می‌شود

✅ بقیه کاربران کاملاً امن هستند

غیرفعال‌سازی

				
					BEGIN
  DBMS_MONITOR.SERVICE_TRACE_DISABLE(
    service_name => 'OLTP_SERVICE'
  );
END;
/

				
			

مانیتور کردن Module و Action (روشی برای Developerها)

تنظیم Module در برنامه

				
					BEGIN
  DBMS_APPLICATION_INFO.SET_MODULE(
    module_name => 'PAYMENT_APP',
    action_name => 'INSERT_ORDER'
  );
END;
/

				
			

فعال‌سازی Trace

				
					BEGIN
  DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE(
    client_id => 'PAYMENT_APP',
    waits     => TRUE,
    binds     => TRUE
  );
END;
/

				
			

📌 این روش برای Debug اپلیکیشن‌های Java و NET. فوق‌العاده است.

فایل Trace کجاست؟

پیدا کردن SPID

				
					SELECT p.spid
FROM v$process p
JOIN v$session s ON p.addr = s.paddr
WHERE s.sid = 123;

				
			

نام فایل

				
					ora_<SPID>.trc

				
			

مسیر:

				
					$ORACLE_BASE/diag/rdbms/.../trace/
				
			

تحلیل فایل Trace با TKPROF

				
					tkprof ora_12345.trc output.txt sys=no sort=exeela,fchela

				
			

اطلاعات مهم خروجی:

  • Execution Plan
  • CPU Time
  • Physical Reads
  • Wait Events
  • Bind Variables

سناریوی واقعی از محیط عملیاتی

📌 مشکل: ثبت سفارش کند شده

📌 راه‌حل DBA حرفه‌ای:

  1. Trace روی Service اپلیکیشن
  2. TKPROF
  3. شناسایی SQL بد
  4. Index یا Rewrite Query
  5. حل مشکل بدون Downtime

سوالات متداول درباره پکیج DBMS_MONITOR در اوراکل

پکیجی برای Trace هدفمند Session، SQL و Service در Oracle بدون افت Performance.

بله، اگر محدود و هدفمند استفاده شود کاملاً امن است.

DBMS_MONITOR دقیق‌تر، سبک‌تر و مناسب محیط واقعی است.

جمع‌بندی

DBMS_MONITOR ابزار طلایی Performance Tuning در Oracle

✅ امن برای محیط های عملیاتی

✅ مناسب DBA و Developer

✅ یادگیری آن = یک مهارت سطح بالا

اگر Oracle کار می‌کنی، نباید از DBMS_MONITOR غافل شوی.

سؤالی درباره این مقاله داری؟

اگر نکته‌ای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفت‌وگوی واقعی 💬

برو به صفحه پرسش و پاسخ

میثم راد

من یه برنامه نویسم که حسابی با دیتابیس اوراکل رفیقم! از اونایی ام که تا چیزی رو کامل نفهمم،ول کن نیستم، یادگرفتن برام مثل بازیه، و نوشتن اینجا کمک می کنه تا چیزایی که یاد گرفتم رو با بقیه به شریک بشم، با هم پیشرفت کنیم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *