質問

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

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

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

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

ORA-00942:テーブルまたはビューは存在しません

役に立ちましたか?

解決

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

他のヒント

これに対処する1つの方法は、ローカルデータベース上のマスターテーブルの具体化されたビューを作成し、MVを指す整合性制約を作成することです。

それはうまくいきます。しかし、それはいくつかの問題につながる可能性があります。まず、具体化されたビューを完全に更新する必要がある場合は、行う前に制約を無効にする必要があります。それ以外の場合、Oracleは新しい行を持ち込む前にMVの行を削除することができません。

第二に、いくつかのタイミング遅延に遭遇する可能性があります。たとえば、リモートサイトのマスターテーブルにレコードを追加するとします。次に、地元のテーブルに子供のレコードを追加します。しかし、MVは毎日リフレッシュするように設定されており、まだ発生していません。 MVが更新されていないという理由だけで、外国のキー違反が得られます。

このルートに行くと、最も安全なアプローチは、MVをマスターテーブルのコミットで迅速に更新するように設定することです。これは、DBリンクをほぼ常に開いたままにすることを意味します。そして、完全な更新を行う必要がある場合は、管理者の仕事が必要です。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top