oracle中锁表怎么查,oracle查看锁表

oracle数据库锁表怎么解决

首先你要知道表锁住了是不是正常锁?因为任何DML语句都会对表加锁。

创新互联公司服务项目包括东安网站建设、东安网站制作、东安网页制作以及东安网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,东安网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到东安省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

你要先查一下是那个会话那个sql锁住了表,有可能这是正常业务需求,不建议随便KILL session,如果这个锁表是正常业务你把session kill掉了会影响业务的。

建议先查原因再做决定。

(1)锁表查询的代码有以下的形式:

select count(*) from v$locked_object;

select * from v$locked_object;

(2)查看哪个表被锁

select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;

(3)查看是哪个session引起的

select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;

(4)查看是哪个sql引起的

select b.username,b.sid,b.serial#,c.* from v$locked_object a,v$session b,v$sql c where a.session_id = b.sid

and b.SQL_ID = c.sql_id and c.sql_id = ''

order by b.logon_time;

(5)杀掉对应进程

执行命令:alter system kill session'1025,41';

其中1025为sid,41为serial#.

oracle表在什么情况下会被锁住

在对指定表做append操作,其他再做truncate时候,会产生锁表,如下验证步骤,

1、创建测试表,

create table test_lock(id number, value varchar2(200));

2、执行append语句;并且不做提交,insert /*+append*/ into test_lock values(1,1);

3、再次执行清表语句,truncate table test_lock;报锁表错误,

4、查看锁表语句,发现被锁表,

select b.object_name, t.*

from v$locked_object t, user_objects b

where t.object_id = b.object_id

oracle 怎么查看数据被锁

1.创建测试表,如下图。

createtabletest_lock(idnumber,valuevarchar2(200));

2.执行append语句;并且不做提交,insert/*+append*/intotest_lockvalues(1,1)如下图。

3.再次执行清表语句,truncatetabletest_lock;报锁表错误,如下图。

4.查看锁表语句,发现被锁表

selectb.object_name,t.*

fromv$locked_objectt,user_objectsb

wheret.object_id=b.object_id

注意事项:

简化数据:可以将复杂的查询创建为其他人可以使用的视图,而不必了解复杂的业务或逻辑关系。这简化并掩盖了视图用户数据的复杂性。

表结构设计的补充:在设计的系统才刚刚开始,大部分的程序直接访问数据表结构,但是随着业务的变化,系统更新,等等,引起了一些表结构不适用,这次修改系统的表结构太大,开发成本较高的影响。

这个时候可以创建一个视图来补充表结构设计,降低开发成本。程序可以通过查询视图直接获得它想要的数据。

添加安全性:视图可以向用户显示表中的指定字段,而不是向用户显示表中的所有字段。在实际开发中,视图通常作为提供数据的一种方式提供,并将只读权限提供给第三方以供查询使用。

查看oracle锁的表名

下面3个语句是我经常使用来解决oracle锁问题的 -- 注意你的用户有没有权限问题

1. 查看被锁的表

SELECT p.spid, a.serial#, c.object_name, b.session_id, b.oracle_username,

b.os_user_name

FROM v$process p, v$session a, v$locked_object b, all_objects c

WHERE p.addr = a.paddr AND a.process = b.process

AND c.object_id = b.object_id

2. 查看是哪个进程锁的

SELECT sid, serial#, username, osuser FROM v$session where osuser = 'tangpj'

3. 杀掉这个进程 alter system kill session 'sid,serial#';

oracle中如何查询表被锁定状态

SELECT object_name, machine, s.sid, s.serial# 

FROM gv$locked_object l, dba_objects o, gv$session s 

WHERE l.object_id = o.object_id 

AND l.session_id = s.sid;

如果没有结果就是没有被锁定的,如果查询有结果,就说明此表被锁了。如图:


分享标题:oracle中锁表怎么查,oracle查看锁表
转载来于:http://azwzsj.com/article/pheigp.html