我可以跨数据库创建外键吗?

时间:2010-06-04 09:41:55

标签: sql oracle oracle10g ora-00942

我们有2个数据库 - DB1& DB2。

我可以在DB1中创建一个与DB2中某个表有关系的表吗? 换句话说,我可以从另一个数据库中获取表中的外键吗?

我与不同的用户连接到这些数据库。 有什么想法吗?

现在,我收到错误:

  

ORA-00942:表或视图不存在

2 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:8)

处理此问题的一种方法是在本地数据库上创建主表的物化视图,然后创建指向MV的完整性约束。

有效。但它可能会导致一些问题。首先,如果您需要完全刷新物化视图,则需要在执行之前禁用约束。否则,在引入新行之前,Oracle将无法删除MV中的行。

其次,您可能会遇到一些时间延迟。例如,假设您将记录添加到远程站点上的主表。然后,您要将子记录添加到本地表。但是MV每天都会刷新,而且还没有发生。你会得到一个外键违规,只是因为MV没有刷新。

如果你选择这条路线,最安全的方法是在提交主表时将MV设置为快速刷新。这意味着几乎所有时间都要保持DB Link的开放状态。如果您需要进行全面刷新,那么您将有管理工作要做。

总而言之,我们通常发现触发器更容易。在某些情况下,我们只是在逻辑模型中定义了FK,但是通过设置每日工作来手动实现它,该工作将检查违规并提醒员工。当然,我们非常小心,所以这些警报非常罕见。