`
bnmnba
  • 浏览: 293729 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Oracle数据锁快速查杀

 
阅读更多

 网上有很多这样的文章,我希望的是迅速找到一张表的所有的行级锁,并把它们一并处理掉。所以改进了一下:

 

要是想用kill -9 sessionPid的方式就会用到视图V$PROCESS,但这样查询速度很慢。

于是可以先建表:

 

/*可以先建表
 create table b_session_process nologging as
 select * from V$PROCESS D
 where 1=0;
 */
 truncate table b_session_process;
 
 insert into b_session_process 
 select * from V$PROCESS D;
 commit;
--查看数据锁
select d.SPID,--操作系统进程号
       c.object_name,
       a.CTIME,--处于当前模式的时间(秒) ,当前模式是指:已经获得锁,或者正在等待锁。
       b.STATUS,--会话的状态(ACTIVE/INACTIVE/Killed)。ACTIVE:sql正在执行(可能是执行时间长,也可能是正在等待锁)。--INACTIVE:未活动的会话,等待有sql进入会话以执行(没有sql正在执行,很可能是异常会话:已经获得锁,并且未释放。)。---Killed:被标注为删除
       A.sid,
       b.serial#,
       decode(A.type,'MR','MediaReco-very','RT','RedoThread','UN','UserName','TX','Transaction','TM','DML','UL','PL/SQLUserLock','DX','DistributedXaction','CF','ControlFile','IS','InstanceState','FS','FileSet',-'IR','InstanceRecovery','ST','DiskSpaceTransaction','TS','TempSegment','IV','LibraryCacheInvalida-tion','LS','LogStartorSwitch','RW','RowWait','SQ','SequenceNumber','TE','ExtendTable','TT','TempTable','Unknown') LockType,
       b.username,
       decode(a.lmode,0,'None',1,'Null',2,'Row-S',3,'Row-X',4,'Share',5,'S/Row-X',6,'Exclusive','Unknown') LockMode,
       b.LOGON_TIME,
       B.MACHINE,
       b.PADDR
  from v$lock a, all_objects c, v$session b ,
  --V$PROCESS D
  b_session_process D 
  where 1 = 1
   and d.ADDR=b.PADDR
   and a.sid = b.sid
   and a.type in ('TM', 'TX')
   and a.id1 = c.object_id
   and c.OBJECT_TYPE='TABLE'--大多数锁都是锁定表。
   --and c.object_name = 'LOCKED_TABLE'
   --and a.CTIME > 120 --锁定或者等待时间大于120秒
   and b.STATUS='INACTIVE'--长时间占有锁并且不执行sql的会话,应该被杀掉。
   order by a.CTIME desc
   ;

 

 

 

以上的sql加上条件:and c.object_name = 'LOCKED_TABLE' 能在2秒内找到你想要的数据锁所属的session的操作系统进程号。不加这个条件时间就长了,有可能需要2分钟。

 其中LOCKED_TABLE是指要查询的锁所在的表名。

 

找到不活的且长时间占有锁的进程号后。(我认为:不活动的不可能是等待锁的会话。反之,等待锁的会话应该是正在执行中的活动会话)

直接kill -9 $spid

 

 网上有说用这个方式:alter system kill session 'sid,serial#',我觉得不适合我,主要是这句耗时太长。如果只杀一个重要的锁还可以。

 

 

附上查询数据的所有者sql,可能对某些人有用:

 

 

 --查询数据锁所属
 select command_type,
       sql_text,
       sharable_mem,
       persistent_mem,
       runtime_mem,
       sorts,
       version_count,
       loaded_versions,
       open_versions,
       users_opening,
       executions,
       users_executing,
       loads,
       first_load_time,
       invalidations,
       parse_calls,
       disk_reads,
       buffer_gets,
       rows_processed,
       sysdate start_time,
       sysdate finish_time,
       address sql_address,
       'N' status
  from v$sqlarea
 where address = (select sql_address from v$session where sid = $sid);
--$sid是上一个sql查询的a.sid
 
 

 

 

 

对了以上sql我是在oracle9里面使用的。

 

 

 

注误区:

1.v$locked_object的SESSION_ID并不是持有锁的sessionId,也包括等待该锁的sessionId。

2.v$session的LOGON_TIME是没有意义的,因为多数会受连接池的影响,导致这个时间失去意义。

 

 

分享到:
评论

相关推荐

    Oracle的锁表与解锁

    在Oracle数据库管理中,锁是一个至关重要的概念,用于控制多个用户或进程对数据的并发访问,确保数据的一致性和完整性。锁可以分为行级锁(Row Level Lock)和表级锁(Table Level Lock),以及更细粒度的锁类型。...

    oracle数据快速导出工具

    Oracle数据快速导出工具,通常指的是Oracle数据库管理系统中用于数据迁移和备份的工具,例如Oracle Data Pump(expdp)和传统的Export Utility(exp)。这些工具为数据库管理员和开发人员提供了高效的数据导出功能,...

    oracle数据库锁使用

    Oracle 数据库锁是确保数据完整性、一致性以及并发操作的关键机制。在Oracle中,锁主要分为两类:数据锁(DML锁)和字典锁。字典锁主要用于内部管理,特别是语法分析和DDL操作,用户无法直接控制。而数据锁则是我们...

    直接拷贝数据文件实现Oracle数据迁移

    然而,在特定条件下,如服务器环境相同且Oracle版本一致,直接拷贝数据文件是一种快速而有效的方法。本文将详细介绍如何通过直接拷贝数据文件来实现在新服务器上的Oracle数据迁移。 首先,我们需要了解迁移的背景。...

    快速查找oracle锁对象

    在Oracle数据库管理中,"快速查找Oracle锁对象"是一个关键任务,特别是在处理并发事务和解决性能问题时。当多个用户或进程同时访问同一资源时,可能会出现锁冲突,导致某些事务等待,影响数据库的正常运行。了解如何...

    Oracle数据库的锁类型

    在Oracle数据库中,锁的使用是为了协调多个用户对同一数据资源的访问,防止数据在并发环境下出现不一致的情况。本文将深入探讨Oracle数据库中的锁类型,尤其是DML锁,以及它们是如何在并发环境中维护数据完整性的。 ...

    oracle数据迁移工具

    Oracle数据迁移工具是一种高效、便捷的方法,用于在不同的Oracle数据库之间移动数据或结构。这个工具由.NET框架构建,提供了一种灵活且用户友好的界面,使得数据库管理员和开发人员能够轻松地执行各种数据迁移任务。...

    oracle数据仓库国宝级资料(全套)

    oracle数据仓库国宝级资料(全套) 1、Oracle+10g数据仓库实践--数据仓库基础.pdf 2、Oracle+10g数据仓库实践--总体方案.pdf 3、Oracle+10g数据仓库实践--方案的总体优势.pdf 4、Oracle+10g据仓库实践--数据仓库工具的...

    Oracle的锁机制

    Oracle的锁机制是数据库管理系统中一个关键的组成部分,它的主要目标是确保在多用户环境下,数据的读一致性、完整性和并行性。Oracle提供了多种类型的锁来满足这些需求。 首先,按照是否独占,锁分为排它锁(X锁)...

    C#实现Oracle数据批量导入

    这些技术可以帮助开发者快速和高效地实现批量数据导入功能。 知识点: 1. Oracle.DataAccess.Client命名空间的使用 2. OracleBulkCopy类的使用 3. SqlBulkCopy类的使用 4. 批量导入数据到Oracle数据库 5. 批量导入...

    mysql-oracle数据同步

    本文将深入探讨MySQL到Oracle的数据同步过程,以及如何在同步过程中修改MySQL数据表的标识。 首先,我们要理解MySQL和Oracle是两种不同的关系型数据库管理系统(RDBMS)。MySQL以其开源、轻量级、高效的特点被广泛...

    Oracle数据中心解决方案交流

    Oracle数据中心解决方案交流主要涵盖数据生命周期中的关键环节,包括数据采集与加工、数据存储设计、数据应用、数据管控、数据管理以及数据中心的最佳实践。这些环节构成了一个高效、安全且可扩展的数据中心架构的...

    Oracle 数据仓库技术白皮书

    电信行业客户面临数据量庞大且快速增长的挑战,通过Oracle 数据仓库解决方案实现了高效的数据管理和分析。 ##### 4.2 案例二:金融业客户利用Oracle数据仓库解决方案解决利润成本、风险和客户关系管理 金融行业客户...

    对于Oracle锁的一些理论总结

    Oracle数据库中的锁机制是确保数据一致性、避免并发访问冲突的关键技术。本文主要探讨Oracle的锁理论,特别是DML锁,即数据操纵语言锁。 首先,锁的基本概念是用于控制共享资源的并发访问。在Oracle中,锁分为三类...

    Oracle数据的快速加载.pdf

    Oracle 数据的快速加载是数据库管理中的一个重要议题,尤其是在实时应用如电网调度员培训仿真器(DTS)中。DTS对数据处理的实时性和响应速度有极高的要求,而传统的关系型数据库,如Oracle,在面对大数据量和频繁查询...

    oracle锁机制探讨

    在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁(用来保证表的结构不被用户修改),TX锁称为事务锁或行级锁。当Oracle执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统...

    oracle并发和锁机制

    oracle并发和锁机制,oracle并发锁,oracle锁

    oracle锁库解锁方法

    针对oracle数据库 解锁方法 ,个人使用 希望大家能够有所帮助

Global site tag (gtag.js) - Google Analytics