我由這個SQL * Plus腳本,根據對方的建議,從當前用戶刪除的所有對象:丟棄的過程說明了在USER_OBJECTS
SET ECHO OFF
SET HEADING OFF
SET PAGESIZE 0
SET FEEDBACK OFF
SET TIMING OFF
SET TIME OFF
SET TRIMSPOOL ON
SET TRIMOUT ON
SET LINESIZE 100
SET TERMOUT OFF
SPOOL eliminar-todo
/*
* Descartamos objetos en la papelera ya que intentar eliminarlos directamente genera
* «ORA-38301: no se puede realizar DDL/DML en objetos de la papelera de reciclaje»
*/
SELECT 'DROP ' || UO.OBJECT_TYPE || ' "' || UO.OBJECT_NAME || '"' ||
DECODE(UO.OBJECT_TYPE,
'CLUSTER', ' INCLUDING TABLES CASCADE CONSTRAINTS',
'OPERATOR', ' FORCE',
'TABLE', ' CASCADE CONSTRAINTS',
'TYPE', ' FORCE',
'VIEW', ' CASCADE CONSTRAINTS',
'') || ';'
FROM USER_OBJECTS UO
LEFT JOIN USER_RECYCLEBIN UR ON UO.OBJECT_NAME=UR.OBJECT_NAME
WHERE UO.OBJECT_TYPE IN (
'CLUSTER', 'CONTEXT', 'DATABASE LINK', 'DIMENSION', 'DIRECTORY', 'FUNCTION', 'INDEX TYPE',
'JAVA', 'LIBRARY', 'MATERIALIZED VIEW', 'OPERATOR', 'OUTLINE', 'PACKAGE', 'PROCEDURE',
'SEQUENCE', 'SYNONYM', 'TABLE', 'TYPE', 'VIEW'
)
AND UR.OBJECT_NAME IS NULL
ORDER BY UO.OBJECT_TYPE, UO.OBJECT_NAME;
/
SPOOL OFF
SET TERMOUT ON
@eliminar-todo.lst
PURGE RECYCLEBIN;
我有這樣的罰款全部工作的舊簡化版本時間:
select 'drop '||object_type||' '||object_name||
decode(object_type,'CLUSTER',' including tables cascade constraints',
'OPERATOR', ' force',
'TABLE',' cascade constraints',
'TYPE', ' force',
'VIEW',' cascade constraints',
'')||';'
from user_objects
where object_type in ('CLUSTER', 'CONTEXT', 'DATABASE LINK', 'DIMENSION',
'DIRECTORY', 'FUNCTION', 'INDEX TYPE', 'JAVA',
'LIBRARY', 'MATERIALIZED VIEW', 'OPERATOR',
'OUTLINE', 'PACKAGE', 'PROCEDURE', 'SEQUENCE',
'SYNONYM', 'TABLE', 'TYPE', 'VIEW')
order by object_type, object_name
...但觸發語法錯誤當用戶有BIN$...
表。
我試過雙引號的標識符,但得到ORA-38301
代替:
不能在回收站
當前版本試圖避免發出DELETE TABLE
報表BIN$...
表在對象執行DDL/DML。爲此,我使用用戶回收站加入用戶對象並省略匹配項。我再也沒有BIN$...
表的問題。不過,現在我在3次得到這樣的1此錯誤消息:
DROP PROCEDURE "RESET_SEQUENCE"
*
ERROR en línea 1:
ORA-04043: el objeto RESET_SEQUENCE no existe
顯然,程序RESET_SEQUENCE
顯示了在USER_OBJECTS
,但不再存在時DROP PROCEDURE "RESET_SEQUENCE"
運行。
- 這怎麼可能?
- 我該如何解決?
爲什麼不直接使用原來的查詢並添加「AND object_name不是'BIN $%'」而是? – 2013-03-22 13:33:10
@FrankSchmitt我不是Oracle專家,所以我不知道是否所有的bin項目都以'BIN $'開頭,所有以'BIN $'開頭的項目都是bin項目。 USER_RECYCLEBIN視圖看起來像是一條更安全的路徑。無論如何,我的ORA-04043似乎與此無關,是嗎? – 2013-03-22 13:36:56
不,你的錯誤與此無關。我只是好奇而已:-) – 2013-03-23 06:51:53