在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
ORACLE里锁有以下几种模式: 数字越大锁级别越高, 影响的操作越多。 2级锁有:Select for update,Lock For Update,Lock Row Share 3级锁有:Insert, Update, Delete, Lock Row Exclusive 4级锁有:Create Index, Lock Share locked_mode为2,3,4不影响DML(insert,delete,update,select)操作, 但DDL(alter,drop等)操作会提示ora-00054错误。 ORA-00054: resource busy and acquire with NOWAIT specified 5级锁有:Lock Share Row Exclusive 当对父表进行修改时,若子表对应的记录存在,则产生ORA-02292 当对子表进行修改时,则除了对子表加加TX锁和RX锁外;对父表 上面锁说的修改,都是对子父表存在参考完整性的字段操作的。 6级锁有:Alter table, Drop table, Drop Index, Truncate table, Lock Exclusive 复制代码 代码如下: col owner for a12 col object_name for a30 col machine for a32 col USERNAME for a16 col OSUSER for a16 查看当前会话sid: select sid from v$mystat where rownum<=1 ; 查看当前session情况: select machine,username,sid,serial#,type,osuser,status from v$session; 查看当前数据库里锁的情况可以用如下SQL语句: 复制代码 代码如下: select s.username,o.object_name,s.machine,s.sid,s.serial#,k.type from v$locked_object l,dba_objects o ,v$session s,v$lock k where l.object_id = o.object_id and l.session_id=s.sid and k.sid=s.sid 如果有长期出现的一列,可能是没有释放的锁。我们可以用下面SQL语句杀掉长期没有释放非正常的锁:alter system kill session 'sid,serial#'; 如果出现了锁的问题, 某个DML操作可能等待很久没有反应。 如果利用上面的命令杀死一个进程后,进程状态被置为"killed",但是锁定的资源很长时间没有被释放,那么可以在os一级再杀死相应的进程(线程),首先执行下面的语句获得进程(线程)号: 复制代码 代码如下: select spid, osuser, s.program from v$session s,v$process p where s.paddr=p.addr and s.sid=#sid (#sid是上面查到的sid) 4.在OS上杀死这个进程(线程): 1)在unix上,用root身份执行命令: #kill -9 #spid(即上面查到的spid) 2)在windows用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为: orakill sid thread 其中: sid:表示要杀死的进程属于的实例名 thread:是要杀掉的线程号,即上面查到的spid。 例:c:>orakill orcl #spid 当采用的是直接连接数据库的方式,也不要用OS系统命令 $kill process_num 或者 $kill -9 process_num来终止用户连接,因为一个用户进程可能产生一个以上的锁, 杀OS进程幷不能彻底清除锁的问题。 rs和rx的区别在什么地方? Row Exclusive (RX): INSERT, UPDATE, DELETE Row Share (RS): SELECT... FOR UPDATE 两者都是TM table lock modes held by DML transactions。还是有一点区别的,一是产生的不一样。二是rx锁后,其他transactions甚至都读不到更改后的结果。而rs对其他 transactions而言读是没有问题的,所以叫它rs。虽然都是指在表的层面上Prevents other transactions from manually locking the table, 一个是for exclusive reading or writing,而另一个是for exclusive write access. 这也就是rs的s(share)表现的地方。 |
请发表评论