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

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

دستور مشاهده Alert Log در Oracle؛ راهنمای بررسی خطاهای دیتابیس

تا حالا شده دیتابیس اوراکل شما ناگهان کند شود یا یک ارور عجیب روی صفحه اپلیکیشن ظاهر شود و ندانید از کجا شروع کنید؟ 
در دنیای مدیریت پایگاه داده اوراکل، Alert Log همان «جعبه سیاه» هواپیماست.
هر اتفاقی که در دیتابیس می‌افتد، از روشن شدن سیستم گرفته تا کوچک‌ترین خطاهای داخلی، در این فایل ثبت می‌شود.
در این مقاله آموزش اوراکل، قرار است با زبانی ساده و کاملاً عملی، یاد بگیرید که چطور مثل یک حرفه‌ای این فایل را پیدا کنید، بخوانید و خطاهای سیستمی دیتابیس را شکار کنید.

اگر مدیر پایگاه داده 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

بسته به اینکه به سرور دسترسی مستقیم دارید یا فقط از طریق دیتابیس وصل هستید، سه راه عالی پیش پای شماست:

۱. روش اول: استفاده از ترمینال لینوکس (سریع‌ترین و محبوب‌ترین راه)

اگر دسترسی SSH به سرور لینوکسی دارید، این روش بهترین گزینه برای مانیتورینگ لحظه‌ای است.
  • دیدن ۱۰۰ خط آخر:
    tail -n 100 alert_<SID>.log
  • مشاهده زنده و لحظه‌ای (مثل فیلم دیدن!):
    tail -f alert_<SID>.log
    (این دستور را هنگام انجام عملیات حساس مثل بکاپ‌گیری یا آپگرید باز بگذارید تا هر خطایی بلافاصله ظاهر شود).
  • جستجوی هوشمند خطاها:
    grep "ORA-" alert_<SID>.log

۲. روش دوم: استفاده از ابزار قدرتمند ADRCI (روش استاندارد اوراکل)

اگر نمی‌خواهید درگیر پیدا کردن مسیر فایل در سیستم عامل شوید، ابزار ADRCI نجات‌دهنده شماست.
این ابزار مستقیماً با ساختار ADR صحبت می‌کند.
کافی است در خط فرمان (Command Line) مراحل زیر را طی کنید:
				
					adrci

adrci> SHOW HOMES
adrci> SET HOMEPATH=diag/rdbms/mydb/mydb
adrci> SHOW ALERT -TAIL 50
adrci> SHOW ALERT -TAIL -F
				
			

۳. روش سوم: کوئری زدن از داخل SQL (مناسب گزارش‌گیری)

اگر فقط به محیط دیتابیس دسترسی دارید و نمی‌توانید به سیستم عامل سرور بروید، نگران نباشید!
اوراکل یک ویو (View) فوق‌العاده به نام 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 را دستی پاک نکنید!

اوراکل به صورت هوشمند وقتی حجم این فایل به حد مشخصی (مثلاً ۱۰ مگابایت) برسد، خودش آن را Rename می‌کند (مثلاً alert_20260822.log) و یک فایل جدید می‌سازد. پاک کردن دستی آن ممکن است باعث گیج شدن فرآیندهای داخلی اوراکل شود.

۲. فایل XML را دست‌کم نگیرید:

در همان پوشه trace، یک فایل به نام log.xml هم وجود دارد.
این فایل همان اطلاعات را به صورت ساختاریافته (XML) نگه می‌دارد و برای اتصال به ابزارهای مانیتورینگ مثل Zabbix یا Prometheus عالی است.

۳. هشدار خودکار بسازید:

در محیط‌های واقعی (Production)، هیچ DBAای هر روز دستی لاگ را چک نمی‌کند! با استفاده از Oracle Enterprise Manager (OEM) یا یک اسکریپت ساده Shell، تنظیم کنید که به محض ظاهر شدن کلمه “ORA-“ در لاگ، برایتان ایمیل یا پیامک ارسال شود.

۴. Trace Fileها دوستان Alert Log هستند:

هرگاه در 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) حرفه‌ای است.

این فایل، صدای دیتابیس شماست؛ کافی است یاد بگیرید چطور به آن گوش دهید تا قبل از وقوع فاجعه، جلوی آن را بگیرید.

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

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

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

میثم راد

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

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

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