诊断Oraacle数据库Hanging问题
2007-05-07 12:07:40 来源:WEB开发网核心提示: 如果正常的关闭或者immediate关闭挂起,那么意味着Oracle正在等待激活的会话退出,诊断Oraacle数据库Hanging问题(6),在Unix系统上,还可以寻找正在挂起的启动或者关闭操作,输出查看相关的V$视图当数据库挂起的时候,执行下面的查询:SPOOL v_views.log
如果正常的关闭或者immediate关闭挂起,那么意味着Oracle正在等待激活的会话退出。
在Unix系统上,还可以寻找正在挂起的启动或者关闭操作,然后trace pid。
寻找错误:
1) 检查AlertSID.log告警日志文件看看是否存在错误信息,此告警日志文件的具体路径位置可以由初始化参数中的background_dump_dest中获得或者在sqlplus中执行show parameter dest获得。
2) 检查上述目录中的在数据库挂起时间生成的跟踪文件。查看里面的错误信息,不用搜索整个跟踪文件,相关的错误信息一般都是在文件的最开始出现。
3) 如果是远程访问的问题,那么还需要检查sql*net跟踪目录下的跟踪文件。
4) 检查系统信息的错误日志,在大多数的Unix下都是在/var/adm目录下。
输出查看相关的V$视图
当数据库挂起的时候,执行下面的查询:
SPOOL v_views.log;
SELECT *
FROM v$parameter;
SELECT class, value, name
FROM v$sysstat;
SELECT sid, id1, id2, type, lmode, request
FROM v$lock;
SELECT l.latch#, n.name, h.pid, l.gets, l.misses,
l.immediate_gets, l.immediate_misses, l.sleeps
FROM v$latchname n, v$latchholder h, v$latch l
WHERE l.latch# = n.latch#
AND l.addr = h.laddr(+);
SELECT *
FROM v$session_wait
ORDER BY sid;
/* 重复最后一个查询最少三遍,以确定哪个在重复等待*/
SPOOL OFF;
如果是指定的查询被挂起了,可以使用下面的查询找出相应的查询SQL语句:
通过操作系统上的PID找出相应的SQL语句的SID:
SELECT s.sid, p.spid
FROM v$session s, v$process p
WHERE s.paddr = p.addr
AND ... < p.spid = <os pid> or perhaps
s.sid = <sid from v$session> >
然后通过SID找出相应的SQL语句的具体内容:
SELECT s.sid, s.status, q.sql_text
FROM v$session s, v$sqltext q
WHERE s.sql_hash_value = q.hash_value
AND s.sql_address = q.address
AND s.sid = <sid>
order by q.piece;
更多精彩
赞助商链接