一般情況下會發生Ora-04021錯誤

1.被鎖住

查看v$locked

select b.sid,b.serial#,b.machine,b.terminal,b.program,b.process,b.status

from v$lock a , v$session b

where a.SID = b.SID

得到死鎖session的SID,SERIAL#參看這個是否為你自己用戶下的,然后kill掉session----Alter system kill session 'SID,SERIAL#'

2、被掛起

查看v$session_wait

select b.serial#,a.* from v$session_wait a,v$session b where a.sid=b.sid

得到等待的session的sid和serial#

3、查看dba_ddl_locks

select session_id sid, owner, name, type,mode_held held, mode_requested request

from dba_ddl_locks

where name = '&your_package_name'

另外可以使用hanganalyze

數據庫在hang住的情況下,我們通常通過查詢v$session_wait和v$lock視圖找到相應的等待事件,但使用hanganalyze同樣能得到這些信息.如下我們通過使用hangalyze獲取到兩個會話更新同一行數據的等待事件情況.

1.session1更新行數據

SQL> connect scott/scott

Connected.

SQL> create table tb_hang(id number,remark varchar2(20));

Table created.

SQL> insert into tb_hang values(1,'test');

1 row created.

SQL> commit;

Commit complete.

SQL> select USERENV('sid') from dual;

USERENV('SID')

--------------

146

SQL> update tb_hang set remark='hang' where id=1;

1 row updated.

這個時候不提交

2.session2同樣更新session1更新的行

SQL> select USERENV('sid') from dual;

USERENV('SID')

--------------

154

SQL> update tb_hang set remark='hang' where id=1;

這個時候已經hang住了

3.session3使用hangalyze生成trace文件

SQL> connect / as sysdba

Connected.

SQL> oradebug hanganalyze 3;

Hang Analysis in /u01/app/oracle/admin/oracl/udump/oracl_ora_3941.trc

4.查看trace文件的內容

[oracle@hxl ~]$ more /u01/app/oracle/admin/oracl/udump/oracl_ora_3941.trc

/u01/app/oracle/admin/oracl/udump/oracl_ora_3941.trc

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1

System name: Linux

Node name: hxl

Release: 2.6.18-8.el5xen

Version: #1 SMP Fri Jan 26 14:42:21 EST 2007

Machine: i686

Instance name: oracl

Redo thread mounted by this instance: 1

Oracle process number: 21

Unix process pid: 3941, image:oracle@hxl(TNS V1-V3)

*** SERVICE NAME:(SYS$USERS) 2012-06-16 01:13:29.241

*** SESSION ID:(144.14) 2012-06-16 01:13:29.241

*** 2012-06-16 01:13:29.241

==============

HANG ANALYSIS:

==============

Open chains found:

Chain 1 : :

<0/146/5/0x7861b254/3858/SQL*Net message from client>

-- <0/154/5/0x7861c370/3903/enq: TX - row lock contention>

Other chains found:

Chain 2 : :

<0/144/14/0x7861d48c/3941/No Wait>

Chain 3 : :

<0/149/1/0x7861ced8/3806/Streams AQ: waiting for time man>

Chain 4 : :

<0/151/1/0x7861c924/3804/Streams AQ: qmn coordinator idle>

Chain 5 : :

<0/158/5/0x7861da40/3810/Streams AQ: qmn slave idle wait>

Extra information that will be dumped at higher levels:

[level 4] : 1 node dumps -- [REMOTE_WT] [LEAF] [LEAF_NW]

[level 5] : 4 node dumps -- [SINGLE_NODE] [SINGLE_NODE_NW] [IGN_DMP]

[level 6] : 1 node dumps -- [NLEAF]

[level 10] : 13 node dumps -- [IGN]

State of nodes

([nodenum]/cnode/sid/sess_srno/session/ospid/state/start/finish/[adjlist]/predec

essor):

[143]/0/144/14/0x786fa3dc/3941/SINGLE_NODE_NW/1/2//none

[145]/0/146/5/0x786fc944/3858/LEAF/3/4//153

[148]/0/149/1/0x78700160/3806/SINGLE_NODE/5/6//none

