使用循环依赖项恢复oracle转储是否安全且可行?

使用循环依赖项恢复oracle转储是否安全且可行?,oracle,Oracle,假设有两个模式A和B: B定义了A表中的多个视图 A定义了一些使用B模式函数的触发器 为A或B创建转储并稍后恢复是否安全?例如,如果我创建dumpA并尝试在没有B的情况下将其还原到Oracle实例中,我会得到编译错误。那么A或B转储是否可以在没有编译错误的情况下恢复?(可以先还原A然后还原B并再次从A还原错误部分)。有没有办法或实践来处理这种情况?循环依赖通常被认为是一件坏事。最接近最佳实践的事情是没有它们。拥有第三个模式C,其中一个或两个模式共享内容。因此,以下的一些变化: C->B和C->

假设有两个模式
A
B

  • B
    定义了
    A
    表中的多个视图
  • A
    定义了一些使用
    B
    模式函数的触发器

  • A
    B
    创建转储并稍后恢复是否安全?例如,如果我创建dump
    A
    并尝试在没有
    B
    的情况下将其还原到Oracle实例中,我会得到编译错误。那么
    A
    B
    转储是否可以在没有编译错误的情况下恢复?(可以先还原
    A
    然后还原
    B
    并再次从
    A
    还原错误部分)。有没有办法或实践来处理这种情况?

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

    • C
      ->
      B
      C
      ->
      A
      ,或
    • C
      ->
      B
      ->
      A
      ,或
    • B
      ->
      C
      ->
      A
    这提供了一条清晰的恢复路径:当我们恢复
    a
    (无)或
    C
    (可能所有内容)时,我们可以找出将要中断的内容

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

    观点略有不同;如果缺少依赖项,则它们将失败,除非我们使用FORCE关键字:
    创建或替换FORCE v_,无论是什么…
    。使用FORCE时,视图将在无效状态下创建,以便稍后重新编译

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


    最后一件事:依赖转储(导出)来备份代码可能不是一个好主意。对PL/SQL程序、视图等使用源代码管理。它比导入模式提供了更多的部署控制。

    您是指“视图”还是“物化视图”?这是有区别的。我指的是视图,但如果您使用
    物化视图
    功能提供扩展答案,那就更好了。