3

我正在使用 oracle11g 数据库。我有一个名为的表,phonenumbers_tbl我在该表上执行了DROP命令。但它正在返回错误resource busy and acquire with NOWAIT specified or timeout expired。之后,我使用命令更改会话alter session set ddl_lock_timeout = 600并再次尝试删除表。但是这个错误仍然存​​在

4

3 回答 3

3

尝试先执行此操作,并检查是否有人来自该表other session或在该表上加your session了锁。如果you已在该表上加了锁,请尝试执行commit/rollback。如果加someone else了锁,请询问him/her您是否有权限kill his session。然后删除该表。

           select session_id "sid",SERIAL#  "Serial",
    substr(object_name,1,20) "Object",
      substr(os_user_name,1,10) "Terminal",
      substr(oracle_username,1,10) "Locker",
      nvl(lockwait,'active') "Wait",
      decode(locked_mode,
        2, 'row share',
        3, 'row exclusive',
        4, 'share',
        5, 'share row exclusive',
        6, 'exclusive',  'unknown') "Lockmode",
      OBJECT_TYPE "Type"
    FROM
      SYS.V_$LOCKED_OBJECT A,
      SYS.ALL_OBJECTS B,
      SYS.V_$SESSION c
    WHERE
      A.OBJECT_ID = B.OBJECT_ID AND
      C.SID = A.SESSION_ID
    ORDER BY 1 ASC, 5 Desc
于 2012-10-19T09:02:58.347 回答
1

是的 !最后我得到了一个解决方案,将表移动phonenumber_tbl到另一个表空间system并删除表。

于 2012-10-19T09:03:28.033 回答
1

首先获取表锁定会话然后终止会话
SELECT a.sid,a.serial#, a.username,c.os_user_name,a.terminal, b.object_id,substr(b.object_name,1,40) object_name from v$session a, dba_objects b, v$locked_object c 其中 a.sid = c.session_id 和 b.object_id = c.object_id;

ALTER SYSTEM KILL SESSION 'sid,serial#' ;

于 2020-03-09T08:34:04.970 回答