株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

データベース レプリケーションの分類(物理 or 論理)

Oracle ACE Proの渡部です。 データベースのレプリケーション技術は、物理レプリケーションと論理レプリケーションに大別されます。

物理レプリケーションと論理レプリケーション

データベースのレプリケーション技術は、物理レプリケーションと論理レプリケーションに大別されます。 いずれも「差分」のみを同期しますが、伝搬時に「物理的な差分」を用いるか、「論理的な差分」を用いるか、が異なります。

データベースのレプリケーション方式

レプリケーション方式の比較

物理レプリケーションは、データベース全体に対する物理的な変更であるところの、 (厳密にはフィジカルロギングでの)トランザクションログを伝搬することで、 複数のデータベースを同期します。レプリケーション元のデータベース(プライマリDB)と レプリケーション先のデータベース(スタンバイDB)の物理的な構造が同じになります。 すなわち、プライマリDBとスタンバイDBは(注目している時点においては)同一となります。

メカニズムがシンプルで運用しやすいため、災害対策に向けたDR構成/HA構成によく使用されます。

論理レプリケーションは、指定したテーブル群に対する論理的な変更(SQLのDML, DDLに相当)を伝搬することで、 データベース内の指定したテーブル群を同期します。 レプリケーション元のデータベース(ソースDB)と レプリケーション先のデータベース(ターゲットDB)は異なる構成でも対応可能です。

使用する論理レプリケーション製品によっては、異なるDBMS製品間でもレプリケーションが可能です。

メカニズムは比較的複雑ですが、柔軟なデータ連携が可能です。

論理レプリケーションの主な用途

論理レプリケーションの動作は、以下のイメージで捉えることができます。

  • ソースデータベースに加えられた変更を抜き出し、
  • それを、SQLのDML(INSERT文やUPDATE文、DELETE文など), DDL(CREATE TABLE文やALTER TABLE文など)に変換し、
  • 変換したSQLをターゲットデータベースで実行する

ロジカルレプリケーションのしくみ

このため、論理レプリケーションは柔軟性に富んでいます。

論理レプリケーションは、以下の用途に使用可能です。

  • 異なるデータベース間で、一部のデータを同期する
  • あるデータベースの古いデータを削除する前に、別のデータベースに伝搬+蓄積する
  • 上記の処理を、異なるDBMS製品間で行う(例: Oracle → PostgreSQL)

論理レプリケーション機能の分類

論理レプリケーション機能は、DBMS製品に含まれるレプリケーション機能と DBMS製品には含まれない、独立した論理レプリケーション製品に大別されます。

多くの場合、DBMS製品に含まれるレプリケーション機能は、同じ製品同士でしかレプリケーションを実行できません。 たとえば、MySQLに含まれるレプリケーション機能を使用して、MySQL→MySQLでレプリケーションを実行できますが、MySQL→Oracleではレプリケーションを実行できません。

異なるDBMS製品でレプリケーションを実行したい場合は、通常、以下のような論理レプリケーション製品を使用することになります。

物理レプリケーションの主な用途

物理レプリケーションを使用すると、レプリケーション元のデータベース(プライマリDB)と レプリケーション先のデータベース(スタンバイDB)の物理的な構造を含め、全て同一になります。

物理レプリケーションが基礎とする技術は、データベースのバックアップおよびリカバリであり、技術の安定性/信頼性に優れます

このような特性から、物理レプリケーションは以下の用途に主に使用されます。

  • 遠隔地などに災害対策用のデータベースを作成する
  • 更新用のデータベースとレポート生成用のデータベースを分離する

物理レプリケーションが使用できない用途

  • 物理レプリケーションは、異なる製品同士のレプリケーションには使用できません。
    → 論理レプリケーション製品を用いた論理レプリケーションを使用します。

FAQ

  • 随時更新しますので、不明点があればお気軽にどうぞ!

Oracle Data Guardは物理レプリケーションですか?

Oracle Data Guardにはフィジカルスタンバイとロジカルスタンバイという2つの機能があります。 Oracle Data Guardフィジカルスタンバイは物理レプリケーションです。 Oracle Data Guardロジカルスタンバイは、論理レプリケーションですが、Oracle Data Guardフィジカルスタンバイに比べると使用されることはかなり少ないです。

MySQLのレプリケーション機能は論理レプリケーションですか?

はい、論理レプリケーションです。 MySQLのレプリケーション機能は、変更を伝搬するためにトランザクションログ(バイナリログ)を転送しますが、物理レプリケーションではありません。 MySQLのレプリケーションに使用されるトランザクションログはバイナリログで、バイナリログのロギング方式はロジカルロギングであり、物理情報が含まれないためです。

なお、MySQLのレプリケーション機能にはいくつかのバリエーション(binlog_format=STATEMENT, ROW, MIXED)がありますが、いずれも論理レプリケーションと考えてよいです。

参考)

バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い

過去データを保管する目的で物理レプリケーションを使用できますか?

あるデータベースから過去データを削除する一方で、別のデータベースに削除した過去データを保管したい場合があります。 この用途では、論理レプリケーションの使用が適切です。物理レプリケーションは使用できません。

なぜなら、物理レプリケーションには、レプリケーション元のデータベース(プライマリDB)と レプリケーション先のデータベース(スタンバイDB)の物理的な構造を含め、同一でなければならない制約があるためです。

災害対策に論理レプリケーションを使用してもよいですか?

OKですが、レプリケーション元のデータベース(≒プライマリDB)で、使用する論理レプリケーションがサポートしていない操作(論理レプリケーションで伝搬対象でない操作)を実行しないように注意してください。 もし、プライマリDBで、その論理レプリケーションがサポートしていない操作を実行すると、レプリケーション先のデータベース(≒スタンバイDB)に変更が伝搬されないことになります。最悪の場合、レプリケーションが途中で中断され、この場合は災害対策の意味を全くなさないことになります。

