複数のデータベースで更新したいのですが、各データベースには複数のテーブルが含まれています。問題が発生した場合、すべてのデータベースとテーブルを元の状態にロールバックしたいと考えています。これについて私に何ができるかを提案してもらえますか?この質問を読むために時間を割いていただきありがとうございます。
2 に答える
すべてのデータベースに一度に接続し、更新されるテーブルのロックを開始するプログラムが必要になります。
変更を適用し、例外が発生した場合は、現在のデータベースと以前に完了したすべてのデータベースをロールバックします。
目的は、すべてのデータベースで1つのセッションの同期を維持することです。
もう1つのオプションは、ゼロダウンタイムインストールを構成できるかどうかを確認することです。ここで、インストールをセクションに分割します。最初に適用できるものと、後で適用できるものです。
つまり、すべてのテーブルに(うまくいけば)問題なく列を追加できるので、これがプレインストールになります。消費されなくなるまで列を削除できないため、これは後のステップです。これには、アプリケーションが影響を受けることなく移行できるように、ビューやパッケージなどの複数のバージョンを用意することが含まれます。
1 回のトランザクションで複数の Oracle データベースを更新しようとしている場合、最も簡単なオプションは、それらの間にデータベース リンクを作成することです。これにより、Oracle は自動的に分散トランザクションを使用します。
データベース 1 で、データベース リンクを作成します。
CREATE DATABASE LINK to_db2
CONNECT TO CURRENT_USER
USING `<<TNS alias to db2>>`;
次に、データベース 1 のセッションは、同じトランザクションの一部として両方のデータベースのテーブルを更新できます。
UPDATE table1
SET some_column = some_value
...
UPDATE table2@to_db2
SET some_column = some_value
...
commit;
異機種間サービスを使用して、Oracle から Oracle 以外のデータベースへのデータベース リンクを作成することは可能ですが、特に Oracle データベースが Unix で実行されており、Transparent Gateway 製品のいずれかを購入する必要がある場合は、少し手間がかかります。
ここで、両方のデータベースで同じテーブルを更新しようとしている場合、そのためのコードを書くべきではありません。代わりに、さまざまなレプリケーション テクノロジのいずれかを使用して、あるデータベースの変更を別のデータベースにレプリケートする必要があります。