7

DB1とDB2の2つのデータベースがあります。

DB2のテーブルの1つと関係のあるテーブルをDB1に作成できますか?つまり、別のデータベースの外部キーをテーブルに含めることはできますか?

さまざまなユーザーでこれらのデータベースに接続します。何か案は?

今、私はエラーを受け取ります:

ORA-00942:表またはビューが存在しません

4

2 に答える 2

10

いいえ、Oracleでは、データベースリンクを介してテーブルを参照する外部キー制約を作成することはできません。整合性を強制するには、トリガーを使用する必要があります。

于 2010-06-04T10:35:28.063 に答える
8

これに対処する1つの方法は、ローカルデータベースにマスターテーブルのマテリアライズドビューを作成してから、MVを指す整合性制約を作成することです。

それはうまくいきます。しかし、それはいくつかの問題につながる可能性があります。まず、マテリアライズド・ビューを完全にリフレッシュする必要がある場合は、実行する前に制約を無効にする必要があります。そうしないと、Oracleは新しい行を取り込む前にMVの行を削除できません。

次に、タイミングの遅延が発生する可能性があります。たとえば、リモートサイトのマスターテーブルにレコードを追加するとします。次に、子レコードをローカルテーブルに追加します。しかし、MVは毎日更新されるように設定されており、それはまだ行われていません。MVが更新されていないという理由だけで、外部キー違反が発生します。

このルートを使用する場合、最も安全な方法は、マスターテーブルのコミット時にMVを高速リフレッシュするように設定することです。これは、DBリンクをほぼ常に開いたままにすることを意味します。また、完全な更新が必要になった場合は、管理者が行う必要があります。

全体として、トリガーの方が簡単であることが一般的にわかっています。場合によっては、論理モデルでFKを定義しただけで、違反をチェックしてスタッフに警告する毎日のジョブを設定することにより、手動で実装しました。もちろん、私たちはかなり注意しているので、これらのアラートは非常にまれです。

于 2010-06-04T13:27:39.540 に答える