1

かなり大規模なブラウンフィールド アプリケーションを設計していて、ちょっとした問題に遭遇しました。

DB2 データベースには、まだデータをロードしているレガシー アプリケーションからのかなり大量の情報があります。また、当社が管理する Oracle データベースにも情報があります。

テーブルに対して「JOIN」タイプの操作を行う必要があります。現在、DB2 テーブルから List<> に情報を引き出し、それらを次のような Oracle データベースの SQL ステートメントに反復処理することを考えていました。

select * from accounts where accountnum in (...)

データベース間で対話するためのより簡単な方法はありますか、または少なくとも、この種のアクションのベストプラクティスは何ですか?

4

6 に答える 6

1
  1. DB2 からデータをフラット ファイル形式でエクスポートし、このフラット ファイルを外部テーブルとして使用するか、SQL ローダーを使用できます。これはバッチ プロセスです。

  2. 異種接続と呼ばれるものもあります。ここでは、Oracle から DB2 へのデータベース リンクを作成します。これにより、DB2 データベースにリアルタイムでクエリを実行でき、Oracle テーブルを DB2 テーブルと結合できます。

このデータベース リンクをマテリアライズド ビューと組み合わせて使用​​することもできます。

さまざまな種類の異種接続があるため、ドキュメントを注意深く読んでください。

于 2009-04-04T14:19:08.817 に答える
1

私はこれを2つの方法で行いました。

異なるボックスにある 2 つの Sybase データベースを使用して、ストア プロシージャをセットアップし、同様の関数を呼び出して、データをやり取りしました。これにより、sprocs が監査/ログを記録できるようになり、プロセス中にデータが失われていないことを顧客に納得させることができました。

Oracle から Sybase への一方通行では、ビューを使用して、C API に共通のインターフェイスを提供する C++ プログラムから呼び出されたデータと各ベンダーの C ライブラリをマーシャリングしました。

あなたの状況のように、Db2が「レガシーだがライブ」だったMySQLとDB2のセットアップでは、あなたが説明しているものと同様のセットアップを採用しました。データを(Java)クライアントプログラムに引き出します。

結合が常に 1 対 1 で、各ボックスの結果セットが同じキーを持っている場合、両方を同じ順序でプルし、クライアントで簡単に接続できます。それらが 1 対多であっても、それらをつなぎ合わせることは、両方のリストの一方向の繰り返しにすぎません。

多対多になると、一度に 1 つのアイテムを処理するようにフォールバックする可能性があります (ただし、HashSet ルックアップを使用できます)。

ただし、基本的には、sprocs (必要な場合とクライアント層) を選択するか、単にクライアントで実行するかを選択します。

于 2009-04-03T14:08:48.773 に答える
1

リアルタイム データである必要がありますか。その場合、異種接続、特に連合サーバーの一部である db2 リレーショナル接続に使用できる製品があります。ラグが許容される場合は、スクリプトをセットアップしてデータを oracle にレプリケートし、それを使用してネイティブ結合を実行できます。クライアント アプリケーションにデータをプルすると、パフォーマンスが低下します。これが唯一の選択肢である場合は、db2 ストアド プロシージャを作成してデータを返すようにしてください。これにより、パフォーマンスがわずかに向上します。

于 2009-04-06T00:17:44.453 に答える
0

DB2 Advanced Enterprise Server Edition (AESE) を使用している場合は、Infosphere Federation Server が含まれていることに注意してください。

どちらの製品でも、1 つの DB に送信される単一の結合クエリを使用して、両方の DB からデータを返すことができます。Oracle 製品は、Oracle が DB2 データベースを別の Oracle DB として認識し、DB2 が Oracle データベースを別の DB2 データベースとして認識できるという点で非常に優れています。(DB2 が使用する DRDA プロトコルのクライアント側とサーバー側の両方の仕様を公開した IBM に感謝します。残念なことに、IBM がそうしたという事実を利用するのに問題はありませんが、他のベンダーがそうしようとしているわけではありません。)

どちらの製品も私が安いと呼ぶものではありません。安価な場合は、Oracle Database Gateway for ODBC
http://docs.oracle.com/cd/E16655_01/gateways.121/e17936/toc.htmを利用できます。

于 2014-01-29T03:19:00.323 に答える
0

レガシー データベースから管理しているデータベースにデータをコピーできる場合は、レガシー DB から Oracle DB に新しいレコードを 1 日に 1 回 (または可能な限り頻繁に) コピーするデータ抽出ジョブを検討できます。前回のデータ読み込み以降にレガシー データベースで生成された新しいレコードを識別できない場合は、それほど単純ではない可能性があります。

次に、Oracle インスタンスで結合を実行できます。

于 2009-04-03T14:19:21.320 に答える