对oracle中锁的深入理解
0:没有
1:空null
2:row-s线路共享(RS):共享表锁
3:row-x线专用(RX):为线路的改造
4:共享锁(S):防止其他DML操作
5:S / row-x共享行专用(SRX):防止其他事务操作
6:专用专用(x):独立访问使用
数字越大锁级别越高,操作受到影响越大。
1级锁:选择,有时在V locked_object美元。
2级锁是:选择更新、更新锁定、锁定行共享
选择更新。当对话使用更新子打开一个游标,所有数据行返回集中将独家在行级(row-x)。其他对象只能查询这些数据行,无法执行更新操作、删除操作或选择更新操作。
3级锁有:插入、更新、删除、锁排独占。
没有提交,相同的记录将不会响应,因为最后3个锁将等待最后3个锁。我们必须释放最后一个继续工作。
4级锁:创建索引,锁股locked_mode,2,3,4不影响DML(插入,删除,更新,选择)的操作,但操作删除会提示错误。
ora-00054:资源忙和获得立即指定
(ora-00054:资源正忙,但指定NOWAIT获取资源)
5级锁是:锁共享行独占
具体来说,有更新/删除的时候有一个主键约束,和锁4,5可能产生。
当父表的修改,一个ora-02292是如果在子表中存在相应的记录产生。
异常;否则,只在父表中添加TX锁和RX锁;
当子表被修改时,子表被添加到TX锁和RX锁;对父表,父表被添加到表中。
添加一个SS锁,这是合乎逻辑的,因为此时父表必须满足引用完整性。
也就是说,向父表添加SS锁,以避免此时修改父表。
上述锁的更改都是在子父表的字段中引用完整性操作的。
6个级别的锁是:更改表、下拉表、删除索引、截断表、锁定独占。
在DBA的角色中:
复制代码代码如下所示:
Col所有者A12
Col object_name 30
对于32型机
Col用户名A16
Col OSUser为A16
查看当前会话SID:
选择从V mystat美元在SID ROWNUM <= 1;
看看当前的会议情况:
选择机器,用户名,Sid,串行#、类型、OSUser,V $ SESSION状态;
查看当前数据库中的情况可以用作下面的SQL语句:
复制代码代码如下所示:
选择s.username,o.object_name,机,s.sid,s.serial #,k.type
从V locked_object美元,dba_objects O、V $ SESSION,V $锁K
在l.object_id = o.object_id和l.session_id = s.sid和k.sid = s.sid
如果有一个排,长时间的出现,它可能是一个锁,不释放。我们可以使用下面的SQL语句来杀死未正常锁很久了:改变系统杀死session'sid,串行#;
如果有一个锁的问题,一个DML操作可能会等很长时间没有反应。
如果使用上述命令杀死进程,则进程状态被设置为已死亡
复制代码代码如下所示:
选择SPID,OSUser,计划
从v $会话s,v $过程p
在s.paddr = p.addr和s.sid = # SID(# SID是希德发现它)
4。在OS(线程)上杀死此进程:
1)在UNIX上,命令以根身份执行:
#杀死9 # SPID(即SPID发现它)
2)当Windows使用orakill杀死线程,orakill是Oracle提供的一个可执行的命令和语法:
Orakill Sid螺纹
其中:
Sid:表示要被杀死的进程的实例名。
线程:线程被杀,数即SPID上发现。
例如:C:> orakill Oracle # SPID
当使用直接连接到数据库,不使用操作系统的process_num美元9美元系统命令杀杀process_num终止用户连接,因为一个用户进程可以有多个锁,杀的过程并不能完全消除锁问题。
RS和RX的区别在哪里
排排(RX):插入、更新、删除
行共享(RS):选择更新…
都TM表的DML事务持有的锁模式,还是有区别的,一个是不同的。两RX锁后,其他事务不能变更后读取结果,RS是没有问题的阅读其他交易,所以叫它的。虽然他们都是指可以防止其他事务手动锁定在桌面上的表,一个是独家的阅读,和其他俞