我能否在不同的数据库之间创建外键?

7
我们有两个数据库 - DB1和DB2。
我能否在DB1中创建一个与DB2中的表之一有关系的表?换句话说,我可以从另一个数据库中的表中使用外键吗?
我用不同的用户连接到这些数据库。有什么想法吗?
现在,我收到错误消息:
ORA-00942:表或视图不存在。
2个回答

10

不,Oracle不允许您通过数据库链接引用表来创建外键约束。您需要使用触发器来执行完整性。


1
请记住,任何一个数据库的备份/恢复都可能破坏这个“约束条件”。 - Gary Myers

8
创建本地数据库的主表的物化视图,然后创建指向MV的完整性约束是处理这个问题的一种方法。这种方法可行,但可能会导致一些问题。首先,如果您需要对物化视图进行完全刷新,则需要在执行此操作之前禁用约束。否则,在引入新行之前,Oracle将无法删除MV中的行。其次,您可能会遇到一些时间延迟。例如,假设您在远程站点上向主表添加了一条记录。然后您想要向本地表添加子记录。但MV设置为每天刷新,而且还没有刷新。您将收到外键冲突错误,只是因为MV还没有刷新。如果您选择这种方法,最安全的方法是将MV设置为在主表提交时快速刷新。这意味着几乎始终保持DB Link打开。如果您需要对其进行完全刷新,则需要进行管理工作。总的来说,我们通常发现触发器更容易实现。在某些情况下,我们仅在逻辑模型中定义了FK,但手动设置了每日作业来检查违规并提醒员工。当然,我们非常小心,所以这些警报极为罕见。

我知道这已经过时了,但值得一提的是,对于像我一样通过谷歌找到这个答案的人来说,你不能在dblink上进行提交后刷新。 - Kris Johnston

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接