Oracle表锁与行锁

场景:所建所有账户无法登入应用,发现出现表锁

需要查询是否表锁了:

1、登入数据所在的数据库:用管理员账户登入
2、查询是否存在锁表的sql

SELECT *
	FROM V$SESSION T1, V$LOCKED_OBJECT T2
 WHERE T1.SID = T2.SESSION_ID;

在这里插入图片描述
3、进行表锁sql:
共享方式的表级锁( Share)

LOCK TABLE <表名>[,<表名>]... IN SHARE MODE [NOWAIT]
	 LOCK TABLE TEST_USER IN SHARE MODE

独占方式表级锁( Exclusive)

	 LOCK TABLE <表名>[,<表名>].... IN EXCLUSIVE MODE [NOWAIT]
   LOCK TABLE TEST_USER IN EXCLUSIVE MODE

4、查看被锁表的信息:

SELECT SESS.SID,
			 SESS.SERIAL#,
			 LO.ORACLE_USERNAME,
			 LO.OS_USER_NAME,
			 AO.OBJECT_NAME,
			 LO.LOCKED_MODE
	FROM V$LOCKED_OBJECT LO, DBA_OBJECTS AO, V$SESSION SESS
 WHERE AO.OBJECT_ID = LO.OBJECT_ID
	 AND LO.SESSION_ID = SESS.SID;

在这里插入图片描述
查询被锁死的表:

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;

5、查看当前数据库正在使用的连接数

select count(*) from v$process  

6、 查看用户当前占用的连接数

select a.OSUSER 用户,count(1) 连接数 from v$session a  group by OSUSER order by 连接数 desc

7、 查看Oracle当前配置的最大连接数

select value from v$parameter where name ='processes'

8、把锁给干掉:

alter system kill session 'sid列,serial#列'

行锁

将事务提交,由自动提交改为手动提交。当对某条数据进行操作时,在没有提交事务之前,其他任何操作对该条数据,都是读的以前的数据,防止脏读

间隙锁

在对表进行区间查询或修改,由该操作独享,其他操作均需要该操作执行完成。比较影响性能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知青先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值