IT猫扑网:您身边最放心的安全下载站! 最新更新|软件分类|软件专题|手机版|论坛转贴|软件发布

您当前所在位置:首页数据库Oracle → 关于ORACLE的锁表与解锁总结

关于ORACLE的锁表与解锁总结

时间:2015/6/28来源:IT猫扑网作者:网管联盟我要评论(0)

  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

关键词标签:ORACLE锁表与解锁

相关阅读

文章评论
发表评论

热门文章 Oracle中使用alter table来增加,删除,修改列Oracle中使用alter table来增加,删除,修改列oracle中使用SQL语句修改字段类型-oracle修oracle中使用SQL语句修改字段类型-oracle修使用低权限Oracle数据库账户得到管理员权限使用低权限Oracle数据库账户得到管理员权限Oracle对user的访问控制Oracle对user的访问控制

相关下载

人气排行 ORACLE SQL 判断字符串是否为数字的语句Oracle中使用alter table来增加,删除,修改列的语法ORACLE和SQL语法区别归纳(1)oracle grant 授权语句如何加速Oracle大批量数据处理Oracle删除表的几种方法ORACLE修改IP地址后如何能够使用Oracle 10g创建表空间和用户并指定权限