您如何衡量在 Oracle 中删除模式的影响?

How do you measure the impact of dropping a schema in Oracle?

我有一个过时的冗余模式,我想删除。 运行 DROP USER old_schema CASCADE 运行成功,掉线

如何确定删除此架构是否会导致数据库中的其他组件(在不同架构下)可能发生故障?

我已经编写了测试以确保与该模式的过程和类型(这是该模式中的唯一对象)接口的所有组件都可以正常工作(并且已在发行版中被取代和淘汰),但我想知道是否有办法(本机或其他方式)知道是否有任何对象仍然 link 此模式。


理想情况下,我希望有一些插件/实用程序/SQL-snippet 将检查所有 links to/from 您的架构并列出 dependencies/dependents 至:


编辑 01:

一条转瞬即逝的评论(已被立即删除)提到了一些关于无效对象的事情 - 有人可以对此进行推断吗?

没有任何一个实用程序可以为您执行此操作,因为系统可以通过多种方式依赖您的数据库架构。例如,脚本可能每 12 个月登录一次以执行某些任务,一些动态 SQL 可能来自另一个模式 运行,或者另一个数据库可能 运行 通过数据库 link 查询].

您可以通过检查模式是否允许直接连接来缩小可能性范围,然后查看对其对象的任何授权。

最终,您需要进行一些研究和测试,以评估删除架构的相对风险。如果您的环境得到相对良好的控制和记录,您应该能够非常自信地确定哪些代码或系统依赖于您希望删除的架构。

如果删除模式很重要,并且您希望将删除时出错的风险降至最低,您可以考虑对以下一组步骤进行变体:

  1. 创建数据库的非生产副本。

  2. 查询 DBA_OBJECTS 以获得 status='INVALID' 中的任何对象。应该有none.

  3. 删除架构(注意:这是您的非产品数据库!)。

  4. 查询 DBA_OBJECTS 以获得 status='INVALID' 中的任何对象。构建脚本以相应地修复这些问题。

  5. 尽您(和您公司)的能力测试所有应用程序和界面。构建脚本以实施发现的问题所需的任何其他修复。

  6. 创建数据库的另一个非生产副本。删除架构。测试您的修复脚本。也许让另一个团队做一些额外的测试以防遗漏某些东西。

  7. 进行备份,然后在生产环境中删除架构。 运行 您的修复脚本。

  8. 等待一些未经测试的关键位开始失败时的尖叫声。如果这种情况立即发生,请考虑从备份中恢复架构。注意:可能需要 24 小时或 12 个月,某些事情才会开始失败(例如每日或每年计划的作业)。