`

oracle死锁语句查询(搜集)

阅读更多

SELECT   bs.username "Blocking User", bs.username "DB User",
         ws.username "Waiting User", bs.SID "SID", ws.SID "WSID",
         bs.serial# "Serial#", bs.sql_address "address",
         bs.sql_hash_value "Sql hash", bs.program "Blocking App",
         ws.program "Waiting App", bs.machine "Blocking Machine",
         ws.machine "Waiting Machine", bs.osuser "Blocking OS User",
         ws.osuser "Waiting OS User", bs.serial# "Serial#",
         ws.serial# "WSerial#",
         DECODE (wk.TYPE,
                 'MR', 'Media Recovery',
                 'RT', 'Redo Thread',
                 'UN', 'USER Name',
                 'TX', 'Transaction',
                 'TM', 'DML',
                 'UL', 'PL/SQL USER LOCK',
                 'DX', 'Distributed Xaction',
                 'CF', 'Control FILE',
                 'IS', 'Instance State',
                 'FS', 'FILE SET',
                 'IR', 'Instance Recovery',
                 'ST', 'Disk SPACE Transaction',
                 'TS', 'Temp Segment',
                 'IV', 'Library Cache Invalidation',
                 'LS', 'LOG START OR Switch',
                 'RW', 'ROW Wait',
                 'SQ', 'Sequence Number',
                 'TE', 'Extend TABLE',
                 'TT', 'Temp TABLE',
                 wk.TYPE
                ) lock_type,
         DECODE (hk.lmode,
                 0, 'None',
                 1, 'NULL',
                 2, 'ROW-S (SS)',
                 3, 'ROW-X (SX)',
                 4, 'SHARE',
                 5, 'S/ROW-X (SSX)',
                 6, 'EXCLUSIVE',
                 TO_CHAR (hk.lmode)
                ) mode_held,
         DECODE (wk.request,
                 0, 'None',
                 1, 'NULL',
                 2, 'ROW-S (SS)',
                 3, 'ROW-X (SX)',
                 4, 'SHARE',
                 5, 'S/ROW-X (SSX)',
                 6, 'EXCLUSIVE',
                 TO_CHAR (wk.request)
                ) mode_requested,
         TO_CHAR (hk.id1) lock_id1, TO_CHAR (hk.id2) lock_id2,
         DECODE
            (hk.BLOCK,
             0, 'NOT Blocking',         /**//* Not blocking any other processes */
             1, 'Blocking',             /**//* This lock blocks other processes */
             2, 'Global',          /**//* This lock is global, so we can't tell */
             TO_CHAR (hk.BLOCK)
            ) blocking_others
    FROM v$lock hk, v$session bs, v$lock wk, v$session ws
   WHERE hk.BLOCK = 1
     AND hk.lmode != 0
     AND hk.lmode != 1
     AND wk.request != 0
     AND wk.TYPE(+) = hk.TYPE
     AND wk.id1(+) = hk.id1
     AND wk.id2(+) = hk.id2
     AND hk.SID = bs.SID(+)
     AND wk.SID = ws.SID(+)
     AND (bs.username IS NOT NULL)
     AND (bs.username <> 'SYSTEM')
     AND (bs.username <> 'SYS')
ORDER BY 1;

--------------------------------------------------------------------------------
查询发生死锁的select语句

select sql_text from v$sql where hash_value in
(select sql_hash_value from v$session where sid in
(select session_id from v$locked_object))


---------------------------------------------------------
关于数据库死锁的检查方法

一、        数据库死锁的现象
程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错。
二、        死锁的原理
当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提
交,另一条对于这一列数据做更新操作的语句在执行的时候就会处于等待状态,
此时的现象是这条语句一直在执行,但一直没有执行成功,也没有报错。
三、        死锁的定位方法
通过检查数据库表,能够检查出是哪一条语句被死锁,产生死锁的机器是哪一台。
1)用dba用户执行以下语句
select username,lockwait,status,machine,program from v$session where sid in
(select session_id from v$locked_object)
如果有输出的结果,则说明有死锁,且能看到死锁的机器是哪一台。字段说明:
Username:死锁语句所用的数据库用户;
Lockwait:死锁的状态,如果有内容表示被死锁。
Status: 状态,active表示被死锁
Machine: 死锁语句所在的机器。
Program: 产生死锁的语句主要来自哪个应用程序。
2)用dba用户执行以下语句,可以查看到被死锁的语句。
select sql_text from v$sql where hash_value in
(select sql_hash_value from v$session where sid in
(select session_id from v$locked_object))

四、        死锁的解决方法
    一般情况下,只要将产生死锁的语句提交就可以了,但是在实际的执行过程中。用户可
能不知道产生死锁的语句是哪一句。可以将程序关闭并重新启动就可以了。
 经常在Oracle的使用过程中碰到这个问题,所以也总结了一点解决方法。

  1)查找死锁的进程:

sqlplus "/as sysdba" (sys/change_on_install)
SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,
l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS
FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID;

  2)kill掉这个死锁的进程:

  alter system kill session ‘sid,serial#’; (其中sid=l.session_id)

  3)如果还不能解决:

select pro.spid from v$session ses,
v$process pro where ses.sid=XX and
ses.paddr=pro.addr;

  其中sid用死锁的sid替换:

exit
ps -ef|grep spid

  其中spid是这个进程的进程号,kill掉这个Oracle进程。
 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yongali/archive/2007/07/06/1680768.aspx

分享到:
评论

相关推荐

    oracle中关于死锁的处理

    - 在处理死锁之前或之后,可以通过收集统计信息来优化查询性能,这有助于减少未来的死锁问题。 ```sql DBMS_STATS.GATHER_TABLE_STATS(OWNNAME =&gt; 'LLTRADE', TABNAME =&gt; 'TAGTPREPAYLOG', CASCADE =&gt; TRUE, ...

    多年积累的oracle监控语句,没有最全只有更全

    通过收集和分析执行时间过长的SQL语句,可以找出性能瓶颈,进行SQL优化,如改写SQL、创建新索引或调整表结构。 4. 等待事件监控:等待事件是分析数据库性能的重要指标,它们揭示了数据库在等待什么资源。比如,...

    Oracle性能监控SQL语句

    - 当回滚段争用严重时,可能会导致事务等待甚至死锁,通过此查询可以快速发现问题所在。 --- #### 六、在一个用户下查找所有的索引 **知识点:** - **Index Lookup for a User:** - `SELECT user_indexes....

    oracle 常用sql语句和常见问题

    在Oracle数据库管理中,SQL(结构化查询语言)是核心工具,用于检索、更新和管理数据。本资料集主要涵盖了Oracle中的常用SQL语句以及在实际应用中可能遇到的常见问题及其解决策略。 1. **SQL基本操作**: - **...

    oracle9i的查询优化

    1. **执行计划分析**:Oracle 9i引入了“执行计划”概念,通过EXPLAIN PLAN语句,我们可以预览SQL查询的执行路径,了解数据库如何读取和处理数据。执行计划中的操作包括全表扫描、索引扫描、连接操作等,分析执行...

    经典SQL语句收集(ORACLE)

    ### 经典SQL语句收集(ORACLE) #### 一、经典查询语句 在Oracle数据库中,查询语句是日常开发与维护中最常见的操作之一。以下列出了一些经典的查询语句示例: 1. **查询所有用户(排除特定用户)**: ```sql ...

    提高基于ORACLE数据库的查询统计速度.pdf

    4. **数据库维护**:定期进行统计信息收集和分析,更新索引统计信息,确保Oracle数据库能够准确估计查询的执行计划。定期重构和重建索引,清理无用的数据和索引,保持数据库整洁。 5. **硬件升级**:提升服务器硬件...

    Oracle学习笔记精华版

    笔记可能涉及索引的创建和管理、SQL调优(如使用EXPLAIN PLAN分析查询执行计划)、数据库统计信息的收集、存储优化以及使用Oracle的性能监控工具(如AWR和ASH报告)。 此外,Oracle的安全管理包括用户权限管理、...

    为什么oracle有时不用索引来查找数据

    ### Oracle为何有时不使用索引来查找数据 Oracle数据库在处理SQL查询时,会根据一系列复杂的因素...通过了解这些原因,DBA和开发人员可以更好地调整查询语句和索引策略,以确保Oracle数据库能够更高效地处理查询请求。

    ORACLE_日常维护知识大全

    - 可以通过查询`v$process`视图来检查Oracle服务进程的状态。例如:`select serial#, pid, status from v$process;`。这有助于了解当前活跃的进程及其状态。 - **1.3. 检查Oracle监听状态** - 使用`lsnrctl ...

    Oracle经典面试题(个人精心收集,值得收藏)

    本资料集合了多年以来个人精心收集的Oracle经典面试题,旨在帮助求职者或数据库管理员更好地准备面试,理解Oracle数据库的核心概念和技术。 1. **SQL基础** - SQL(Structured Query Language)是用于管理关系...

    Oracle事件探查器

    1. **Trace文件**:Oracle事件探查器生成的跟踪文件包含了数据库执行的各种操作的详细信息,如SQL语句、PL/SQL块、数据库调用、等待事件等。这些信息对于定位性能问题和故障排查至关重要。 2. **10046 trace事件**...

    高级owi与oracle性能调优

    《高级owi与oracle性能调优》是一本专注于Oracle数据库性能优化的专业技术书籍,主要针对OWI(Oracle等待事件)的调优技术进行详细讲解。由于文中提供的部分电子书页码信息仅为重复的电子书书店的联系方式,并没有...

    oracle查询优化

    综上所述,为了有效地解决 Oracle 查询性能问题,我们需要从多方面入手,包括但不限于优化索引策略、改善 I/O 性能、合理利用内存资源、优化查询语句结构等。同时,充分利用 Oracle 10g 中的监控工具和技术,可以...

    oracle自学实盘教程电子课件

    7. **性能优化**:讲解SQL查询优化,如索引选择、执行计划分析、统计信息收集,以及通过调整SQL语句和数据库参数来提高系统性能。 8. **安全性**:了解Oracle的用户管理和权限控制,包括角色、权限、系统权限和对象...

    Beginning Oracle Database 12c Administration, 2nd Edition

    - **SQL与PL/SQL**:深入探讨了SQL语句的基本用法,包括查询、插入、更新和删除操作;同时介绍了PL/SQL的过程化编程特性,如变量定义、控制结构和异常处理。 #### 二、Oracle架构 - **Oracle数据库架构**:解析了...

    韩顺平oracle笔记

    8. **性能优化**:Oracle提供了一系列工具和策略来提升性能,如索引优化、查询优化器、统计信息收集等。理解这些优化手段对于提升数据库性能至关重要。 9. **Oracle备份与恢复**:笔记可能涵盖RMAN(恢复管理器)、...

    Oracle和数据结构

    Oracle提供了一系列工具和功能来优化数据库性能,如SQL优化器、性能监视工具(如SQL Trace和AWR报告)、表和索引的统计信息收集以及分区和索引的使用。 总结来说,Oracle数据库在数据结构上的理解和应用对于数据库...

    oracle高效设计脚本

    1. SQL Trace与10046事件:利用这些工具收集执行计划和执行时间,用于分析和优化SQL语句。 2. AWR(Automatic Workload Repository)报告:定期生成性能报告,识别系统瓶颈。 九、数据库设计原则 1. 第三方工具...

    Oracle DBA 面试题

    面试中可能会问及如何收集统计信息、监控数据库状态、清理无效对象、优化SQL语句等。 2. 创建和配置Oracle数据库(Creating and Configuring an Oracle Database):应聘者需要了解Oracle数据库的安装流程、初始化...

Global site tag (gtag.js) - Google Analytics