Oracle锁机制

1、行级锁
insert ,update ,delete,自动在行上加一个行级锁。通过commit,rollback解锁。
查看行级锁阻塞情况:
select sid , blocking_session,username,event from v$session where blocking_session_status='VALID';
查看session加锁情况,不含锁阻塞的情况:
select * from v$locked_objects;
oracle 加锁是依次执行的,假设有3个用户,同时修改某行数据。第一个用户先获得行级锁,其他两个用户处于等待状态,也就是阻塞了其他两个用户。当这个用户 commit操作,解放自身的行级锁。此时,第二个用户将获得行级锁,再阻塞第三个用户。直到第二个用户释放行级锁,第三个用户才有机会获得锁,否则将一直处于等待状态。

2、表级锁
1) lock table tab_name in share mode(共享锁) 在表级别上加上共享锁,在该表上用户只能够select操作,其他操作都被阻塞,要一直等到该表的锁释放。同时还允许其他用户在该表上也加上share锁。Type为4。
解锁:用户在该表上执行commit或rollback后,将解除该锁。
2) lock table tab_name in exclusive mode(排他锁) 在表级别上加上排他锁,在该表上用户只能select操作,其他操作都被阻塞,通过还不允许用户再在该表上加上其他类型的锁。Type为6(加锁级别最高)。
解锁:用户在该表上执行commit或rollback后,将解除该锁。
3) Lock table tab_name in share row exclusive mode():在表级别上加上排他锁,在该表上用户只能select操作,其他操作将被阻塞,不能加共享锁、共享行排他锁和排他锁。Type为5。
解锁:用户在该表上执行commit或rollback后,将解除该锁。

3、数据库级锁
1) alter system enable restricted session;
受限方式打开数据库,对已经连接上数据库的用户仍然能够操作数据库;要连接数据库,用户必须具有restrictive session的权限。
其目的主要是希望在数据库打开期间,且在没有用户会话干扰(如建立连接和执行任务)的情况下完成数据库的维护操作(如数据库的导入、导出)。
Alter system disable restricted session;解除数据库受限模式。
2) 以只读方式打开数据库
Shutdown immediate
Startup mount
Alter database open read only;
这时候数据库只能够执行select操作,其他操作就要抛出错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值