您可以尝试查询DBA_OBJECTS
和查找所有属于SYS
和最近创建的任何内容。例如,以下列出了SYS
今天在模式中创建的所有对象:
SELECT object_name, object_type
FROM dba_objects
WHERE owner = 'SYS'
AND created >= TRUNC(SYSDATE)
然后,您可以使用它来生成一些动态 SQL 来删除对象。这应该可以节省您手动删除它们的时间。
但是请注意,可能有一些对象是最近创建的并且应该归 拥有SYS
,所以在你删除它之前,请仔细检查你要删除的对象是什么。(在我的 Oracle 11g XE 数据库上,SYS
模式中的最新对象是大约一周半前创建的索引和表分区。)
我不知道你有什么类型的对象,但是对象类型之间会有一些依赖关系。特别是,如果另一个表具有指向它的外键约束,则不能删除该表。 这个答案提供了一些 PL/SQL 代码来禁用表上的所有约束,如果需要,您可以调整以删除所有约束,或者只删除所有外键约束。
此外,如果表列使用类型,则需要在删除类型之前删除该表。同样,您可能必须注意类型是否依赖于其他类型。
其他需要注意的事项:
- 您不需要丢弃包裹体,只需丢弃包裹,包裹体就会随之而来。
- 您不需要删除表和视图上的触发器:删除表或视图时触发器会消失。同样,删除表会删除该表上的所有索引。
- 视图、过程、函数和包可能依赖于其他对象,但它们不应该阻止那些其他对象被删除。视图/过程/功能/包应该变得无效,但如果它们无论如何都要被删除,那没关系。
您没有指定您拥有哪些其他类型的对象,因此您可能会遇到其他问题。
编辑:针对您更新的问题:
- 删除 FK 约束后,您可以按照指定的顺序删除对象。桌子将是最难的部分:一旦它们都消失了,其他一切都应该是直截了当的。
- 您不需要删除索引,因为它们会在您删除表时自动删除。
- 您不需要删除表或视图上的触发器,因为当您删除视图或表时这些触发器会自动删除。(我不知道您是否有任何其他触发器,例如
AFTER LOGON ON DATABASE
,但这些触发器可能不会包含在导出中。)
- 我只有 Oracle XE,它不支持 Java,所以我不能确定删除 Java 类所需的确切咒语。Oracle 文档
DROP JAVA
可能对您有所帮助。