【Oracle】ORA-00054 错误解决方法

简介:
在进行数据库维护的过程中要删除一个中间表,遇到如下错误:
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 hh24: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
/
相关文章
|
5月前
|
Oracle 关系型数据库
Oracle新建数据表的两种方法
Oracle新建数据表的两种方法
|
7月前
|
存储 Oracle 关系型数据库
Oracle中“ORA-00060: 等待资源时检测到死锁” 或存储过程编译卡死的一种解决方法
Oracle中“ORA-00060: 等待资源时检测到死锁” 或存储过程编译卡死的一种解决方法
529 0
|
4月前
|
SQL Oracle 关系型数据库
Oracle之替代OR的另一种方法
Oracle之替代OR的另一种方法
75 0
|
5月前
|
Oracle 关系型数据库
oracle ORA-00054 资源正忙
oracle ORA-00054 资源正忙
|
6月前
|
SQL Oracle 关系型数据库
Oracle连接工具PLSQL登录时提示初始化失败,无法锁定OCI.dll错误解决
Oracle连接工具PLSQL登录时提示初始化失败,无法锁定OCI.dll错误解决
309 0
|
7月前
|
存储 Oracle Java
[亲测可用]hibernate调用Oracle存储过程|Spring Data JPA调用Oracle存储过程方法
[亲测可用]hibernate调用Oracle存储过程|Spring Data JPA调用Oracle存储过程方法
|
7月前
|
SQL Oracle 关系型数据库
Oracle数据库优化的总结及优化方法
Oracle数据库优化的总结及优化方法
56 0
|
10月前
|
SQL Oracle 关系型数据库
一种SqlServer数据迁移到Oracle的方法总结
一种SqlServer数据迁移到Oracle的方法总结
374 0
|
10月前
|
存储 SQL Oracle
Oracle 存储过程和方法全攻略:实战详解调用技巧与注意事项
Oracle 存储过程和方法全攻略:实战详解调用技巧与注意事项
368 0
|
10月前
|
Oracle 关系型数据库
oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT
oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT
83 0

推荐镜像

更多