知识大全 oracle锁的管理practiced
Posted 知
篇首语:绳锯木断,水滴石穿。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 oracle锁的管理practiced相关的知识,希望对你有一定的参考价值。
今天参考了一些文档 作了以下一点实验 记录了整个过程 留个记录吧
一 插入时锁的情况
打开一个命令行窗口 用sqlplus登陆到oracle
c[oracle@qatest ~]$ sqlplus fortune/fortune
SQL*Plus: Release Production on Sun May : :
Copyright (c) Oracle All Rights Reserved
Oracle Database g Enterprise Edition Release Production
With the Partitioning OLAP Data Mining and Real Application Testing options
创建一个测试表
SQL>
SQL> create table test (a number a char( ));
create table test (a number a char( ))
SQL> desc test
Name Null? Type
A NUMBER
A CHAR( )
插入几条测试数据
SQL> insert into test values ( );
row created
SQL> select * from test ;
A A
SQL> insert into test values ( );
row created
SQL> mit;
SQL> select * from test ;
A A
SQL> insert into test values ( );
row created
SQL> insert into test values ( );
row created
用sys用户可以查看到当前的sid号码:
SQL> select sid username from v$session where username= FORTUNE ;
SID USERNAME
FORTUNE
用sys用户登进去查看当前sid所占有的锁及类型:(在没有mit之前所占有的锁)
SQL> select sid type lmode request from v$lock where sid in( ) order by sid;
SID TY LMODE REQUEST
TX
TM
SQL> mit;
mit之后再查一下sid为 的进行的锁的情况:mit之后就不占用锁了
SQL> select sid type lmode request from v$lock where sid in( ) order by sid;
no rows selected
重新打开一个命令行窗口 使用fortune用户登入第二的进程
[oracle@qatest ~]$ sqlplus fortune/fortune
SQL*Plus: Release Production on Sun May : :
Copyright (c) Oracle All Rights Reserved
Connected to:
Oracle Database g Enterprise Edition Release Production
With the Partitioning OLAP Data Mining and Real Application Testing options
SQL>
SQL>
用sys用户可以看到这两个进行的SID号
SQL> select sid username from v$session where username= FORTUNE ;
SID USERNAME
FORTUNE
FORTUNE
在第一个窗口执行以下插入: (SID 为 ) 不要mit
SQL> insert into test values ( );
row created
在第二个窗口执行以下插入:(SID 为 ) 同样也不要mit:
SQL>
SQL> insert into test values ( );
row created
这时再用sys用户查看fortune 用户所占有的sid总共占有的锁及类型:(在没有mit之前所占有的锁)
SQL> select sid type lmode request from v$lock where sid in( ) order by sid;
SID TY LMODE REQUEST
TX
TM
TX
TM
这时在窗口一执行mit:
SQL> mit;
Commit plete
这时再用sys用户查看fortune 用户所占有的锁及类型:
SQL> select sid type lmode request from v$lock where sid in( ) order by sid;
SID TY LMODE REQUEST
TX
TM
可以看到sid为 的锁已经释放了 只有sid 所占有的锁了
这时在窗口二执行mit:
SQL> mit;
Commit plete
这时再用sys用户查看fortune 用户所占有的锁及类型:
SQL> select sid type lmode request from v$lock where sid in( ) order by sid;
no rows selected
SQL> select * from test ;
A A
发现没有锁了 记录已经添加成功了
二 Update 时锁的占用情况:
在窗口一执行一个update:(不要mit)
SQL> update test set a = where a = ;
row updated
同样在窗口二也执行一个update 更新同一行数据: (不要mit)
SQL> update test set a = where a = ;
row updated
这时可以看到这个窗口已经停止反应了
这时用sys用户查看fortune用户的锁情况 如下:
SQL> select sid type lmode request from v$lock where sid in( ) order by sid;
SID TY LMODE REQUEST
TM
TX
TM
TX
发现 的TX类型的锁里 request 为 是在等待另外一个锁
这时用sys查看一下sid 对应的系统事件:
SQL> select sid event from v$session where sid= ;
SID EVENT
enq: TX row lock contention
可以看到 在等一个row lock的结束
这时在窗口一执行mit:
SQL> mit;
Commit plete
这时在窗口二的update就有反应了
这时再用sys查看一下sid 对应的系统事件:
SQL> select sid event from v$session where sid= ;
SID EVENT
SQL*Net message from client
在这可以看到等待结束了
SQL> select sid type lmode request from v$lock where sid in( ) order by sid;
SID TY LMODE REQUEST
TX
TM
以上可以看到 sid 占有的锁已经都释放了
SQL> select * from test ;
A A
在这也可以看到a = 这一行的A 值已经被更新为 了
这时再到窗口二执行mit
SQL> mit;
Commit plete
再看锁的情况 发现fortune用户的锁都已经释放了
SQL> select sid type lmode request from v$lock where sid in( ) order by sid;
no rows selected
SQL> select * from test ;
A A
在这也可以看到a = 这一行的A 值已经被更新为 了
三 锁的解除
在窗口一上执行以下更新:
SQL> update test set a = where a = ;
row updated
在窗口二执行以下更新:
SQL> update test set a = where a = ;
这时和上面一样 可以看到窗口二hang住了 没反应了 我等了半小时还是一样
这时用sys用户来查询一下fortune的锁情况:
SQL> select sid type lmode request from v$lock where sid in( ) order by sid;
SID TY LMODE REQUEST
TM
TX
TM
TX
可以看到和前面的结果是一样的 sid 在等 的一个锁释放掉
使用以下语句来查一下锁的情况:
SQL> select A sid b serial#
decode(A type
MR Media Recovery
RT Redo Thread
UN User Name
TX Transaction
TM DML
UL PL/SQL User Lock
DX Distributed Xaction
CF Control File
IS Instance State
FS File Set
IR Instance Recovery
ST Disk Space Transaction
TS Temp Segment
IV Library Cache Invalida tion
LS Log Start or Switch
RW Row Wait
SQ Sequence Number
TE Extend Table
TT Temp Table
Unknown ) LockType
c object_name
b username
b osuser
decode(a lmode None
Null
Row S
Row X
Share
S/Row X
Exclusive Unknown ) LockMode
B MACHINE D SPID b PROGRAM
from v$lock a v$session b all_objects c V$PROCESS D
where a sid=b sid and a type in ( TM TX )
and c object_id=a id
AND B PADDR=D ADDR
order by username
;
SID SERIAL# LOCKTYPE OBJECT_NAME LOCKMODE MACHINE SPID PROGRAM
DML TEST Row X qatest sqlplus@qatest (TNS V V )
DML TEST Row X qatest sqlplus@qatest (TNS V V )
或者用以下语句也可以:
SQL> select sid serial# from v$session User_Info;
SID SERIAL#
SID SERIAL#
用以下语句来结束窗口一的锁session
SQL> alter system kill session ;
System altered
这时到窗口二可以看到窗口有反应了 update成功了(但还没有mit )
这时如果在窗口一执行mit 可以看到以下报错
SQL> mit;
mit
*
ERROR at line :
ORA : your session has been killed
这时到窗口二执行mit
SQL> mit;
Commit plete
SQL> select * from test ;
A A
cha138/Article/program/Oracle/201311/18483
相关参考
查找Oracle用户锁的DLLSQL 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 查找Orac
解析Oracle多粒度锁的验证步骤 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 创建测试表
我对ORACLE数据锁的一点体会 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我对文章中意向锁
Oracle数据库锁的常用类型有哪些 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 此文章主要是
Oracle数据库查找被锁以及解锁的解决办法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! or
知识大全 Spring i18n的better practice
Springi18n的betterpractice 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!因
加锁是为了防止一些操作而进行的比如说共享锁可以防止别的事务加上排他锁如果多个事物对同一张表都加上共享锁的话也就都不能修改了可以进行读操作如果只有一个事物加上共享锁是可以修改的 而排他锁呢则是不能
哪里有卖课桌锁的?急!小卖店呵呵一元二次不等式,急是不是(a-2)x的平方是不是+4求以下文字的翻译急!!YuanlongpingisacademicianofChineseacademyofengi
远在3000多年前,我国就有了锁。不过,最早的锁没有机关,它并不能把门锁锁住,只是做成老虎等凶恶动物的形状,想借以把小偷吓走,只好说是一种象征性的锁。据说鲁班是第一个给锁装上机关的人。从出土文物及文字
Sql中游标和加锁的问题分析与解答 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! <%