怎么用shell 获取alert_sid.log 中的一段错误信息呢,看下面的脚本:
$1 参数是指alert_sid 日志,$2 参数是指要截取 alert_sid.log末尾多少行数据,默认是截取末尾1000行
脚本的大致思路是:把截取的日志先存到TMP2 文件中,然后从TMP2中每一行的获取,判断当前行是不是 日期行(从alert_sid.log 日志中观察,记录每段日志的时候总是有一行是记录当前的日期时间的)如果是,就把前一行重定向到tmp1文件中,并中tmp1文件grep出是否有错误,如果有,就屏幕输出并清空tmp1文件,没有就直接清空tmp1文件;如果当前行不是日期行,就直接把前一行直接重定向到tmp1文件中;
以下是测试结果:
[root@ALL geterror]# sh geterror3.sh alert_sbqz.log 50
Sun Jun 03 10:00:51 2012
Errors in file /oracle/app/oracle/diag/rdbms/sbqz/sbqz/trace/sbqz_j000_10127.trc:
ORA-12012: error on auto execute of job 89514
ORA-00376: file 10 cannot be read at this time
ORA-01110: data file 10: '/oracle/oradata/sbqz/USER_DATA.5.dbf'
ORA-06512: at "SYS.DBMS_ADVISOR", line 201
ORA-06512: at "SYS.DBMS_SPACE", line 1619
ORA-06512: at "SYS.DBMS_SPACE", line 1871
Sun Jun 03 10:05:46 2012
Errors in file /oracle/app/oracle/diag/rdbms/sbqz/sbqz/trace/sbqz_smon_6462.trc:
ORA-00376: file 23 cannot be read at this time
ORA-01110: data file 23: '/oracle/oradata/sbqz/undotbs02.dbf'
Errors in file /oracle/app/oracle/diag/rdbms/sbqz/sbqz/trace/sbqz_smon_6462.trc:
ORA-00376: file 23 cannot be read at this time
ORA-01110: data file 23: '/oracle/oradata/sbqz/undotbs02.dbf'
Errors in file /oracle/app/oracle/diag/rdbms/sbqz/sbqz/trace/sbqz_smon_6462.trc:
ORA-00376: file 23 cannot be read at this time
ORA-01110: data file 23: '/oracle/oradata/sbqz/undotbs02.dbf'
Errors in file /oracle/app/oracle/diag/rdbms/sbqz/sbqz/trace/sbqz_smon_6462.trc:
ORA-00376: file 23 cannot be read at this time
ORA-01110: data file 23: '/oracle/oradata/sbqz/undotbs02.dbf'
Errors in file /oracle/app/oracle/diag/rdbms/sbqz/sbqz/trace/sbqz_smon_6462.trc:
ORA-00376: file 23 cannot be read at this time
ORA-01110: data file 23: '/oracle/oradata/sbqz/undotbs02.dbf'
Sun Jun 03 10:06:00 2012
Errors in file /oracle/app/oracle/diag/rdbms/sbqz/sbqz/trace/sbqz_smon_6462.trc:
ORA-00376: file 23 cannot be read at this time
ORA-01110: data file 23: '/oracle/oradata/sbqz/undotbs02.dbf'
Sun Jun 03 14:01:05 2012
Errors in file /oracle/app/oracle/diag/rdbms/sbqz/sbqz/trace/sbqz_j002_24418.trc:
ORA-12012: error on auto execute of job 89516
ORA-00376: file 10 cannot be read at this time
ORA-01110: data file 10: '/oracle/oradata/sbqz/USER_DATA.5.dbf'
ORA-06512: at "SYS.DBMS_ADVISOR", line 201
ORA-06512: at "SYS.DBMS_SPACE", line 1619
ORA-06512: at "SYS.DBMS_SPACE", line 1871
Sun Jun 03 14:01:10 2012
GATHER_STATS_JOB encountered errors. Check the trace file.
Errors in file /oracle/app/oracle/diag/rdbms/sbqz/sbqz/trace/sbqz_j000_24414.trc:
ORA-00604: error occurred at recursive SQL level 2
ORA-00376: file 23 cannot be read at this time
ORA-01110: data file 23: '/oracle/oradata/sbqz/undotbs02.dbf'
Sun Jun 03 14:11:11 2012
Errors in file /oracle/app/oracle/diag/rdbms/sbqz/sbqz/trace/sbqz_smon_6462.trc:
ORA-00376: file 23 cannot be read at this time
ORA-01110: data file 23: '/oracle/oradata/sbqz/undotbs02.dbf'
[root@ALL geterror]#