暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
oracle数据库故障时首先要用到的10个语句 (1).txt
289
4页
22次
2022-12-08
免费下载
数据库运行慢,hang 住,然后被局方各种“夺命连环 call”....这样的场景对于 Oracle DBA 来说太熟悉了,
只要应用一出问题,不论何时,不论何地,总是第一个接到电话,严重情况下会是一轮电话轰炸。
那么,这个时候不要慌,下面这 10 个步骤和 sql 语句可以帮你找到问题并初步解决:
1、查看操作系统负载
登上数据库服务器后,第一个就是通过系统命令确认下 CPU、内存、I/O 是否异常,每个系统的命令不一
样,常见的有 toptopasAIX)、vmstatiostat
2、查看等待事件
第二步就是连到数据库查看活动的等待事件,这是监控、巡检、诊断数据库最基本的手段,通常 81%的问
题都可以通过等待事件初步定为原因,它是数据库运行情况最直接的体现,如下脚本是查看每个等待事件的个
数、等待时长,并排除了一些常见的 IDLE 等待事件。
--wait_event
col event for a45
SELECT inst_id,EVENT, SUM(DECODE(WAIT_TIME, 0, 0, 1)) "Prev",
SUM(DECODE(WAIT_TIME, 0, 1, 0)) "Curr", COUNT(*) "Tot" , sum(SECONDS_IN_WAIT)
SECONDS_IN_WAIT
FROM GV$SESSION_WAIT
WHERE event NOT
IN ('smon timer','pmon timer','rdbms ipc message','SQL*Net message from
client','gcs remote message')
AND event NOT LIKE '%idle%'
AND event NOT LIKE '%Idle%'
AND event NOT LIKE '%Streams AQ%'
GROUP BY inst_id,EVENT
ORDER BY 1,5 desc;
这里就需要掌握一些常见异常等待事件的原因,并形成条件反射,比如 library cache lockread by
other sessionrow cache lockbuffer busy waitslatch:shared poolgc buffer
busycursor: pin S on Xdirect path readlog file syncenq: TX - index
contentionPX Deq Credit: send blkdlatch freeenq: TX - row lock contention
等,如果异常等待事件的个数和等待时间很长,那么排查原因的入口就在这里。
3、根据等待事件查会话
得到异常等待事件之后,我们就根据等待事件去查会话详情,也就是查看哪些会话执行哪些 SQL 在等待,
另外还可查出来用户名和机器名称,以及是否被阻塞。如下脚本可改写成根据用户查会话、根据 SQL_ID 查会
话等等。
--session_by_event
SELECT /*+rule */ sid, s.serial#, spid, event, sql_id, seconds_in_wait ws,
row_wait_obj# obj,
s.username, s.machine, BLOCKING_INSTANCE||'.'||blocking_session b_sess
FROM v$session s, v$process p
WHERE event='&event_name' AND s.paddr = p.addr order by 6;
这时会提示:Enter value for event_name: ----输入等待事件的名称
4、查询某个会话详情
得到会话列表之后,可以根据如下 SQL 查询某个会话的详细信息,如上次个执行的 SQL_ID,登录时间等,
SQL 也可改写成多个。
--session_by_sid
SELECT s.sid, s.serial#, spid, event, sql_id, PREV_SQL_ID, seconds_in_wait ws,
row_wait_obj# obj,
s.username, s.machine, module,blocking_session b_sess,logon_time
FROM v$session s, v$process p
WHERE sid = '&sid' AND s.paddr = p.addr;
脚本会提示:Enter value for sid: ----输入要查看的 sid
5、查询对象信息
从前面两个 SQL 都可以看到会话等待的对象 ID,可以通过如下 SQL 查询对象的详细信息。
--obj_info
col OBJECT_NAME for a30
select owner,object_name,subobject_name,object_type
from dba_objects
where object_id=&oid;
脚本会提示:Enter value for oid---输入的 oid 也就是 object_id
6、查询 SQL 语句
根据 SQL_IDHASH_VALUE 查询 SQL 语句。如果 v$sqlarea 中查不到,可以尝试 DBA_HIST_SQLTEXT
视图中查询。
--sql_text
select sql_id,SQL_fullTEXT
from v$sqlarea
where (sql_id='&sqlid' or hash_value=to_number('&hashvale') )
and rownum<2;
脚本会提示:Enter value for sqlid: ---输入查到的 sql_id
7、查询会话阻塞情况
通过如下 SQL 查询某个会话阻塞了多少个会话。
---blocking_session
select count(*),blocking_session
from v$session
where blocking_session is not null
group by blocking_session;
8、查询数据库的锁
通过如下 SQL 查询某个会话的锁,有哪些 TMTX 锁,以及会话和锁关联查询的 SQL,注意这里指定了
ctime 大于 100 秒的情况,据统计,30%的情况是人为误操作锁表,导致应用 SQL 被阻塞,无法运行。
of 4
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