[150]/0/151/1/0x787026c8/3804/SINGLE_NODE/7/8//none

[153]/0/154/5/0x78705ee4/3903/NLEAF/9/10/[145]/none

[154]/0/155/1/0x78707198/3797/IGN/11/12//none

[155]/0/156/1/0x7870844c/3799/IGN/13/14//none

[157]/0/158/5/0x7870a9b4/3810/SINGLE_NODE/15/16//none

[159]/0/160/1/0x7870cf1c/3782/IGN/17/18//none

[160]/0/161/1/0x7870e1d0/3784/IGN/19/20//none

[161]/0/162/1/0x7870f484/3788/IGN/21/22//none

[162]/0/163/1/0x78710738/3786/IGN/23/24//none

[163]/0/164/1/0x787119ec/3774/IGN/25/26//none

[164]/0/165/1/0x78712ca0/3780/IGN/27/28//none

[165]/0/166/1/0x78713f54/3778/IGN/29/30//none

[166]/0/167/1/0x78715208/3776/IGN/31/32//none

[167]/0/168/1/0x787164bc/3770/IGN/33/34//none

[168]/0/169/1/0x78717770/3772/IGN/35/36//none

[169]/0/170/1/0x78718a24/3768/IGN/37/38//none

====================

END OF HANG ANALYSIS

====================

說明:

1.trace中最重要的部分

State of nodes

([nodenum]/cnode/sid/sess_srno/session/ospid/state/start/finish/[adjlist]/predec

essor):[145]/0/146/5/0x786fc944/3858/LEAF/9/10//153 --這里的LEAF表示該SID阻塞了predecessor=153對應的SID=154,即為被阻塞者

[148]/0/149/1/0x78700160/3806/SINGLE_NODE/11/12//none

[150]/0/151/1/0x787026c8/3804/SINGLE_NODE/13/14//none[153]/0/154/5/0x78705ee4/3903/NLEAF/15/16/[145]/none --這里的NLEAF表示該SID被阻塞了,adjlist對應的145對應的SID=146,即為阻塞者.

在上面的實例中的解釋如下:

nodenum:定義每個session的序列號

sid: session的sid

sess_srno: session的Serial#

ospid: OS的進程ID

state: node的狀態

adjlist: 表示blocker node

predecessor: 表示waiter node

IN_HANG:這表示該node處於死鎖狀態,通常還有其他node(blocker)也處於該狀態

LEAF/LEAF_NW:該node通常是blocker.通過條目的”predecessor”列可以判斷這個node是否是blocker。LEAF說明該NODE沒有等待其他資源,而LEAF_NW則可能是沒有等待其他資源或者是在使用CPU

NLEAF:通常可以看作這些會話是被阻塞的資源.發生這種情況一般說明數據庫發生性能問題而不是數據庫hang

IGN/IGN_DMP:這類會話通常被認為是空閑會話,除非其adjlist列里存在node。如果是非空閑會話則說明其adjlist里的node正在等待其他node釋放資源。

SINGLE_NODE/SINGLE_NODE_NW:近似於空閑會話.

2.hanganalyze級別的定義

10 Dump all processes (IGN state)

5 Level 4 + Dump all processes involved in wait chains (NLEAF state)

4 Level 3 + Dump leaf nodes (blockers) in wait chains (LEAF,LEAF_NW,IGN_DMP state)

3 Level 2 + Dump only processes thought to be in a hang (IN_HANG state)

1-2 Only HANGANALYZE output, no process dump at all一般情況下,我們都定義到級別3,級別3以上的使用需要謹慎,因為級別3以上的,dump信息很多,影響I/O.

3.單節點和RAC下hanganalyze的使用:

單節點:

ALTER SESSION SET EVENTS 'immediate trace name HANGANALYZE level ';

ORADEBUG hanganalyze

Rac:

ORADEBUG setmypid

ORADEBUG setinst all

ORADEBUG -g def hanganalyze

