网站首页 > 文章中心 > 其它

如何减少oracle锁表

作者:小编 更新时间:2023-09-24 09:32:07 浏览量:219人看过

Oracle数据库老是被锁表,而且用解锁语句解开后,紧跟着又出来一堆锁,解也解不完

出现锁的根本解决办法不是去手动解锁啊,

而是应该去看,是哪个SESSION,哪个sql语句锁的,锁了哪些资源,是不是应该锁定这些资源!

如果有些锁是不必要的,要么commit事务来释放锁,要不就不锁定这些资源!

修改应用才是应该做的!

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

Session1创建测试表:

Table created.

SQL desc test;

Name Null? Type

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

ID NOT NULL NUMBER(10)

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

①. row created.

查看test表信息

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

①. row updated.

SQL commit;

Commit complete.

SQL select * from test updata;

ID NAME

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

①. tom

SQL select * from test;

update模拟锁表

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

注:不提交

查看哪个表被锁

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

查看是哪个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

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

杀掉对应进程

System altered.

no rows selected

session 1查询:

SQL select * from test;

select * from test

*

ERROR at line 1:

重新连接SQL

Connected to:

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

oracle数据库表被锁了怎么解锁

①.、在做Oracle监听程序测试时,发现帐户已经被锁定.

oracle查询资源占用,锁表解锁

① 先通过top命令查看产用资源较多的spid号

select sid,serial#,machine,username,program,sql_hash_value,sql_id,

select sql_text

from v$sqltext_with_newlines

where hash_value = hash_value

order by piece;

也可直接使用:

select a.*,b.SQL_TEXT from (

) a,v$sql b

where a.sql_id? = b.SQL_ID(◆)

Alter system kill session 'SID,SERIAL#'

解锁:

①查询哪些对象被锁:

? select object_name,machine,s.sid,s.serial#

? from v$locked_object l,dba_objects o ,v$session s

? where l.object_id = o.object_id and l.session_id=s.sid;

? select spid, osuser, s.program

? from v$session s,v$process p

oracle数据库锁表怎么解决

首先你要知道表锁住了是不是正常锁?因为任何DML语句都会对表加锁.

你要先查一下是那个会话那个sql锁住了表,有可能这是正常业务需求,不建议随便KILL session,如果这个锁表是正常业务你把session kill掉了会影响业务的.

建议先查原因再做决定.

(1)锁表查询的代码有以下的形式:

select count(*) from v$locked_object;

select * from v$locked_object;

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;

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;

select b.username,b.sid,b.serial#,c.* from v$locked_object a,v$session b,v$sql c where a.session_id = b.sid

and b.SQL_ID = c.sql_id and c.sql_id = ''

order by b.logon_time;

oracle数据库如何防止死锁问题

土嘎嘎的粉丝们大家好:这个死锁没办法完全避免,尽量的话在做事物提交的时候,提交完成后在进行其余的同一个表的操作,再就是insert、update等操作尽量能减少就减少.其实正常情况下是很少出现死锁的.

以上就是土嘎嘎小编为大家整理的如何减少oracle锁表相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章