oracle数据库中 alter table 表名 lock mode(row) 这句话 什么意思

oracle数据库中 alter table 表名 lock mode(row) 这句话 什么意思,第1张

1。exclusive mode:如果不希望别的会话 lock/insert/update/delete表中任意一行,只允许查询,可以用lock table table_name in exclusive mode。这个锁定模式级别最高,并发度最小。

2。share mode:如果允许别的会话查询或select for update以及lock table table_name in share mode,不允许insert/update/delete,可以用lock table table_name in share mode。

首先,向你介绍一个动态视图:v$sql

该视图展示最近一段时间所有执行过的sql语句

select from v$sql

即可。

如果报错找不到v$sql,一般是权限问题,换sysdba就肯定能查到。

但要注意的是“隐式sql”,很多sql语句是调用执行的,(比如,存储过程中对dbms包的调用,再如执行create 语句所触发的对系统表空间、数据字典的修改等等。),这些语句同样会展现在v$sql中。

还有其它与sql历史记录相关的v$视图,详情可以参考Oracle官方文档《Oracle® Reference》,直接给你个102的文档链接,够方便了吧:

>

在pl/sql Developer工具的的菜单“tools”里面的“sessions”可以查询现在存在的会话,但是我们很难找到那个会话被锁定了,想找到所以被锁的会话就更难了,下面这叫查询语句可以查询出所以被锁的会话。如下:

SELECT snusername, mSID,snSERIAL#, mTYPE,

DECODE (mlmode,

0, 'None',

1, 'Null',

2, 'Row Share',

3, 'Row Excl',

4, 'Share',

5, 'S/Row Excl',

6, 'Exclusive',

lmode, LTRIM (TO_CHAR (lmode, '990'))

) lmode,

DECODE (mrequest,

0, 'None',

1, 'Null',

2, 'Row Share',

3, 'Row Excl',

4, 'Share',

5, 'S/Row Excl',

6, 'Exclusive',

request, LTRIM (TO_CHAR (mrequest, '990'))

) request,

mid1, mid2

FROM v$session sn, v$lock m

WHERE (snSID = mSID AND mrequest != 0) --存在锁请求,即被阻塞

OR ( snSID = mSID --不存在锁请求,但是锁定的对象被其他会话请求锁定

AND mrequest = 0

AND lmode != 4

AND (id1, id2) IN (

SELECT sid1, sid2

FROM v$lock s

WHERE request != 0 AND sid1 = mid1

AND sid2 = mid2)

)

ORDER BY id1, id2, mrequest;

通过以上查询知道了sid和 SERIAL#就可以开杀了

alter system kill session 'sid,SERIAL#';

希望对你有所帮助。我也是不太懂,是在网上了解的。努力学习ing~~~

用如下语句查询:

select 'blocker(' || lbsid || ':' || sbusername || ')-sql:' ||

       qbsql_text blockers,

       'waiter (' || lwsid || ':' || swusername || ')-sql:' ||

       qwsql_text waiters

  from v$lock lb, v$lock lw, v$session sb, v$session sw, v$sql qb, v$sql qw

 where lbsid = sbsid

   and lwsid = swsid

   and sbprev_sql_addr = qbaddress

   and swsql_address = qwaddress

   and lbid1 = lwid1

   and swlockwait is not null

   and sblockwait is null

   and lbblock = 1;

如果有被锁的sql,查询中有结果:

下面3个语句是我经常使用来解决oracle锁问题的 -- 注意你的用户有没有权限问题

1 查看被锁的表

SELECT pspid, aserial#, cobject_name, bsession_id, boracle_username,

bos_user_name

FROM v$process p, v$session a, v$locked_object b, all_objects c

WHERE paddr = apaddr AND aprocess = bprocess

AND cobject_id = bobject_id

2 查看是哪个进程锁的

SELECT sid, serial#, username, osuser FROM v$session where osuser = 'tangpj'

3 杀掉这个进程 alter system kill session 'sid,serial#';

select bowner,bobject_name,asession_id,alocked_mode

from v$locked_object a,dba_objects b

where bobject_id = aobject_id;

看看这个行不行~

你说的不是死锁,死锁的话oracle会自己处理,杀掉会话。你说的应该只是普通的锁,造成了阻塞,执行一个脚本$ORACLE_HOME/rdbms/admin/utllocktsql,可以把锁结构列出来。

以上就是关于oracle数据库中 alter table 表名 lock mode(row) 这句话 什么意思全部的内容,包括:oracle数据库中 alter table 表名 lock mode(row) 这句话 什么意思、如何查询oracle数据库的 *** 作记录、oracle数据库实例被锁如何解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9760478.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存