如何查看oracle死鎖,怎么查看oracle是否有死鎖相关推荐

  1. Oracl数据库管理方面的资料(查询sga,查看oracle数据库名称sid,查看oracle数据库名称,查看表空间,修改表空间名称,数据库管理,sqlPlus数据显示)

    显示Oracle sga相关信息: SQL> show sga Total System Global Area 105978600 bytes Fixed Size 453352 bytes ...

  2. oracle 查看服务器密码修改,如何修改oracle用户密码

    修改oracle用户密码的方法:首先连接oracle数据库所在服务器,并进入oracle控制台:然后输入"select username from dba_users"查看用户列表 ...

  3. 查看本地oracle密码是多少钱,Oracle 本地验证和密码文件

    fileINTERNAL 6A75B1BBE50E66AB 4DE42795E66117AE 在数据库没有启动之前,数据库的内建用户是无法通过数据库本身来验证身份的,通过密码文件, oracle就可以 ...

  4. Oracle常用数据字典表 Oracle常用数据字典表 查看当前用户的缺省表空间

    Oracle常用数据字典表 Oracle常用数据字典表 查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; ...

  5. oracle查看有哪些数据库用户登录,oracle如何查看当前有哪些用户连接到数据库,oracle当前有...

    oracle如何查看当前有哪些用户连接到数据库,oracle当前有 可以执行以下语句: select username,serial#, sid from v$session; ---查询用户会话 a ...

  6. 查看oracle版本及补丁,查看oracle版本和补丁

    1.查看oracle版本 sqlplus nolog conn sys/oracle as sysdba SQL> select * from product_component_version ...

  7. oracle执行计划time单位,Oracle中查看执行计划

    方法一.通过使用工具PLSQL Developer中的Explain Plan Window窗口查看SQL执行计划.具体参考 方法二.通过SQL*PLUS中的autotrace命令查看 1.登录拥有d ...

  8. oracle表空间默认增长大小,Oracle 用户表空间查看、修改大小、设置自增长等

    分类: Oracle 首先登入某个用户,查看某个用户在哪个表空间下: select username,default_tablespace from user_users; 查看该用户下所有的表: s ...

  9. Oracle进阶篇之查看执行计划

    目录 一.查看执行计划的方式 1.1.设置autotrace 1.2.使用第三方工具 1.3.EXPLAIN PLAN FOR 二.清除SGA缓存 三.分析执行计划 3.1.创建测试表 3.2.查看执 ...

最新文章

  1. python基础学习笔记(六)
  2. R语言包_rCharts
  3. 网络营销方案之巧用电子书营销
  4. socket技术难点
  5. 山工kw什么意思_【山工装载机故障灯KW什么意思】专区-山工-装载机-铁甲网
  6. [RabbitMQ]创建Java开发环境_消费者_生产者
  7. linux 状态码的意义,HTTP状态码是什么?常见的状态码描述都有什么?
  8. Python二级笔记(6)
  9. 在CentOS中安装NodeJS
  10. logstash grok插件语法介绍
  11. EL与JSTL表达式代码示例
  12. 销售方法论居然来自公司战略!看看IBM、华为、SAP是怎么做的
  13. oracle iso,Oracle数据库之Linux操作系统各版本ISO镜像下载(包括oracle linux\redhat\centos\u...
  14. 【学习】——提问的智慧
  15. 上兴远控流量分析报告
  16. 面试题(4)Oracle
  17. cmake导入so库_使用CMake引入第三方so库及头文件
  18. stm32: 串口空闲中断的实现(HAL库)
  19. 一次业务逻辑优化,竟然解决了MySQL CPU消耗800%的性能问题!
  20. 浪潮之颠二_读书笔记

热门文章

  1. java怎么调用另一个类的方法_Java设计模式:十篇,代码小白必看
  2. 使用 Stacer 优化 Ubuntu 系统
  3. FFmpeg之yuv旋转(十九)
  4. 成功转型机器学习,多年的经验分享
  5. 快捷键查看Emacs源码
  6. android源码灭屏时蓝牙自动配对
  7. go语言学习之helloword
  8. 163邮箱苹果设置不成功_苹果变安卓不是不可能,Corellium让iPhone成功安装安卓系统...
  9. distinct返回null报错_在Java中如何避免“!=null”式的判空语句?
  10. 打开浏览器不是主页_教你如何锁定电脑浏览器主页防止被篡改