物理レプリケーションではおおむね全ての操作が伝搬対象となり、レプリケーションが途中で中断されることがほぼないため、災害対策にでは主に物理レプリケーションが使用されます。

2023/05/15 追記

以下の記事も参考にしてください。

データベース災害対策(Disaster Recovery)に物理レプリケーションをお勧めする理由

論理レプリケーションではCDC(Change Data Capture)が使用されますか?

一般的にトランザクションログ ベースのCDC(何らかの方法でトランザクションログから変更処理の内容を得るタイプのCDC)が使用されます。

なお、CDCはさまざまな機能に対する総称です。WikipediaではCDBには以下の種類があるとされています。

  • 各行に変更を示す特殊な列値を付加し、行の変更を識別するタイプ: Timestamps on rows, Version numbers on rows, Status indicators on rows, Time/Version/Status on rows
  • 表にトリガを定義しておき、行の変更時にトリガが起動して、変更を得るタイプ: Triggers on tables
  • トランザクションログから変更処理の内容を得るタイプ: Log scanners
  • その他: Event programming

OracleロジカルレプリケーションCDC実装方式の分類

ディスクレプリケーションに対する物理レプリケーションの利点はなんですか?

ここでは、ディスクレプリケーション(ディスクミラーリング)をディスクの変更セクタを伝搬するレプリケーションと考えます。ディスクレプリケーションはデータベースの機能ではなく、ストレージ装置およびストレージソフトウェアの機能です。

ディスクレプリケーションに対する物理レプリケーションの利点はいくつかありますが、分かりやすいのはデータベースを構成するデータファイルが破損した場合に、破損が伝搬しないことです。

ディスクレプリケーションの場合、破損した状態のデータファイルがレプリケーションされます。 よって、レプリケーション先のデータファイルも破損している形になります。

物理レプリケーションの場合、伝搬されるのはトランザクションログであり、データファイルそのものを伝搬するわけではありません。 よって、レプリケーション元のデータファイルが破損しても、それがレプリケーション先のデータファイルに影響することはありません。 (トランザクションログになにかしら致命的な不具合があった場合は別ですが、実績があるDBMS製品であれば、そのようなケースは少ないでしょう)

Amazon RDS マルチAZデプロイで使用されるレプリケーション方式は何ですか?

https://aws.amazon.com/jp/blogs/news/amazon-rds-under-the-hood-multi-az/ によると、ディスクレプリケーション(ディスクミラーリング)が使用されているようです(確かSQL Serverを除く)。

Mult-AZ機能はデータベースアプリケーションとAmazon Elastic Block Store(Amazon EBS)ボリュームの間にあるレプリケーションレイヤーを使用して実装されています。

よって、Amazon RDS マルチAZデプロイでは、この記事で紹介した(データベースの機能としての)物理レプリケーションを使用していません。

紛らわしいですが、ストレージ装置およびストレージソフトウェアの機能であるところのディスクレプリケーション(ディスクミラーリング)のことを「物理レプリケーション」と呼ぶ場合もあります。文脈から理解し分けてください。

異なるDBMS製品でレプリケーションを実行できますか?

以下のような論理レプリケーション製品を使用し、論理レプリケーションすることで可能です。ただし、製品ごとに対応するDBMS製品が違う点に注意してください。

論理レプリケーションではソース、ターゲット間のデータ整合性チェックを行うべきですか?

新旧データベース移行など、データ整合性が重要な場合はソース、ターゲット間のデータ整合性チェックを行うべきです。

論理レプリケーションは、以下の性質上、データ整合性が崩れる「リスク」があります。

  • ソースDBで、その論理レプリケーションがサポートしていない操作を実行される可能性がある(可能性を排除できない)
  • 論理レプリケーション機能のBugや、利用者が認識していない仕様上の制限に遭遇する可能性を排除できない
  • ターゲットDBはデータ更新可能な状態にあるため、万が一論理レプリケーション以外の何らかのプログラムが更新する可能性を排除できない

しかし、データ整合性チェックを行うには、レプリケーションを停止して「静止点」を作るか、「静止点」に相当する何らかの仕組みが求められます。SharePlexなど一部の論理レプリケーション製品では、レプリケーションを停止せずにデータ整合性チェックを行う機能が用意されています。

SharePlex - データ整合性を保全する比較/修正機能

物理レプリケーションではプライマリ、スタンバイ間のデータ整合性チェックを行う必要がありますか?

機能的にデータ整合性チェックを行う必要はありません。 物理レプリケーションが依拠している技術は、バックアップリカバリであり、以下の特性を持つからです。

  • 実績に裏付けられた信頼性がある
  • バックアップリカバリの内部処理に、物理レベルの整合性をチェックする仕組みが内包されている
  • 物理レプリケーション実行中は、原則的に更新処理を実行できない

[宣伝] データベースレプリケーションでお困りの際にはコーソルにご相談ください!

コーソルはデータベースの技術力を強みとしています。なかでもOracle Database技術力は日本随一です。MySQL、PostgreSQL、MS SQL Serverの資格や実績を持つエンジニアも多数在籍しております。

コーソルが取り扱うデータベースレプリケーション製品

多数のOracle関連書籍を執筆

ORACLE MASTER Platinum取得者数 No.1

  • 単年度ORACLE MASTER Platinum取得者数7年連続No.1

7年連続ORACLE MASTER Platinum取得者数No.1! Oracle Certification Award 2020

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