美文网首页oracle
模拟oracle数据库update锁表现象及处理办法

模拟oracle数据库update锁表现象及处理办法

作者: 重庆思庄 | 来源:发表于2020-01-06 15:41 被阅读0次

Session1创建测试表:

SQL> create table test (id number (10) not null , name varchar(20), primary key(id));

Table created.

SQL> desc test;

Name Null? Type

----------------------------------------- -------- ----------------------------

ID NOT NULL NUMBER(10)

NAME VARCHAR2(20)

SQL> insert into test values(001,'tom');

1 row created.

SQL> insert into test values(002,'lisa');

1 row created.

SQL> insert into test values(003,'joy');

1 row created.

SQL> insert into test values(004,'jia');

1 row created.

查看test表信息

SQL> update test set name='xue' where name='joy';

1 row updated.

SQL> commit;

Commit complete.

SQL> select * from test updata;

ID NAME

---------- --------------------

1 tom

2 lisa

3 xue

4 jia

重新打开session 2:

SQL> select * from test;

ID NAME

---------- --------------------

1 tom

2 lisa

3 xue

4 jia

update模拟锁表

SQL> update test set name='da' where name='tom';

1 row updated.

注:不提交

Session2查询:

SQL> select * from test;

ID NAME

---------- --------------------

1 tom

2 lisa

3 xue

4 jia

查看哪个表被锁

SQL> select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;

OWNER

------------------------------

OBJECT_NAME

--------------------------------------------------------------------------------

SESSION_ID LOCKED_MODE

---------- -----------

SYS

TEST

23 3

查看是哪个session引起的

SQL> select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;

USERNAME SID SERIAL# LOGON_TIM

------------------------------ ---------- ---------- ---------

SYS 23 23 02-JAN-20

杀掉对应进程

SQL> alter system kill session'23,23';

System altered.

其中23为sid,23为serial#.

SQL> select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;

no rows selected

SQL> select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;

no rows selected

session 1查询:

SQL> select * from test;

select * from test

*

ERROR at line 1:

ORA-00028: your session has been killed

SQL> select * from test;

select * from test

*

ERROR at line 1:

ORA-01012: not logged on

Process ID: 5366

Session ID: 23 Serial number: 23

重新连接SQL

[oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Thu Jan 2 11:39:53 2020

Copyright (c) 1982, 2013, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select * from test updata;

ID NAME

---------- --------------------

1 tom

2 lisa

3 xue

4 jia

相关文章

网友评论

    本文标题:模拟oracle数据库update锁表现象及处理办法

    本文链接:https://www.haomeiwen.com/subject/azskactx.html