是否安全且可以恢复具有循环依赖性的oracle dump?

时间:2017-04-13 10:03:23

标签: oracle

假设有2个架构AB

  1. B定义了A个表格
  2. 中的多个视图
  3. A定义了一些使用B架构函数的触发器。
  4. AB创建转储并稍后恢复是否安全?例如,如果我创建转储A并尝试将其还原到没有B的Oracle实例,则会出现编译错误。那么可以在没有编译错误的情况下恢复AB转储吗? (可以恢复A然后B并再次从A恢复错误部分。有没有办法或做法来处理这种情况?

1 个答案:

答案 0 :(得分:2)

循环依赖通常被认为是一件坏事。最接近最佳实践的是没有它们。拥有第三个模式C,其中包含一个或两个模式共享的内容。所以,有些变化:

  • C - > BC - > A
  • C - > B - > A
  • B - > C - > A

这提供了一个明确的恢复路径:当我们恢复A(无)或C(可能是一切)时,我们可以弄清楚会破坏什么。

但是考虑到你就在你身边,要记住的是代码可以重新编译。我们可以创建缺少依赖关系的包,函数和触发器;它们将无效,但可以在依赖项到位后重新编译。

观点略有不同;除非我们使用FORCE关键字create or replace force v_whatever as ...,否则如果缺少依赖项,它们将失败。使用FORCE,视图将在无效状态下创建,以便稍后重新编译。

另一个复杂性是无效对象的授权将失败。您有循环授权,这将使恢复变得困难,因为您需要使B中的对象有效,然后才能授予A,反之亦然。

最后一件事:依靠dump(导出)来备份代码可能是一个坏主意。对PL / SQL程序,视图等使用源代码控制。与导入架构相比,它提供了更多的部署控制。