gpt4 book ai didi

database - 在 ORACLE 10.2g 中删除从 'SYS' 用户错误导入的模式对象?

转载 作者:搜寻专家 更新时间:2023-10-30 20:18:35 24 4
gpt4 key购买 nike

我正在为一个 Web 项目开发 Oracle10.2g 数据库。我已经从文件 (some-file.dmp) 中的远程系统中导出了数据库的完整 Schema 对象。然后我想将文件的内容导入到本地系统上的另一个数据库中。该过程运行完美。

但是,我不小心将文件内容(包括表、 View 等)导入了SYS 用户。因此,SYS 用户现在挤满了大约 1500 不需要的对象。

我知道我可以单独丢弃对象,但是,这是一项令人厌烦的工作。现在,我想知道是否有任何方法可以撤消该过程并删除不需要的对象(从 SYS 用户删除表、 View 等错误导入)?

编辑:

导入对象特别包括

  1. 表格(显然包括 FK 约束)
  2. 浏览量
  3. 索引
  4. 套餐
  5. 程序
  6. 职能
  7. 序列
  8. 触发器
  9. Java代码

因此,它们是相互关联的。非常感谢任何想法或建议!

最佳答案

您可以尝试查询 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 模式中的最新对象是大约一周半前创建的索引和表分区。)

我不知道你有什么类型的对象,但是对象类型之间会有一些依赖关系。特别是,如果另一个表具有指向它的外键约束,则不能删除该表。 This answer提供了一些 PL/SQL 代码来禁用表上的所有约束,如果需要,您可以修改这些代码以删除所有约束,或者只删除所有外键约束。

此外,如果表列使用了一种类型,则需要先删除该表,然后再删除该类型。同样,您可能需要注意类型是否依赖于其他类型。

其他需要注意的事项:

  • 您不需要删除包体,只需删除包,包体就会随之消失。
  • 您不需要删除表和 View 上的触发器:触发器会在删除表或 View 时运行。同样,删除表会删除该表上的所有索引。
  • View 、过程、函数和包可能依赖于其他对象,但它们不应阻止其他对象被删除。 View /过程/函数/包应该变得无效,但如果它们无论如何都将被删除,那也没关系。

您没有指定您拥有的其他类型的对象,因此您可能会遇到其他问题。

编辑:回应您更新的问题:

  • 一旦您删除了 FK 约束,您就可以按照您指定的顺序删除对象。表格将是最难的部分:一旦它们都消失了,其他一切都应该很简单。
  • 您不需要删除索引,因为它们会在您删除表时自动删除。
  • 您不需要删除表或 View 上的触发器,因为当您删除 View 或表时,这些触发器会自动删除。 (我不知道您是否有任何其他触发器,例如 AFTER LOGON ON DATABASE,但无论如何这些触发器可能不会包含在导出中。)
  • 我只有 Oracle XE,它不支持 Java,所以我不能确定删除 Java 类所需的确切咒语。 Oracle documentation for DROP JAVA可能对你有帮助。

关于database - 在 ORACLE 10.2g 中删除从 'SYS' 用户错误导入的模式对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19241862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com