`
xdy2008
  • 浏览: 52630 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于ORACLE的锁表与解锁总结

阅读更多
总结1:Oracle的锁表与解锁
select
s.username,
decode(l.type,'tm','table lock','tx','row lock',null) lock_level,
o.owner,
o.object_name,
o.object_type,
s.sid,
s.serial#,
s.terminal,
s.machine,
s.program,
s.osuser
from v$session s,v$lock l,dba_objects o
where l.sid = s.sid
and l.id1 = o.object_id(+)
and s.username is not null;

--kill session语句
alter system kill session'50,492';
--以下几个为相关表
SELECT * FROM v$lock;
SELECT * FROM v$sqlarea;
SELECT * FROM v$session;
SELECT * FROM v$process ;
SELECT * FROM v$locked_object;
SELECT * FROM all_objects;
SELECT * FROM v$session_wait;
--1.查出锁定object的session的信息以及被锁定的object名
SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username,
l.os_user_name,s.machine, s.terminal, o.object_name, s.logon_time
FROM v$locked_object l, all_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
ORDER BY sid, s.serial# ;
--2.查出锁定表的session的sid, serial#,os_user_name, machine name, terminal和执行的语句
--比上面那段多出sql_text和action
SELECT l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#,
l.os_user_name,s.machine, s.terminal,a.sql_text, a.action
FROM v$sqlarea a,v$session s, v$locked_object l
WHERE l.session_id = s.sid
AND s.prev_sql_addr = a.address
ORDER BY sid, s.serial#;
--3.查出锁定表的sid, serial#,os_user_name, machine_name, terminal,锁的type,mode
SELECT s.sid, s.serial#, s.username, s.schemaname, s.osuser, s.process, s.machine,
s.terminal, s.logon_time, l.type
FROM v$session s, v$lock l
WHERE s.sid = l.sid
AND s.username IS NOT NULL
ORDER BY sid;

这个语句将查找到数据库中所有的DML语句产生的锁,还可以发现,
任何DML语句其实产生了两个锁,一个是表锁,一个是行锁。
杀锁命令
alter system kill session 'sid,serial#'
SELECT /*+ rule */ s.username,
decode(l.type,'TM','TABLE LOCK',
'TX','ROW LOCK',
NULL) LOCK_LEVEL,
o.owner,o.object_name,o.object_type,
s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser
FROM v$session s,v$lock l,dba_objects o
WHERE l.sid = s.sid
AND l.id1 = o.object_id(+)
AND s.username is NOT NULL
如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待
以下的语句可以查询到谁锁了表,而谁在等待。
以上查询结果是一个树状结构,如果有子节点,则表示有等待发生。
如果想知道锁用了哪个回滚段,还可以关联到V$rollname,其中xidusn就是回滚段的USN
col user_name format a10
col owner format a10
col object_name format a10
col object_type format a10
select lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username user_name,
o.owner,o.object_name,o.object_type,s.sid,s.serial#
from v$locked_object l,dba_objects o,v$session s
where l.object_id=o.object_id
and l.session_id=s.sid
order by o.object_id,xidusn desc

总结2:一个有用查找脚本:

column sid format 999;
column b format 9;
column object_name format a30;
column locktype format a20;
select v$lock.sid,
decode(v$lock.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 Invalida-tion',
        'LS', 'Log Start or Switch',
        'RW', 'Row Wait',
        'SQ', 'Sequence Number',
        'TE', 'Extend Table',
        'TT', 'Temp Table',
        'Unknown') LockType,
         rtrim(owner) || '.' || object_name object_name,
decode(lmode,   0, 'None',
                1, 'Null',
                2, 'Row-S',
                3, 'Row-X',
                4, 'Share',
                5, 'S/Row-X',
                6, 'Exclusive','Unknown') LockMode,
decode(request, 0, 'None',
                1, 'Null',
                2, 'Row-S',
                3, 'Row-X',
                4, 'Share',
                5, 'S/Row-X',
                6, 'Exclusive', 'Unknown') RequestMode,
ctime, block b
from v$lock, all_objects
where sid > 6
and v$lock.id1 = all_objects.object_id;


找到某表的锁 所属的sid.
alter system kill session 'sid,serial#';
即可

select object_id,session_id,serial#,oracle_username,os_user_name,s.process
from v$locked_object a,v$session s
where a.session_id=s.sid;
查出被lock 的对象
然后 alter system kill session 'sid,serial#';

知识点3:

LOCK   TABLE 
  语法: 
  LOCK   TABLE   table_1   [,table_2,   ...,   table_n]   IN   lock_mode   MODE 
  NOWAIT 
  变量: 
  table_1,...,table_n:   一系列你想通过使用LOCK   TABLE语句锁住的数据库表。 
  lock_mode:   对于某一数据库表你要设定的锁定模式。你可以从如下的锁定模式中任选一个。 
  EXCLUSIVE 
  SHARE   ROW   EXCLUSIVE 
  SHARE 
  SHARE   UPDATE 
  ROW   SHARE 
  ROW   EXCLUSIVE 
  NOWAIT:   Oracle   will   not   wait   to   lock   the   given   Table(s),   if   the   Table(s)   is(are)   not 
  available 
  例子: 
  SQL 
  LOCK   TABLE   loan   IN   SHARE   MODE   ; 
  LOCK   TABLE   region   IN   EXCLUSIVE   MODE   NOWAIT; 
  LOCK   TABLE   acct   IN   SHARE   UPDATE   MODE; 
  LOCK   TABLE   bank   IN   ROW   EXCLUSIVE   MODE   NOWAIT; 
  LOCK   TABLE   user   IN   SHARE   ROW   EXCLUSIVE   MODE; 
  LOCK   TABLE   branch   IN   ROW   SHARE   MODE   NOWAIT; 
  
  commit 
  /
分享到:
评论

相关推荐

    Oracle sql文总结(case when,查看执行计画,文本操作,查看锁表及解锁,游标)

    Oracle sql文总结(case when,查看执行计画,文本操作,查看锁表及解锁,游标)

    oracle查看被锁的表和解锁

    在开发过程中遇到表被锁的情况,随后我去网上多方查看,发现解决办法都大同小异,解决问题后,总结了一下,供大家参考

    oracle如何解锁封锁的账号

    (1)我们在安装Oracle的时候最后一步有一个管理账户的,里边可以解锁所所需的账户,但是很多的人有时候没有解锁, 下边研究一下使用命令行的方式解锁账户 (2)启动SQL Plus 先登录SYSTEM账户(密码是你自己安装的...

    oracle使用管理笔记(一些经验的总结)

    22.数据库管理+表的逻辑备份与恢复 63 23.数据字典和动态性能视图 67 24.oracle的卸载 69 25.尚学堂SQL简单讲解 70 Oracle常用函数 73 (1)trunc(for date) 73 (2)trunc(number) 73 (3)to_char 73 (4)to_date 74 (5)...

    自己总结的oracle资料

    自己总结的oracle资料,包括:针对自带表的操作,数据库的安装,修改密码,解锁用户。

    oracle实验报告

    例2 复制一个与emp表的表结构相同的新空表emp2. 可输入如下命令: SQL>create table emp2 as select * from emp where 1=2; 在命令的where子句中给出1=2,表示条件不可能成立,因而只能复制表结构,而不能复制任何...

    oracle调优,乱码解决等汇总

    都是工作中的总结,遇到的问题汇总 如:oracle乱码,oracle解锁 常用sql语法大全等等 希望对大家有用哈

    5-Oracle常用知识总结.doc

    oracle常用语句语法加实例文档,包括从工具介绍,用户解锁,建库建表,查询,函数,创建存储过程,函数,包,常用函数介绍,和oracle卸载详细方法,总文档77页

    个人开发中遇到常见问题及解决办法(吐血总结)

    4 查询被锁的数据,解锁 ,数据库连接数 5 下拉框的数据回显 6 mybatis批量更新,批量插入时mapper文件的sql 7 搭建一个项目系统 8 创建一个new工作空间,需要修改的字符编码 9 Java @override报错的解决方法 10 js...

    勤哲excel服务器2010教程

    11.2.7 总结与思考 185 11.3 同期比 185 11.4 分组小计 185 11.4.1 问题分析 186 11.4.2 建立《辅助表》模板 186 11.4.3 建立《销售月报》模板 187 11.4.4 分层 187 11.4.5 提取规格层 189 11.4.6 提取小计层 189 ...

    asp.net知识库

    .net 2.0 访问Oracle --与Sql Server的差异,注意事项,常见异常 Ado.net 与NHibernate的关系? 动态创建数据库 SQL Server数据库安全规划全攻略 .net通用数据库访问组件SQL Artisan应用简介1 在Framework1.0下...

    (重要)AIX command 使用总结.txt

    #如何取定文件与文件集的对应关系,有时想使用某个安装文件, 但没有安装包含该文件的文件集,找到文件集来安装所需文件 首先确认系统中已经安装了“bos.content_list”文件集(fileset), 如果没有安装, 请使用smitty ...

Global site tag (gtag.js) - Google Analytics