DBの技術情報発信

第1回:Oracle 非同期型マルチマスタレプリケーションのデータ競合について

はじめに

この連載コラムでは、DBA業務に奮闘しているマルチDBソリューション部のメンバーが、日々、DBA業務で発生した障害や、運用・保守作業に伴い調査した内容、技術研究・調査結果の概要などをご紹介させて頂きたいと考えております。

皆様、始めまして。記念すべき第1回目のコラムを担当するマルチDBソリューション部の三浦と申します。今回は「非同期型マルチマスタレプリケーションのデータ競合」について、お話し致します。

マルチマスタレプリケーションとは?!

マルチマスタレプリケーションとは、Oracle Databaseで使用できるレプリケーション機能の一つです(※1)。詳しい仕組みは省略しますが、異なるサイト(DB)にある複数のオブジェクト同士を、同期することができる機能です。

※1:12c以降では、マルチマスタレプリケーションを含む、アドバンストレプリケーション機能のサポートが終了しています。代わりに、Oracle GoldenGateが推奨されています。

レプリケーション処理を行うタイミングによって、同期型と非同期型にタイプが分かれ、非同期型は、同期型と比べてレスポンスが早いという利点があります。しかし、非同期型は2フェーズコミットを採用していない為、各サイトから同一タイミング(※2)でデータ更新を行うと、更新されたデータ同士が衝突(競合)し、データ不整合が発生する可能性があります。

※2:便宜上同一タイミングと記載しました。各サイトに設定されている同期処理のインターバルによって、更新タイミングが大きく異なっても、データ衝突が発生する可能性があります。

データの競合が発生するとどうなる?

では、データの競合が発生すると、どのような影響が発生するのでしょうか。

答えは、データ競合が発生した行のみが、各サイト毎に異なった値(データ)を持つことになります。※データ競合が発生した行のみ、レプリケーションされなくなります。

これでは、せっかく構築したレプリケーションの意味が無くなってしまいますので、解決策は用意されています。その解決策をお話する前に、どのような場合で競合が発生するのか、確認していきましょう。

データ競合の種類

データの競合が発生する場面としては、以下3つが存在します。なお、以下説明では全て、各サイトでの更新タイミングがほぼ同一とし、説明に使用しているテーブルの項目「NO」は、主キーであるとします。

1.更新の競合
各サイトにて、同一テーブル・同一行のデータ(一意制約対象列以外)を更新した場合に発生する競合です。なお、同一行の更新であれば、異なる列の値を更新したとしても競合が発生します。
2.一意性の競合
主キー制約や一意制約に抵触する更新・挿入が、各サイトによって行われた時に発生します。例えば、各サイトそれぞれで、主キーが同一値のデータを挿入した場合などです。
3.削除の競合
片方のサイトで行データを物理削除し、もう片方のサイトで行データの更新を行った場合に発生する競合です。
データ競合の回避・解消方法

まず、データ競合を防ぐ最も効果的な方法として、以下があります。

  1. マルチマスタレプリケーションのタイプを同期型にする。
  2. データ競合が発生しないようなシステム設計や運用手順にする。
  3. 例)サイトを跨って、同一行を更新しない様な仕組みを検討する。

そうは言っても、上記対応は難しい場合もあるかと思いますので、Oracleで用意されている競合の回避・解消方法をいくつかご紹介したいと思います。

1.列グループの分割
更新の競合に有効な回避方法です。
マルチマスタレプリケーションのテーブルに存在する列は、デフォルトでは、全ての列で一つのグループになっています。このグループを「列グループ」と呼び、同一列グループ内にある列の値が、各サイトで更新されると競合が発生します。
逆に、競合が発生しそうな列を、別の列グループに分けることで、競合を回避することが可能です。
ただし、列グループを分けたとしても、同一行・同一列の値を各サイトで更新した場合は、更新の競合が発生します。
2.タイムスタンプによる競合解消メソッド
更新の競合、一意性の競合に有効な解消方法です。
このメソッドを設定すると、更新・挿入があった行に対してタイムスタンプが自動記録され、データの競合が発生した場合には、タイムスタンプを基に優劣が自動判断されます。優先と判断された更新内容がレプリケーションされます。
※最も早いタイムスタンプの更新内容か、最も遅いタイムスタンプの更新内容のどちらかを優先(レプリケーション対象)とすることができます。
3.論理削除フラグ + タイムスタンプを利用した競合解消メソッド
削除の競合に有効な解消方法です。
このメソッドでは、タイムスタンプによる競合解消メソッドと、論理削除フラグ、物理削除を行うプロシージャを使用して、削除の競合解消を行います。
ユーザーが削除したい行を論理削除し、他サイトの更新と競合が発生した場合に、タイムスタンプによる競合解消メソッドにて競合を解消します。その後、論理削除が優先された場合には、プロシージャにより、論理削除されている行データを物理削除します。
※物理削除は、論理削除から一定期間経過後の行データのみを対象とすることで、必ず競合が解消されたデータのみを対象とすることができます。
最後に

今回は、詳細まで触れることができませんでしたが、非同期型のマルチマスタレプリケーションデータ競合概要についてご理解頂けたでしょうか。機会があれば、具体的なコマンドを含めて、詳細についてお話させて頂きたいと考えています。

最後になりますが、弊社は、「データベースのオールマイティ企業」を謳っており、DBに関する経験や知識、技術力に自信を持っております。

DB関連での課題解決等、必ずやお客様のお役に立てると確信しておりますので、何かございましたら弊社へご連絡下さい。

それでは、次回をお楽しみに!


「DBの技術情報発信」バックナンバー

  • セミナー・イベント情報
  • パートナー企業紹介
  • カタログダウンロード
  • 導入事例
ページの先頭へ