oracle阻塞怎么解决,oracle查询阻塞

oracle卡住,该如何解决

解决办法:

专注于为中小企业提供网站制作、网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业平昌免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

重启

SQL shutdown abort

SQL startup

重启解决不了,检查日志是否能够切换

SQL alter system switch logfile;

3. 如果日志无法切换,检查是否开归档,一般日志无法切换都是由于开归档,归档默认在快速恢复区,快速恢复区满了造成。

使用RMAN删除归档日志,清理快速恢复区空间

rman target /

RMAN delete archivelog all;

oracle执行了一条for update卡住了,没有提交。之后再执行修改就改不了了

我根据我遇到的相同问题整理的解决方法

问题场景:

在更新或插入等DML操作中,因网络中断或忘记提交,导致相同记录再次执行时感知为长时间无法执行成功。

解决方法:

一、code处理

1.再次执行相同记录的语句;

2.查询被阻塞的会话

SELECT l.session_id,o.owner,o.object_name, machine, s.sid, s.serial#,s.blocking_session

FROM v$locked_object l, dba_objects o, v$session s

WHERE l.object_id = o.object_id

AND l.session_id = s.sid

AND s.blocking_session is not null;

3.根据被阻塞会话查找原会话信息

SELECT l.session_id, o.owner, o.object_name, machine, s.sid, s.serial#,s.sid||','||s.serial# kill_session

FROM v$locked_object l, dba_objects o, v$session s

WHERE l.object_id = o.object_id

AND l.session_id = s.sid

AND s.sid = 759;

SELECT s.sid, s.serial#,s.sid||','||s.serial# kill_session FROM v$session s WHERE sid = 759;

4.杀死原会话

alter system kill session '759,18523';

二、PLSQL处理

原理与code处理一样,先找到现有会话,然后反推阻塞会话,最后将其杀死

1.查询被阻塞的会话,找到Blocking session

2.根据Blocking session查找原会话信息,直接点击kill杀会话

oracle数据库表被锁了不能操作怎么办

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

你要先查一下是那个会话那个sql锁住了表,有可能这是正常业务需求,不建议随便KILL

session,如果这个锁表是正常业务你把session

kill掉了会影响业务的。

建议先查原因再做决定。

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

select

count(*)

from

v$locked_object;

select

*

from

v$locked_object;

(2)查看哪个表被锁

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;

(3)查看是哪个session引起的

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;

(4)查看是哪个sql引起的

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;

(5)杀掉对应进程

执行命令:alter

system

kill

session'1025,41';

其中1025为sid,41为serial#.


当前标题:oracle阻塞怎么解决,oracle查询阻塞
本文网址:http://scyanting.com/article/dschiec.html