It is not really a novum that you can directly query the alertlog from SQLPlus. Tanel Poder and others already have discussed this a while ago. Somehow I can never remember the name of the X$ view when I need it. So it is time to sum up the information a little bit.
SQL> desc X$DBGALERTEXT Name Null? Type ---------------------------- -------- --------------------------- 1 ADDR RAW(8) 2 INDX NUMBER 3 INST_ID NUMBER 4 CON_ID NUMBER 5 ORIGINATING_TIMESTAMP TIMESTAMP(3) WITH TIME ZONE 6 NORMALIZED_TIMESTAMP TIMESTAMP(3) WITH TIME ZONE 7 ORGANIZATION_ID VARCHAR2(64) 8 COMPONENT_ID VARCHAR2(64) 9 HOST_ID VARCHAR2(64) 10 HOST_ADDRESS VARCHAR2(46) 11 MESSAGE_TYPE NUMBER 12 MESSAGE_LEVEL NUMBER 13 MESSAGE_ID VARCHAR2(64) 14 MESSAGE_GROUP VARCHAR2(64) 15 CLIENT_ID VARCHAR2(64) 16 MODULE_ID VARCHAR2(64) 17 PROCESS_ID VARCHAR2(32) 18 THREAD_ID VARCHAR2(64) 19 USER_ID VARCHAR2(64) 20 INSTANCE_ID VARCHAR2(64) 21 DETAILED_LOCATION VARCHAR2(160) 22 PROBLEM_KEY VARCHAR2(550) 23 UPSTREAM_COMP_ID VARCHAR2(100) 24 DOWNSTREAM_COMP_ID VARCHAR2(100) 25 EXECUTION_CONTEXT_ID VARCHAR2(100) 26 EXECUTION_CONTEXT_SEQUENCE NUMBER 27 ERROR_INSTANCE_ID NUMBER 28 ERROR_INSTANCE_SEQUENCE NUMBER 29 VERSION NUMBER 30 MESSAGE_TEXT VARCHAR2(2048) 31 MESSAGE_ARGUMENTS VARCHAR2(512) 32 SUPPLEMENTAL_ATTRIBUTES VARCHAR2(512) 33 SUPPLEMENTAL_DETAILS VARCHAR2(4000) 34 PARTITION NUMBER 35 RECORD_ID NUMBER
A simple query to get the alert log messages and timestamp would look like.
set linesize 160 pagesize 200 col RECORD_ID for 9999999 head ID col ORIGINATING_TIMESTAMP for a20 head Date col MESSAGE_TEXT for a120 head Message select record_id, to_char(originating_timestamp,'DD.MM.YYYY HH24:MI:SS'), message_text from x$dbgalertext;
For daily use I’ve put together two scripts.
- tal.sql list all or some alert log messages. Messages will be filtered by the parameter
- taln.sql list the last n numbers of rows in an alert log.
Write into the alertlog
The procedure kdswrt in dbms_system package allows us to write own messages in the alert log / trace files or both. It receives two parameters:
- A number that indicates where do we want to write our message
- Writing to a TRACE file
- Writing to the Alert.log file
- Writing to both of them
- A text string (the message itself).
exec dbms_system.ksdwrt(2, 'ORA-00042: Test message in alert log.');
Query the Alertlog
List the last 10 lines in the alert log.
SQL> @taln 10 SQL> @taln 10 ID Date Message -------- -------------------- ---------------------------------------------------------------------- 4333 23.07.2013 22:00:47 Thread 1 advanced to log sequence 94 (LGWR switch) 4334 23.07.2013 22:00:47 Current log# 1 seq# 94 mem# 0: /u00/oradata/TDB01/redog1m1TDB01.dbf 4335 23.07.2013 22:00:47 Current log# 1 seq# 94 mem# 1: /u01/oradata/TDB01/redog1m2TDB01.dbf 4336 23.07.2013 22:00:47 Archived Log entry 111 added for thread 1 sequence 93 ID 0xa3d43dfa... 4337 24.07.2013 02:00:00 Closing scheduler window 4338 24.07.2013 02:00:00 Closing Resource Manager plan via scheduler window 4339 24.07.2013 02:00:00 Clearing Resource Manager plan via parameter 4340 24.07.2013 03:38:21 VKTM detected a time drift. Please check trace file for more details. 4341 24.07.2013 09:18:38 VKTM detected a time drift. Please check trace file for more details. 4342 24.07.2013 14:50:05 ORA-00042: Test Message in alert log 10 rows selected.
Query the alert log string ORA-00042.
SQL> @tal ORA-00042 ID Date Message -------- -------------------- ------------------------------------------- 4342 24.07.2013 14:50:05 ORA-00042: Test Message in alert log Filter on alert log message => ORA-00042
Other fixed tables
There are bunch of other X$ Fixed Tables. At lease the following are somehow related to the ADR
- X$DBGDIREXT list all file and directory names under diagnostic_dest/diag directory. Will be quite a lot on a shared DB server
- X$DBGRICX list of ADR Incidents
References
Some links related to this post.
- tal.sql list all or some alert log messages. Messages will be filtered by the parameter
- taln.sql list the last n numbers of rows in an alert log.
- How To Edit, Read, and Query the Alert.Log [1072547.1]
- How To Test The Generic Alert Log Error Metric on 10g [850320.1]
- Tanel Poder Oracle 11g: Reading alert log via SQL