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

a4c26d1e5885305701be709a3d33442f.png

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

a4c26d1e5885305701be709a3d33442f.png

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值