日期:2014-05-17  浏览次数:20870 次

新手求教 关于锁表的疑问...
作为一个没有啥工作经验的菜鸟怎么样去判断什么样的锁要去人工解决

------解决方案--------------------
SQL code

/*模拟死锁产生的情景
drop table  emp; --if exists?
create table emp(
    empid number(5),
    empname varchar2(100),
    empage number(5)
);
*/
truncate table emp;
insert into emp values(1,'chenzw',27);
insert into emp values(2,'chenzz',27);
commit;

--sqlplus窗口A  为empid为1的表加排他锁
update emp set empage=empage+1 where empid=1;
--sqlplus窗口B  为empid为2的表加排他锁
update emp set empage=empage+2 where empid=2;

--sqlplus窗口A  检测到死锁
update emp set empage=empage+1 where empid=2;
--sqlplus窗口B  检测到死锁
update emp set empage=empage+2 where empid=1;


--在窗口A上面运行的示例程序如下:

SQL> truncate table emp;

表被截断。

SQL> insert into emp values(1,'chenzw',27);

已创建 1 行。

SQL> insert into emp values(2,'chenzz',27);

已创建 1 行。

SQL> commit;

提交完成。

SQL> update emp set empage=empage+1 where empid=1;

已更新 1 行。

SQL> update emp set empage=empage+1 where empid=2;
update emp set empage=empage+1 where empid=2
       *
第 1 行出现错误:
ORA-00060: 等待资源时检测到死锁