0

2 つのデータベース間で通信する簡単な方法を探しています。現在、両方のデータベース間にデータベース リンクが存在します。

データベース 1 でプロセスが終了し、レコードのすべてのバッチが処理されたら、データベース 1 でレコードのバッチ (レコードの各バッチのバッチ コード) のジョブを処理したいと考えています。データベース 2 に、データベース 1 が多数のバッチ (バッチ コード) を処理したことを、データベース 1 またはデータベース 2 のいずれかにある Oracle テーブルまたは Oracle アドバンスド キューのいずれかに問い合わせることによって確認したいと考えています。

データベース 2 は、各バッチ コードを使用してデータベース リンク ビューを介してデータベース 1 にあるレコードのバッチを処理し、そのバッチのステータスを更新して完了します。

Oracle Advanced Queue またはデータベース テーブルのバッチ番号、進行状況 ('S' 開始済み、'C' 完了)、状況報告日を更新できるようにしたい

テーブル名。

batch_records

表の列

Batch No,
Status,
status date

質問:

  1. これは、複雑な Oracle Advanced Queue ではなく、単純なデータベース テーブルで実行できますか?

  2. データベース リンクを介してテーブルを更新できますか?

  3. これの例はありますか?

4

1 に答える 1

2

最初に質問に答えるには:

  1. はい、そう思います
  2. はい、できます。ただし、関係する行が多い場合は、かなり遅くなる可能性があります
  3. おそらく

データベース リンク、2 つのデータベース間で通信する方法です。これらのジョブがデータベース 1 (DB1) で実行される場合は、DB1 に保持することをお勧めします。データベース リンクを介して何かを行うと、さまざまな種類の問題が発生します。データベース リンク (たとえば、LOB) を介してすべてを行うことはできません。1 つのオプションは、ジョブをスケジュールすることです ( DBMS_SCHEDULERorを使用しますDBMS_JOB(単純なことにはまったく問題ありません))。手順で、DB2 によって読み取られる DB1 のテーブル (最初の質問の「単純なテーブル」) でジョブ ステータスを維持します。

どのように?直接実行するか、スケジュールされた方法 (たとえば、毎朝 07:00) またはオンデマンド (あまり良い考えではありません) またはコミット (DB1 プロシージャーがジョブを実行して変更をコミットした後) で更新されるマテリアライズド ビューを作成します。マテリアライズド ビューが更新されます)。

関連する行がそれほど多くない場合は、おそらく DB1 ステータス テーブルを直接読み取り、後で (必要に応じて) 他のオプションを検討します。

于 2020-01-31T10:23:59.090 に答える