Oracle出现ORA

80次阅读
没有评论

共计 2524 个字符,预计需要花费 7 分钟才能阅读完成。

这篇文章主要介绍了 Oracle 出现 ORA-00054 错误怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。

在进行数据库维护的过程中要删除一个中间表,遇到如下错误:

sys@DW drop table dwods.member_DELTA;

drop table dwods.member_DELTA

                 *

ERROR at line 1:

ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

发现表因为执行 dml 被锁住,下面给出错误的处理思路和过程,具体情况而异:

1 查看被数据库中被锁的用户信息:

sys@DW select t2.username,t2.sid,t2.serial#,t2.logon_time 

  2  from v$locked_object t1,v$session t2 

  3  where t1.session_id=t2.sid order by t2.logon_time;

USERNAME                              SID    SERIAL# LOGON_TIME

—————————— ———- ———- ——————-

DWODS                                1520      42477 2011-11-17 18:00:40

DWODS                                1594       7385 2011-11-17 18:41:27

dwods 被锁住,因为事务是 18:41 分发起的,所以查看一下 sid 为 1594 的信息,

2 查询出 sql 信息根据实际情况,进行操作

sys@DW select sql_text from v$session a,v$sqltext_with_newlines b 

  2    where DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash_value 

  3    and a.sid= sid order by piece; 

Enter value for sid: 1594

old   3:   and a.sid= sid order by piece

new   3:   and a.sid=1594 order by piece

SQL_TEXT

—————————————————————-

insert /*+ append +*/ into DWODS.MEMBER_delta (ACTION,

ADDRESS,

……..

32 rows selected.

正是发起的那个语句,查看用户的信息进行确认

sys@DW @user_info 

Enter value for sid: 1594

old  12: where a.sid = sid

new  12: where a.sid = 1594

USERNAME  SID   SERIAL# OS Process   Logon time         OSUSER  PROGRAM                 STATUS

——— —– ——- —————————–  ——– ———————– ———–

DWODS     1594   7385    3309      17/11/2011 18:41:27  etl     sqlplus@dw1 (TNS V1-V3)  ACTIVE

1 row selected.

3 选择 kill 掉进程  

这里知道此 session 可以杀掉,所以杀掉此 session

sys@DW alter system  kill session 1594,7385  

System altered.

4 进行确认: 

在数据库确认

sys@DW @user_info

Enter value for sid: 1594

old  12: where a.sid = sid

new  12: where a.sid = 1594

no rows selected

sys@DW select t2.username,t2.sid,t2.serial#,t2.logon_time 

  2  from v$locked_object t1,v$session t2 

  3  where t1.session_id=t2.sid order by t2.logon_time;

USERNAME            SID SERIAL# LOGON_TIME

————— ——- ——- ——————-

DWODS              1520   42477 2011-11-17 18:00:40

DWODS              1520   42477 2011-11-17 18:00:40

2 rows selected.

在 os 层确认,进程已经被杀。

oracle@dw1:/home/oracle ps -ef | grep 3309

oracle   22565 18543  0 18:59 pts/5    00:00:00 grep 3309

再次执行删除表的操作:

sys@DW drop table dwods.member_DELTA;

Table dropped.

—— 附上:

user_info。sql 脚本的内容:

select

        a.username,

        a.sid,

        a.serial#,

        b.spid OS Process ,

        to_char(a.logon_time, DD/MM/YYYY hh34:mi:ss) Logon time ,

        a.osuser,

        a.program,

        a.status

from v$session a, v$process b

where a.sid = sid

and a.paddr = b.addr

/

感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“Oracle 出现 ORA-00054 错误怎么办”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计2524字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)