根据Alert日志查询数据库启动、关闭时间
2016-02-03 22:03
274 查看
alert日志记录oracle实例生命周期中发生的重要事件,例如数据库启动、关闭、日志切换等,方便程序员和管理员发现问题。有时alert日志内容较多,我们很难快速定位我们感兴趣的信息,例如数据库启动时间。今天和大家分享一个利用外部表,根据alert日志查询数据库启动、关闭数据库时间的方法,个人认为非常好用。
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
SQL> show parameter background_dump_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
background_dump_dest string /u01/app/oracle/diag/rdbms/hoegh/HOEGH/trace
SQL>
SQL> create or replace directory data_dir as '/u01/app/oracle/diag/rdbms/hoegh/HOEGH/trace';
Directory created.
SQL>
SQL> CREATE TABLE alert_log
(
text_line varchar2(255)
)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_LOADER
DEFAULT DIRECTORY data_dir
ACCESS PARAMETERS
(
records delimited by newline
fields
)
LOCATION
(
'alert_HOEGH.log'
)
)
reject limit unlimited
/ 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Table created.
SQL>
set pagesize 100
select to_char(last_time,'dd-mon-yyyy hh24:mi') shutdown,
to_char(start_time,'dd-mon-yyyy hh24:mi') startup,
round((start_time-last_time)*24*60,2) mins_down,
round((last_time-lag(start_time) over (order by r)),2) days_up,
case when (lead(r) over (order by r) is null )
then round((sysdate-start_time),2)
end days_still_up
from (
select r,
to_date(last_time, 'Dy Mon DD HH24:MI:SS YYYY') last_time,
to_date(start_time,'Dy Mon DD HH24:MI:SS YYYY') start_time
from (
select r,
text_line,
lag(text_line,1) over (order by r) start_time,
lag(text_line,2) over (order by r) last_time
from (
select rownum r, text_line
from alert_log
where text_line like '___ ___ __ __:__:__ 20__'
or text_line like 'ALTER DATABASE OPEN'
)
)
where text_line like 'ALTER DATABASE OPEN'
)
/SQL> SQL> 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
SHUTDOWN STARTUP MINS_DOWN DAYS_UP DAYS_STILL_UP
-------------------------- -------------------------- ---------- ---------- -------------
13-oct-2014 23:36 13-oct-2014 23:36 .08
13-oct-2014 23:37 13-oct-2014 23:37 .07 0
14-oct-2014 00:13 14-oct-2014 00:13 .07 .03
14-oct-2014 00:16 14-oct-2014 00:16 .07 0
14-oct-2014 00:18 14-oct-2014 00:18 .07 0
14-oct-2014 00:21 14-oct-2014 00:22 .07 0
07-jan-2016 23:00 07-jan-2016 23:00 .07 450.94
08-jan-2016 20:02 08-jan-2016 20:02 .08 .88
08-jan-2016 20:15 08-jan-2016 20:15 .07 .01 26.04
9 rows selected.
SQL>
~~~~~~~ the end~~~~~~~~~
创建转储目录
首先我们创建一个目录,用来指定alert日志的路径。 SQL> select * from v$version;BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
SQL> show parameter background_dump_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
background_dump_dest string /u01/app/oracle/diag/rdbms/hoegh/HOEGH/trace
SQL>
SQL> create or replace directory data_dir as '/u01/app/oracle/diag/rdbms/hoegh/HOEGH/trace';
Directory created.
SQL>
创建外部表
SQL>SQL> CREATE TABLE alert_log
(
text_line varchar2(255)
)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_LOADER
DEFAULT DIRECTORY data_dir
ACCESS PARAMETERS
(
records delimited by newline
fields
)
LOCATION
(
'alert_HOEGH.log'
)
)
reject limit unlimited
/ 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Table created.
SQL>
执行查询
SQL> set linesize 300set pagesize 100
select to_char(last_time,'dd-mon-yyyy hh24:mi') shutdown,
to_char(start_time,'dd-mon-yyyy hh24:mi') startup,
round((start_time-last_time)*24*60,2) mins_down,
round((last_time-lag(start_time) over (order by r)),2) days_up,
case when (lead(r) over (order by r) is null )
then round((sysdate-start_time),2)
end days_still_up
from (
select r,
to_date(last_time, 'Dy Mon DD HH24:MI:SS YYYY') last_time,
to_date(start_time,'Dy Mon DD HH24:MI:SS YYYY') start_time
from (
select r,
text_line,
lag(text_line,1) over (order by r) start_time,
lag(text_line,2) over (order by r) last_time
from (
select rownum r, text_line
from alert_log
where text_line like '___ ___ __ __:__:__ 20__'
or text_line like 'ALTER DATABASE OPEN'
)
)
where text_line like 'ALTER DATABASE OPEN'
)
/SQL> SQL> 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
SHUTDOWN STARTUP MINS_DOWN DAYS_UP DAYS_STILL_UP
-------------------------- -------------------------- ---------- ---------- -------------
13-oct-2014 23:36 13-oct-2014 23:36 .08
13-oct-2014 23:37 13-oct-2014 23:37 .07 0
14-oct-2014 00:13 14-oct-2014 00:13 .07 .03
14-oct-2014 00:16 14-oct-2014 00:16 .07 0
14-oct-2014 00:18 14-oct-2014 00:18 .07 0
14-oct-2014 00:21 14-oct-2014 00:22 .07 0
07-jan-2016 23:00 07-jan-2016 23:00 .07 450.94
08-jan-2016 20:02 08-jan-2016 20:02 .08 .88
08-jan-2016 20:15 08-jan-2016 20:15 .07 .01 26.04
9 rows selected.
SQL>
~~~~~~~ the end~~~~~~~~~
hoegh 2016.02.03
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30162081/viewspace-1986182/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30162081/viewspace-1986182/
相关文章推荐
- mysql按字段根据某条件去重 nohup挂后台无法输出日志 系统时间查询 2016.05.18回顾
- ORA-00257归档日志写满的解决方法 背景: 在前一篇博客中我们提到了如何启动或关闭oracle的归档(ARCHIVELOG)模式,在我成功设定数据库为归档模式以后, 第二天再次尝试连接数据库,
- 查询数据库表 根据时间排序
- 数据库管理员复习日志-数据库启动和关闭
- 在数据库中(Oracle),根据时间查询数据: to_date()和to_char()函数
- 用外部表的方式查询当天数据库alert日志文件
- 定时发邮件(ASP.net中每隔一定时间查询数据库表,并根据表里面的条件发送邮件)
- 从alert日志中看数据库启动数据启动的三个过程
- ALERT 日志显示后台进程 CJQ0 定期启动关闭
- 用外部表的方式查询当天数据库alert日志文件中当天所有的ora-错误信息
- 根据查询条件开始时间、结束时间查询数据库,并且数据库中也包含开始时间、结束时间字段
- Jeesite4根据数据库某个时间列分段查询
- 根据数据库中时间查询的操作
- 根据时间排序分页查询导致部分数据丢失原因
- 查看应用冷启动时间,通过日志查看
- 数据库复杂查询,左联右联 聚合 计数 时间查询等,持续更新
- Oracle 数据库实例启动关闭过程
- Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
- laydate根据时间粒度自由控制组件显示查询
- 数据库启动和关闭