2017-07-11 20 views
0

オラクル同期2つのテーブル

表Aは、DBサーバ 表B上では

表Aに移入される別のサーバー上にありますデータ。 テーブルAに何かが挿入されると、テーブルBにコピーします。 テーブルBにはほとんど同じような列がありますが、ときどきテーブル2の2列の内容を に連結して連結して、 テーブルB.

私はORACLEにはあまりよく慣れていませんが、GOOGLE について調査したところ、トリガーやビューで行うことができます

一般的に、テーブルにはデータが入力され、その内容は で、別のテーブルとコピーする必要があります。

これは私がどのように挿入された最新の行を選択することができます

create public database link 
    other_db 
connect to 
    user 
identified by 
    pw 
using 'tns-entry'; 

CREATE TRIGGER modify_remote_my_table 
    AFTER INSERT ON my_table 
    BEGIN INSERT INTO ....? 
    END; 
/

これまでに思い付いたソリューションですか?

+0

この同期を直ちに実行するか、遅延を延期するかどうかを教えてください。すぐに同期したい場合。トリガーを使用するか、表Bよりもマテリアライズド・ビューを作成し、コミット時にリフレッシュさせる必要があります(少しトリッキーですが、トリガーよりはるかに優れています)。表Aの挿入後にしばらく時間がかかる場合は、dbms_jobまたは他のスケジュールされたプロセスになる可能性があります。これは、システムの非稼働時に発生する可能性があります。 – g00dy

答えて

1

これら2つのテーブルのデータベースが2つの異なるサーバーにある場合は、テーブルBのデータにアクセス(読み取り/書き込み)できるように、テーブルAのスキーマにデータベースリンク(db-link)を作成する必要がありますdb-linkを使用します。

ステップ1:サーバー表BサーバDBを指すデータベーステーブル内のデータベース・リンクを作成

ステップ2:を使用して表Bにデータを挿入するのに役立ち、表Aのためのトリガーを作成データベースリンク。はいあなたは、トリガーでこれを行うことができ、あなたに

http://searchoracle.techtarget.com/tip/How-to-create-a-database-link-in-Oracle

+0

Thx、AFTER INSERT TRIGGERが必要でしょうか? – NoName123

+0

はい、AFTER INSERTトリガーを使用すると、トリガーで定義されたテーブルで起こっているすべてのインサートに対して役立ちます。テーブルBは、テーブルAのUPDATESとDELETESのためには同期されません。 – DeeJay14

+0

そうしたいのですが、INSERT、UPDATE、DELETEなどのために複数のTRIGGERSを作成する必要がありますか? – NoName123

1

を助けるべきであるあなたは、テーブルB

にこのリンクを挿入する前に、トリガー内(値を連結)をカスタマイズすることができます。しかし、いくつかの欠点があるかもしれません。

  • データベースBが利用できない場合はどうなりますか? - >例外処理がトリガされます。

  • データベースBが2時間利用できなかった場合はどうなりますか?あなたはデータベースAにデータを挿入しましたが、これはデータベースBのキャッシュテーブルに一時的に挿入して狂ったことを行います。

  • パフォーマンス。さて、多くのデータを挿入するためのパフォーマンスは醜いでしょう。データを挿入するたびに、OracleはPL/SQLエンジンを起動して、リモート・データベースにデータを挿入します。

おそらく、MViews(Materialized Views)を使用してデータベースリンクを介してデータを複製することが考えられます。後で、データベースBからテーブルにアクセスし、データベースAから必要なデータをMViewに参加させるためにクエリを作成することができます。

高速リフレッシュを使用して、データを(ほぼ)リアルタイムで複製することもできます。

Oracle Database Adminの視点から、これはトリガー・アプローチよりもはるかに理にかなっています。

+1

私にそれを打つ。私が質問を読めばすぐに、mviewはトリガーを使ってテーブルの同期を実行するよりも意味をなさないようです。 –

0

データベース・リンクが、むしろ安全でないとOracle独自のオプションは、これらの日に関連するライセンスを持っていると考えられている。このコードを試してみてください、他のいくつかのオプションも同様に廃止されました。

https://gist.github.com/anonymous/e3051239ba401e416565cdd912e0de8c

二つの異なるOracleデータベース間でテーブルを同期するORA_ROWSCN使用しています。

関連する問題