Oracle
監控警報日誌文件
我必須為警報日誌文件生成自動化腳本,該腳本將顯示警報日誌文件的內容。這是腳本。
while : clear do echo "\n" echo "ORA - Error" echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" sed -n "/ORA-/p" "alert log fiel path" sleep 4 clear
我的問題是我得到了所有的錯誤。我只想要今天發生的錯誤。我怎樣才能做到這一點?
- 如果您使用的是Oracle 11g或更高版本:
從 11g Oracle 開始,引入了一個固定表X$DBGALERTEXT,您可以從中檢索 alert.log 所做的所有數據。這是一個簡單的查詢,可以檢索今天發生的所有錯誤,如您所願。
SET linesize 200 pagesize 200 col RECORD_ID FOR 9999999 head ID col MESSAGE_TEXT FOR a120 head Message SELECT record_id, message_text FROM X$DBGALERTEXT WHERE originating_timestamp > systimestamp - 1 AND regexp_like(message_text, '(ORA-|error)')
正如 Twinkles 在他的回答中提到的,您可以利用ADRCI實用程序來選擇您需要的警報過濾器(實際上,該實用程序會針對X$DBGALERTEXT表進行查詢)。例如,您可以建構一個簡單的函式並從作業系統提示符呼叫它:
vealert() { adrci exec="set home diag\/rdbms\/$DB_UNIQUE_NAME/$ORACLE_SID\; \ show alert -p \\\"message_text like '%ORA-%' \ and originating_timestamp > systimestamp - $1\\\"" }
在文件**.bashrc**中,例如:
export DB_UNIQUE_NAME=<unique_name> . $HOME/bin/vealert
然後:
bash vealert 1 .. Tue Dec 24 17:46:05 2013 ORA-28 signalled during: ALTER TABLESPACE DATA_APP_199903 READ ONLY... ..
- 否則:
去看看這個網頁。有一個腳本可用於檢查目前警報日誌文件中是否存在任何 ORA 錯誤。
要安排此作業,您可以在 cron 表中添加一行,指定您希望作業執行的時間。或者,您可以利用 Oracle 調度程序。
如果您使用的是 Oracle 11g 或更高版本,請考慮改用ADRCI實用程序。