
اگر مدیر پایگاه داده Oracle باشید، احتمالاً بارها برایتان پیش آمده که بخواهید بدانید همین الان چه Queryهایی در دیتابیس در حال اجرا هستند. این بررسی هنگام کند شدن دیتابیس، شناسایی Queryهای طولانی، پیدا کردن Sessionهای فعال و تشخیص Lock بسیار کاربردی است.
پیشنهاد می کنم این مقاله زیر رو حتما مطالعه کنی.
در این مقاله شما می خوانید
فایل Alert Log (که معمولاً با نام alert_<SID>.log شناخته میشود) یک فایل متنی است که رویدادهای حیاتی دیتابیس را به ترتیب زمان (Chronological) ثبت میکند.
- زمان دقیق روشن (Startup) و خاموش (Shutdown) شدن دیتابیس.
- تغییرات ساختاری مهم (مثل ساخت Tablespace جدید یا تغییر سایز فایلها).
- خطاهای داخلی و بحرانی اوراکل (مثل ORA-00600 یا ORA-07445).
- هشدارهای پر شدن فضا (مثل پر شدن Archive Logها).
- خرابی بلاکهای دیتا (Block Corruption).
💡 نکته: اولین کاری که یک DBA حرفهای صبحها یا بعد از هر بار ریاستارت سرور انجام میدهد، چک کردن ۵۰ خط آخر این فایل است. این کار جلوی بسیاری از فاجعهها را میگیرد!
مسیر فایل Alert Log در اوراکل کجاست؟
از نسخه ۱۱g به بعد، اوراکل تمام فایلهای لاگ و عیبیابی را در ساختاری منظم به نام ADR (مخفف Automatic Diagnostic Repository) ذخیره میکند.
برای اینکه دقیقاً بفهمید این فایل کجای سرور شما پنهان شده، کافی است وارد SQL*Plus شوید و این کوئری ساده را اجرا کنید:
SELECT value FROM v$diag_info WHERE name = 'Diag Trace';
/u01/app/oracle/diag/rdbms/mydb/mydb/trace/alert_mydb.log۳ روش طلایی برای مشاهده Alert Log در Oracle
بسته به اینکه به سرور دسترسی مستقیم دارید یا فقط از طریق دیتابیس وصل هستید، سه راه عالی پیش پای شماست:
۱. روش اول: استفاده از ترمینال لینوکس (سریعترین و محبوبترین راه)
- دیدن ۱۰۰ خط آخر:
tail -n 100 alert_<SID>.log - مشاهده زنده و لحظهای (مثل فیلم دیدن!):
tail -f alert_<SID>.log
(این دستور را هنگام انجام عملیات حساس مثل بکاپگیری یا آپگرید باز بگذارید تا هر خطایی بلافاصله ظاهر شود). - جستجوی هوشمند خطاها:
grep "ORA-" alert_<SID>.log
۲. روش دوم: استفاده از ابزار قدرتمند ADRCI (روش استاندارد اوراکل)
adrci
adrci> SHOW HOMES
adrci> SET HOMEPATH=diag/rdbms/mydb/mydb
adrci> SHOW ALERT -TAIL 50
adrci> SHOW ALERT -TAIL -F
۳. روش سوم: کوئری زدن از داخل SQL (مناسب گزارشگیری)
V$DIAG_ALERT_EXT در اختیار شما گذاشته است:
SELECT originating_timestamp, message_text
FROM v$diag_alert_ext
ORDER BY originating_timestamp DESC
FETCH FIRST 20 ROWS ONLY;
SELECT originating_timestamp, message_text
FROM v$diag_alert_ext
WHERE message_text LIKE '%ORA-01555%'
ORDER BY originating_timestamp DESC;
شکار خطاها: مهمترین کدهای خطای ORA که باید بشناسید
وقتی در حال خواندن Alert Log هستید، چشمتان باید مثل عقاب دنبال کلمه ORA- بگردد.
اینها مهمترینهایی هستند که باید جدی بگیرید:
| اولین اقدام | مفهوم | کد خطا |
|---|---|---|
| استخراج Trace File و ارسال تیکت به پشتیبانی اوراکل. | خطای داخلی هسته اوراکل (معمولاً باگ نرمافزاری). | ORA-00600 |
| بررسی منابع سرور (RAM/CPU) و فایلهای Trace. | کرش کردن یک پروسه در سطح سیستم عامل. | ORA-07445 |
| بکاپگیری یا حذف آرشیو لاگهای قدیمی با RMAN. | گیر کردن Archiver (فضای آرشیو لاگ پر شده است). | ORA-00257 |
| افزایش سایز Tablespace Undo یا بهینهسازی کوئریهای طولانی. | خطای Snapshot too old (اطلاعات Undo پاک شده). | ORA-01555 |
| استفاده از قابلیت Block Media Recovery در RMAN. | خرابی فیزیکی بلاک دیتا (Block Corruption). | ORA-01578 |
۴ نکته طلایی و تجربی در مورد Alert Log
۱. هرگز، هرگز فایل Alert Log را دستی پاک نکنید!
alert_20260822.log) و یک فایل جدید میسازد. پاک کردن دستی آن ممکن است باعث گیج شدن فرآیندهای داخلی اوراکل شود.۲. فایل XML را دستکم نگیرید:
trace، یک فایل به نام log.xml هم وجود دارد.۳. هشدار خودکار بسازید:
۴. Trace Fileها دوستان Alert Log هستند:
Errors in file /path/to/trace/file.trc. آن فایل .trc حاوی جزئیات فنی عمیقی است که برای حل معما به آن نیاز دارید.سوالات متداول درباره Alert Log در Oracle
در نسخههای مدرن اوراکل (مانند ۱۲c، ۱۹c و ۲۱c)، فایل Alert Log در ساختار ADR ذخیره میشود.
سریعترین راه برای پیدا کردن مسیر دقیق، اجرای کوئری زیر در محیط SQL*Plus است:
SELECT value FROM v$diag_info WHERE name = 'Diag Trace';
خروجی این دستور، مسیر کاملی شبیه به /u01/app/oracle/diag/rdbms/<db_name>/<instance_name>/trace/alert_<SID>.log را به شما نشان میدهد.
دیگر نیازی به جستجوی دستی در پوشههای سرور نیست!
برای مانیتورینگ لحظهای و دیدن خطاها در همان ثانیهای که رخ میدهند، بهترین و سبکترین دستور در لینوکس، استفاده از tail با فلگ -f است.
کافی است در ترمینال سرور دستور زیر را اجرا کنید:tail -f /مسیر/دقیق/alert_<SID>.log
با این کار، ترمینال باز میماند و هر خط جدیدی که به فایل لاگ اضافه شود، بلافاصله روی صفحه نمایش داده میشود. برای خروج از این حالت، کافی است کلیدهای Ctrl + C را فشار دهید.
این خطا یعنی فضای اختصاصیافته به Archive Logها پر شده و دیتابیس نمیتواند تراکنشهای جدید را ثبت کند (یک وضعیت اضطراری رایج!).
سریعترین راه حل این است که وارد محیط RMAN شوید و آرشیو لاگهای قدیمی که قبلاً بکاپ گرفتهاید را پاک کنید:
rman target /
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE ‘SYSDATE-7’;
این دستور، آرشیو لاگهای قدیمیتر از ۷ روز را حذف کرده و فضای حیاتی دیتابیس را فوراً آزاد میکند.
خیر، هرگز این کار را نکنید! پاک کردن دستی فایل alert_<SID>.log با دستور rm در لینوکس، اگرچه دیتابیس را فوراً کرش نمیکند، اما میتواند باعث گیج شدن پروسههای پسزمینه اوراکل (Background Processes) شود، زیرا آنها همچنان سعی میکنند در فایل حذفشده بنویسند.
خبر خوب این است که اوراکل به صورت خودکار و هوشمند، وقتی حجم این فایل به حد مشخصی (معمولاً ۱۰ مگابایت) میرسد، آن را Rename کرده (مثلاً alert_20260822.log) و یک فایل جدید و خالی میسازد.
پس با خیال راحت اجازه دهید اوراکل مدیریت آن را بر عهده بگیرد.
جمعبندی
یادگیری دستور مشاهده Alert Log در Oracle و تسلط بر ابزارهایی مثل ADRCI، مرز بین یک کاربر معمولی و یک مدیر پایگاه داده (DBA) حرفهای است.
این فایل، صدای دیتابیس شماست؛ کافی است یاد بگیرید چطور به آن گوش دهید تا قبل از وقوع فاجعه، جلوی آن را بگیرید.
سؤالی درباره این مقاله داری؟
اگر نکتهای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفتوگوی واقعی 💬
برو به صفحه پرسش و پاسخ
دیدگاهتان را بنویسید