使用循环依赖项恢复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
创建转储并稍后恢复是否安全?例如,如果我创建dumpA
并尝试在没有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程序、视图等使用源代码管理。它比导入模式提供了更多的部署控制。您是指“视图”还是“物化视图”?这是有区别的。我指的是视图,但如果您使用
物化视图
功能提供扩展答案,那就更好了。