Oracle 禁用表锁时删除表空间和用户

Oracle 禁用表锁时删除表空间和用户,oracle,Oracle,下面是我在oracle本地机器上删除和重新创建用户和表空间时运行的语句 DROP TABLESPACE X INCLUDING CONTENTS AND DATAFILES ; DROP USER X CASCADE; CREATE TABLESPACE X DATAFILE '$ORACLE_PATH/X.dbf' SIZE 128M AUTOEXTEND ON EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO

下面是我在oracle本地机器上删除和重新创建用户和表空间时运行的语句

DROP TABLESPACE X INCLUDING CONTENTS AND DATAFILES ;
DROP USER X CASCADE;
CREATE TABLESPACE X DATAFILE '$ORACLE_PATH/X.dbf' SIZE 128M AUTOEXTEND ON EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
CREATE USER X IDENTIFIED BY xxxxxxx DEFAULT TABLESPACE X TEMPORARY TABLESPACE temp;
GRANT exp_full_database TO X;
GRANT CONNECT,RESOURCE,DBA TO X;
我们最近添加了一个条件来禁用此表空间中表的锁,上面的DROP命令现在发出:

Error report:
SQL Error: ORA-00604: error occurred at recursive SQL level 1
ORA-00069: cannot acquire lock -- table locks disabled for TABLE
00604. 00000 -  "error occurred at recursive SQL level %s"
是否有人知道一种在不启用锁的情况下删除用户和表空间的方法,或者有更好的方法在禁用锁的情况下重新创建本地表空间和用户

欢呼声

该命令的目的是防止DDL。如果您可以在不重新启用表锁的情况下删除表,那么对我来说这将是一个bug

在您的情况下,必须使用以下脚本启用表锁:

BEGIN
   FOR cc IN (SELECT owner, table_name
                FROM all_tables
               WHERE tablespace_name = :x
                 AND table_lock = 'DISABLED') LOOP
      EXECUTE IMMEDIATE 'ALTER TABLE "' || cc.owner || '"."' || 
                         cc.table_name || '" ENABLE TABLE LOCK';
   END LOOP;
END;
不幸的是,执行可能需要很长时间,甚至:

注意:Oracle数据库等待 中的活动DML事务 数据库在锁定之前已完成 桌子。有时结果 延误是相当大的


您使用了什么方法来禁用此表空间上的锁?
ALTER TABLE\u name disable TABLE lock为反馈欢呼@Vincent,我只是不确定在每次重新创建表空间和用户之前是否需要这样做。我已经有一个脚本运行的所有权问题,所以将修改使用这个。