JP6062855B2 - MySQLデータベース−異種ログベースレプリケーション - Google Patents

MySQLデータベース−異種ログベースレプリケーション Download PDF

Info

Publication number
JP6062855B2
JP6062855B2 JP2013521774A JP2013521774A JP6062855B2 JP 6062855 B2 JP6062855 B2 JP 6062855B2 JP 2013521774 A JP2013521774 A JP 2013521774A JP 2013521774 A JP2013521774 A JP 2013521774A JP 6062855 B2 JP6062855 B2 JP 6062855B2
Authority
JP
Japan
Prior art keywords
mysql
log
binary log
data
vam
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2013521774A
Other languages
English (en)
Other versions
JP2013535737A (ja
JP2013535737A5 (ja
Inventor
パリーク,アロック
ラクシュミナラヤナン,マハデバン
デュベイ,アビナシュ
コービン,スコット
Original Assignee
オラクル・インターナショナル・コーポレイション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by オラクル・インターナショナル・コーポレイション filed Critical オラクル・インターナショナル・コーポレイション
Publication of JP2013535737A publication Critical patent/JP2013535737A/ja
Publication of JP2013535737A5 publication Critical patent/JP2013535737A5/ja
Application granted granted Critical
Publication of JP6062855B2 publication Critical patent/JP6062855B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/273Asynchronous replication or reconciliation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/275Synchronous replication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/33Querying
    • G06F16/3331Query processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1471Saving, restoring, recovering or retrying involving logging of persistent data for recovery
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2094Redundant storage or storage space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2097Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements maintaining the standby controller/processing unit updated

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Debugging And Monitoring (AREA)

Description

著作権表示
本特許文献の開示の一部は、著作権保護の対象となる内容を含む。本著作権所有者は、特許文献または特許開示について、特許商標庁の特許ファイルまたは記録に記載されたとおりのものが複製されることに対して異議を唱えないが、他の点では何であれすべての著作権を保持するものとする。
発明の分野
本発明は一般に異種システム間でのデータ転送に関し、特にMySQLデータベースまたはシステムと、別の種類のデータベースまたはシステムとの間でデータを転送するために、ログベースレプリケーションを用いるシステムおよび方法に関する。
背景:
MySQLオープンソースデータベースといったデータベースプロダクトは、世界中でますます多くの組織で用いられている。1日当たり5万回のダウンロードが推定されるが、MySQLデータベースは信頼性の高い手頃な価格で使い易い高性能データベースを必要とするデータベース開発者、管理者(DBA)およびITマネージャにとっては人気のある選択である。一部の組織では、このようなデータベースは主要なプロダクション環境となっており、事業の中核であるアプリケーションを実行するために用いられている。事業が拡大すると、複雑なデータ管理の必要も出てくる。これらの組織の多くは、スケーラビリティ(scalability)上の理由により、たとえば自己のMySQLデータベースからOracle(登録商標)/DB2/SqlServerといった他の商業的データベースにデータを移行したいと考えている。
データ移行に加えて、自己のオリジナルのデータベースとしてMySQLを用いる一部の組織は、そのデータを他の運用システムやデータベースに統合したいと思うかもしれない。たとえば、他のリアルタイムデータウェハウスシステムとの統合や異なるデータベースシステムで実行される財務アプリケーションとの統合を挙げることができる。このような組織は、ゼロダウンタイム移行のために、レイテンシが低い異種レプリケーションを提供するソリューションを必要とする。
さらに組織では、頻繁なレポートクエリーのためにプロダクションサーバに負担を掛けたくない場合も多い。なぜなら、レポート用のリードオンリクエリーの膨大な数は、運用サーバの性能を低下させ得るからである。組織によっては、レポート系のクエリーを他の、おそらくはより性能が低い非プロダクションデータベースにオフロードしたいかもしれない。たとえば、一部の組織では、第1の種類のデータベースサーバを、たとえばMySQLがLinux(登録商標)またはWindows(登録商標)OSで実行される、レポートサーバとして使用し、第2の種類のデータベースサーバを、たとえばオラクル(登録商標)で実行される高性能運用サーバとして使用したいかもしれない。
MySQLデータベースにあるデータを他の非MySQLシステムと統合可能にするためには、カスタムプログラムまたはETL / EAI / EIIといったソフトウェアコンポーネントを(ゲートウェイまたは付加的プロダクトを介して)用いることができる。このような技術の問題は、非バルクデータ(ETL)の処理が不十分であり、アプリケーションからデータを公開するのにアプリケーションの変更が必要であり(EAI)、またはMySQLシステムおよび非MySQLシステムへのアプリケーションアクセスおよび必要なデータの統合を要することである。多くの場合、変更データを統合するのに連続的にETLを実行することはコンピュータ上負担があり、EAI統合はアプリケーションへの変更/アクセスを必要とし、それによりアプリケーションの応答時間に影響し、EIIは異なる(遠隔)ネットワークを介して複数のシステムへのアクセスに係わるので、遅い。
したがって、たとえばMySQLトランザクションデータのMySQLデータベースから非MySQLデータベースへの論理的レプリケーションを実行するための、ログベース変更データキャプチャ(CDC)プログラムは、このような統合/同期を処理する周期的(毎晩)ETL、EAIまたはEIIによる方法以外には、現在存在しない。一般にこのような分野が、本発明の実施の形態の対象分野である。
概要:
異種システム間でデータを転送するためのシステムおよび方法が記載され、特にたとえばMySQLデータベースまたはシステムと、他の種類のデータベースまたはシステムとの間でデータを転送するためにログベースレプリケーションが用いられる。ある実施例に従うと、システムを用いてソースデータベースシステムからターゲットデータベースシステムへのMySQLデータの1回限りのコピーまたは最初のコピーを行ない、および/またはMySQLデータベースのバイナリログからキャプチャされた進行中のトランザクションを、連続した態様で1つ以上の非MySQLデータベースにレプリケートし、2つのシステムは対象トランザクションのために同期化される。ある実施例に従うと、すべてのもしくは部分的データ変更は、MySQLバイナリログから抽出(extract)でき、任意に変換、スキップまたは拡大され、ファイルに出力または書込まれ(一実施例に従うと、トレールファイル、またはOracle(登録商標) GoldenGateトレールファイルとして実施でき)、次に1つ以上のターゲットシステム(たとえば別のMySQLデータベース、または非MySQLデータベース)で与えることができ、それによりソースおよびターゲットのシステムを同期させる。
一実施例に従う異種ログベースレプリケーション用のシステムの全体のアーキテクチャを示す図である。 一実施例に従う現在のバイナリログファイルを定めるための、ログインデックスファイルの使用を示す図である。 一実施例に従う異種ログベースレプリケーション用の処理のフローチャート図である。 一実施例に従うログ回転の使用を示す図である。 一実施例に従うMySQLバイナリログにおけるイベント順序を示す図である。 一実施例に従うイベントヘッダ構造の例を示す図である。 一実施例に従うフィールドメタデータの例を示す図である。 一実施例に従うテーブルマップイベント構造の例を示す図である。 一実施例に従う書込ローイベント構造の例を示す図である。 一実施例に従う更新ローイベント構造の例を示す図である。 一実施例に従うイベント順序の例を示す図である。 一実施例に従うイベント順序の別の例を示す図である。 一実施例に従うVAMバイナリログリーダ用のクラスダイヤグラムの例を示す図である。 一実施例に従うVAMバイナリログプロセッサ用のクラスダイヤグラムの例を示す図である。
詳細な説明:
異種システムの間でデータを転送するためのシステムおよび方法が記載され、特にログベースレプリケーションを用いて、たとえばMySQLデータベースまたはシステムと、他の種類のデータベースまたはシステムとの間でデータを転送する。一実施例に従うと、システムを用いてソースデータベースシステムからターゲットデータベースシステムへのMySQLデータの1回限りのコピーまたは最初のコピーを行ない、および/またはMySQLデータベースのバイナリログからキャプチャされた進行中のトランザクションを、連続した態様で1つ以上の非MySQLデータベースにレプリケートし、2つのシステムは対象トランザクションのために同期化される。一実施例に従うと、すべてのもしくは部分的データ変更は、MySQLバイナリログから抽出でき、任意に変換、スキップまたは拡大され、ファイルに出力または書込まれ(一実施例に従うと、トレールファイル、またはOracle(登録商標) GoldenGateトレールファイルとして実施でき)、次に1つ以上のターゲットシステム(たとえば別のMySQLデータベース、または非MySQLデータベース)で与えることができ、それによりソースおよびターゲットのシステムを同期させる。本発明のさまざまな実施例の利点は以下を含む:
1.ログベースレプリケーションは、MySQLデータベースシステムと非MySQLデータベースシステムとの間のトランザクションレプリケーションについて、非常に低いレイテンシを可能にする。トランザクションがMySQLシステムにコミットされてから非MySQLシステムにレプリケーションされるまでの一般的に予想される時間は数秒以下である。
2.MySQLシステムのオーバーヘッドは、従来の方法と比べて著しく低い。なぜなら、変更はログからキャプチャされるのであって、MySQLシステムのデータページではないからである。ネットワーク上で転送されるバイトの数も著しく低い。
3.アプリケーションテーブルは、SQLまたは他のSQLを組込んだプログラミング言語(またはSQL様言語)を介してクエリーされない。それにより、レプリケーションは非侵襲性のものとなる。
4.本システムは第3のゲートウェイプロダクトの使用を必要とせず、ネットワークまたはシステムの障害の場合、およびデータサイト全体に影響を及ぼすほとんどの障害に対しても、トランザクションの配信を保証することができる。
5.オペレーショナルレポーティングアプリケーションを用いて、MySQLデータベースにアクセスすることなく、リアルタイムベースで非MySQLデータベースからデータを得ることができる。
6.本システムは、MySQLデータベースで実行されるアプリケーションの非MySQLデータベースへの移行をほぼゼロに近いダウンタイムで可能にし、さらにMySQLデータベースからのトランザクションが、ほぼリアルタイム(またはアクティブ)データウェハウス用に、データベースマシンで使われることを可能にする。
7.本システムはログベース変更データキャプチャ(CDC)を可能にし、他のシステムへのスケーリングを求めているがアプリケーションの停止を受入れることができないMySQLベースの組織が、2つのシステムを同期して維持し、十分なテストを行ない、ダウンタイムを発生することなく、自己のMySQLシステムを他のシステムに最終的に移行することを可能にする。現在、MySQLデータベースからのリアルタイム操作は、リアルタイムベースで企業データウェハウスとの統合は一般になされていない。一実施例に従うと、該方法は企業がMySQLシステムからデータを得る方法を提供する。
一実施例に従うと、システムはMySQLのバイナリログフィーチャを用いてデータをキャプチャする。MySQLバイナリログはデータをたとえばDML操作で変更するステートメントデータを含む。ステートメントは「イベント」の形で格納され、イベントはデータへの変更を記述する。一実施例に従うと、バイナリログは2つの重要な役割を果たす:(1)レプリケーションであって、バイナリログは、スレーブサーバに送られるステートメントの記録として、マスタレプリケーションサーバで用いられる。マスタサーバはそのバイナリログに含まれるイベントをスレーブに送り、そこでマスタで行なわれたのと同じデータ変更を行なうためにイベントが実行され、および(2)データリカバリであって、特定のデータリカバリ操作はバイナリログの使用を必要とする。バックアップファイルが回復されると、バックアップが行なわれた後に記録されたバイナリログは再実行される。これらのイベントにより、データベースはバックアップ時点のものから現在のものになる。
バイナリログがトランザクションデータを記憶可能にすることは、MySQLの設置によってデフォルトでは設定されない。一実施例に従うと、「ログ-ビン」のパラメータを用いてバイナリロギングを可能にする。このパラメータはMySQL初期ファイルで指定される(これはウインドウズ(登録商標)プラットフォームではmy.iniであり、他のプラットフォームではmy.confである)。MySQLの以前のリリースでは、バイナリログはステートメントレベル情報を含んでいた、すなわち、完全なDDLおよびDMLステートメントをログしていた。異種性を支持するために、データが汎用的なデータフォーマットで利用可能にするためには、純粋なテキストSQLステートメントに基づいてログベースキャプチャを構築することは難しい。MySQLの後のバージョンでは、上記の問題を軽減するために、バイナリロギングサポートを導入している。MySQLバージョン5.1は、バイナリデータへのアクセスを提供するために新しい内部C++クラスを導入している。
一実施例に従うと、IngressおよびSybaseといった他のデータベースで見られる循環型ロギングスタイルと比べて、MySQLバイナリログは順次作成され番号が付けられる。MySQLは古いログファイルを自動的にはアーカイブしないので、古いログファイルを保つ/バックアップするために、管理者は十分に注意しなければならない。
一実施例に従うと、非トランザクションテーブルへの更新は、実行の後すぐにバイナリログに記憶される。拘束のないトランザクションでは、InnoDBテーブルといったトランザクションテーブルを変更するすべての更新(INSERT、DELETE、UPDATE)は、COMMITステートメントがサーバによって受取られるまでキャッシュされる。その時点で、サーバデーモン(mysqld)はトランザクション全体をバイナリログに書込む。サーバデーモンはROLLBACKステートメントが発行されたのなら、トランザクションデータを書込まない。バイナリログについて、ロールバック操作はno−opの非記録操作である。
図1は、一実施例に係わる、異種ログベースレプリケーション用のシステムのアーキテクチャの全体を示す図である。図1に示されるように、アーキテクチャ102はMySQLまたは同様のデータベース104を含み、これは上記の構成設定およびパラメータを用いて、データを現行のバイナリログファイル106(または複数のバイナリログファイル108)にログするよう構成されている。
一実施例に従うと、システムは、ファイルリーダ、ファイルCACHEおよびデータ変換クラスを与えるために、任意に1つ以上のMySQLライブラリ110を含むことができる。別の実施例では、この特定のコンポーネントは必要ない。
ベンダーアクセスモジュール(VAM)プラグインもしくはアプリケーションプログラムインターフェイス(API)111または同様のコンポーネントを用いて、Oracle GoldenGateまたは類似のレプリケーションプロダクトといったデータキャプチャおよびレプリケーションシステムまたはプロダクトにより、バイナリログファイルへのアクセスが与えられる。一実施例に従うと、VAMは、複数のMySQL VAMイベントクラス112を含み、これを用いてたとえば現行のバイナリログを開く、イベントを読む、VAM記録に変換する、ログ回転を取扱うなどといった、MySQLバイナリログからのイベントの処理をもたらし、さらにMySQLライブラリをラップアラウンドするために用いることができる複数のMySQL VAMバイナリログクラス114、ならびにビンログクラスからレコードを読取り処理し、それらをレコードキューに入れるために用いることができる複数のVAMリーダおよびプロセッサクラス116を含む。一実施例に従うと、これらのクラスの一部または全部はextractコールによって、ブロックではなく自己の専用スレッドを有することができる。他の実施例に従うと、上記はMySQL環境およびMySQL VAMの使用を示しているが、他の種類のVAMを他の種類のデータベースまたはシステムで実施できることは明らかである。
一実施例に従うと、VAMread()コールにより、後で使用されるよう、レコードを保持するためにレコードキュー118が設けられる。複数のVAMレコードクラス120を用いてレコードキューからデータを読出し、VAM APIを用いて、extractにデータを送ることができる。Oracle GoldenGateまたは同様のレプリケーション処理といったextractプロセス122がコンパイルされて、データをVAM APIから取込み、データをターゲットシステム126および/またはターゲットデータベース128に与えるために、トレール124に、またはGoldenGateトレールファイルといったトレールファイルに、書込む。
一実施例に従うと、MySQLはイベント入力としてデータをバイナリログ内にストアし、SQLステートメントおよび操作の性質に基づきさまざまなイベントを支持し、イベントデータを読出すためにC++クラスを与える。一実施例に従うと、VAMはこれらバイナリログイベントのサブセットを認識するために一般に構成される。たとえば、VAMはトランザクション、DMLステートメントデータ、ログ回転などを表わすバイナリログイベントを認識するよう構成することができる。表1は一実施例に従うと、MySQL VAMがバイナリログから認識することができるよう構成可能であるMySQLイベントのリストを示す。他の実施例に従うと、他の種類のイベントも認識できることは明らかである。
一実施例に従うと、VAMの実施はC++を用いて書込むことができ、VAMモジュールの実施は2つの主要な部分に分けることができる:第1の部分は、内部的に立てられたイベントC++クラスを用いてバイナリログイベントを読出し、データレコードに処理し、レコードを既存フォーマット(送信できる形)にして、制限された大きさのキューに記憶し、第2の部分は、APIからリクエストを受取るたびに、キューからレコードを取ってきてAPIに送信する。
ログインデックスファイル
図2は現行のバイナリログファイルを定めるためのログインデックスファイルの使用を示す図である。一実施例に従うと、MySQLはログインデックスファイルを用いて、現行のバイナリログファイルおよびより古いログファイルを識別するリストを維持する。このログインデックスファイルは、バイナリログと、同じディレクトリ場所にある。システムはログファイルフォーマットが、たとえばROW、STATEMENT、またはMIXEDフォーマットのいずれであるかを判断するために構成ファイルから読出し、ROWでない場合に、アベンド(abend)する。初期化の際、VAMはアクティブバイナリログファイルの名前を得る必要がある。図2に示されるように、実施例132に従うと、MySQLデータベース104は、上記の構成設定およびパラメータを用いて、現行のバイナリログファイル106(または複数のバイナリログファイル108)にデータ変更を書込むことができる。アクティブバイナリログを定めるために、VAM111は環境変数または与えられたVAMパラメータからMySQL設置ホームを得て、MySQL初期化ファイルを読出し(すなわち、ウインドウズ(登録商標)プラットフォームではmy.iniであり、他のプラットフォームではmy.confファイルであり);「ログ-ビン」パラメータの値を得て、ログディレクトリ場所およびログインデックスファイル名を得て、ログインデックスファイル140を開けて内容142を読出す。この内容から、VAMはリストの最後のログファイルを判断し、この情報を用いて特定のログファイルを開き144、そのログファイルがまだサーバによって使用されているかどうかをチェックする(たとえば、フォーマット記述イベントのフラグ値がLOG_EVENT_BINLOG_IN_USE_Fであるかチェックする)。イエスなら、MySQLサーバは現在書込のためにこのログファイルを使用しているのであり、VAMはこのログファイルをアクティブログファイルとして扱う。
図3は、一実施例に従う異種ログベースレプリケーション用の処理のフローチャートである。図3に示されるように、ステップ160において、ソースシステム(たとえばMySQLデータベース)は、トランザクションデータをバイナリログに書込むよう構成されている。ステップ162において、ランタイム中に、1つ以上のバイナリログが作成され、たとえばSQLまたは他のデータベースステートメントに対応するイベント入力として、トランザクションまたは変更データが中に記憶される。ステップ164において、VAM(MySQLデータベースの場合、MySQL VAM)はバイナリログイベントを読出し、これらをデータレコードのキューに処理する。ステップ166において、トランザクションデータのリクエストが受取られると、VAMはキューからデータレコードを取ってきて、VAM APIに送る。ステップ168において、extractプロセス(たとえば、Oracle GoldenGate)はAPIから読出し、トランザクションまたは変更データを反映して、トレール情報またはトレールファイル(たとえばOracle GoldenGateトレールファイル)を作成する。ステップ170において、トレール情報またはトレールファイルは、1つ以上のターゲットシステム(たとえば、ターゲットデータベース)に通信または「ポンプ」され、そのトレール情報またはトレールファイルは、(ここでも、Oracle GoldenGateまたは他のプロダクトを使用して)そのターゲットシステムでトランザクションをレプリケーションするのに使用される。
ログ回転
一実施例に従うと、バイナリログと係わる特定の種類のイベントは回転イベントであり、これは可能なログ回転を示す、すなわち、MySQLサーバが現行のバイナリログを閉じて新しいバイナリログを開くたびに、バイナリログにログされる。ログ回転の可能な理由は、たとえばログファイルのサイズがmax_binlog_sizeパラメータを超える、または明確な「フラッシュログ」コマンドが、MySQLコマンドコンソールから発せられた場合を含む。この場合、MySQLは現行のバイナリログに回転イベントを作成し、現行のバイナリログを閉じて、さらに処理するために新しいバイナリログを開く。回転イベントは、作成するべき新しいログファイルを示す。一実施例に従うと、VAMはこの値を用いて既存のバイナリログファイルを閉じ、新しいバイナリログファイルを開け、その読出を続けることができる。
一実施例に従うと、回転イベントは、CRotateEvent C++クラスによって表わされ、これは以下のように定義される:
一実施例に従うと、以下のシナリオはMySQLのログ回転を引き起こす(すなわち、既存のアクティブログファイルを閉じて、新しいログファイルを開く):
1.アクティブログファイルのサイズが、max_binlog_size値を超えた場合(my.iniまたはmy.confファイルで指定されている)。このシナリオでは:
a.MySQLはアクティブバイナリログにおいて’Rotate Event’をログする。回転イベントデータ部は、新しいアクティブバイナリログの場所および名前を含む。
b.MySQLはアクティブバイナリログを閉じて、フォーマット記述イベントフラグをNULLにリセットする(このフラグは前にLOG_EVENT_BINLOG_IN_USE_F値に設定されている)。
c.MySQLは新しいバイナリログを作成し、フォーマット記述イベントフラグをLOG_EVENT_BINLOG_IN_USE_F値に設定する。
2.明確な「フラッシュログ」コマンドがMySQL SQLプロンプトで発行された場合。このシナリオでは:
a.MySQLはアクティブバイナリログにおいて’Rotate Event’をログする。回転イベントデータ部は、新しいアクティブバイナリログの場所および名前を含む。
b.MySQLはアクティブバイナリログを閉じて、フォーマット記述イベントフラグをNULLにリセットする(このフラグは前にLOG_EVENT_BINLOG_IN_USE_F値に設定されている)。
c.MySQLは新しいバイナリログを作成し、フォーマット記述イベントフラグをLOG_EVENT_BINLOG_IN_USE_F値に設定する。
3.サーバシャットダウンの際。このシナリオでは:
a.MySQLはアクティブバイナリログに’Stop Event’をログする。
b.MySQLはバイナリログを閉じ、さらにフォーマット記述イベントフラグをNULL値にリセットする(このフラグは前にLOG_EVENT_BINLOG_IN_USE_F値に設定されている)。
4.サーバスタートアップの際。このシナリオでは:
a.MySQLは新しいバイナリログを作成し、フォーマット記述イベントフラグをLOG_EVENT_BINLOG_IN_USE_F値に設定する。
一実施例に従うと、上記のシナリオ1および2では、VAMはログ回転が起こったことを識別するために回転イベントを使用し、次のバイナリログの名前を得るために、回転イベントデータを用いる。VAMは次のバイナリログを開き、そのバイナリログ読出を続ける。上記のシナリオ3および4では、VAMがストップイベントに出合うと、使用しているバイナリログを閉じて、次のバイナリログがあるかログインデックスファイルをチェックする。VAMがインデックスファイルにおいて次のバイナリログを見つけると、そのバイナリログを開いて読出を続ける。VAMがインデックスファイルにおいて新しいログファイル名を見つけることができなかった(たとえば、サーバがまだシャットダウンモードにあるか、シャットダウン後、スタートしていない)場合、VAMはextractに対してアベンドすることを知らせる。
サーバクラッシュの際、フォーマット記述イベントのフラグがサーバの再スタートのときにサーバによってリセットされない可能性は小さく、またはMySQLサーバがアクティブバイナリログファイルに回転イベントもしくはストップイベントのどちらもログしない可能性は小さい。後のスタートアップの際、サーバはより古いバイナリログのフラグをリセットすることなく、新しいバイナリログファイルを作成する。一実施例に従うと、この状況では、2つのバイナリログがLOG_EVENT_BINLOG_IN_USE_F状態のフラグを設定していることになる。VAMがこのシナリオに出合うのは以下の条件の場合である:(1)VAMは現在アクティブバイナリログを処理している。サーバクラッシュが読出のときに起こる。この場合、extractを停止させ、クラッシュリカバリを行ない、サーバスタートアップの後VAMを再度スタートさせるのがよい;および(2)VAMはより古いログファイルを読むよう位置付けられている。1つのファイルから別のファイルに読出す間(すなわちログ回転の間)、LOG_EVENT_BINLOG_IN_USE_Fの値のログファイルフラグに出合う。このログファイルは最新のログファイルではないことに注意しなければならない(すなわち、アクティブなバイナリログではない)。EOFが起こると、MySQL VAMは次のログファイルがあるかどうかについて、ログインデックスファイルをチェックする。この場合、VAMはサーバクラッシュが前に起こっているとみなし、既存のログファイルを閉じ、次のログファイルを開けてログリーディングを続ける。
図4は、一実施例に従う、ログ回転の使用182を示す。図4に示されるように、ステップ184において、VAMはログインデックスファイルを解析してバイナリログファイルをリストする。ステップ186において、シーケンスIDが読取られて、ログファイル名および場所が得られる。ステップ188において、ログファイルが開けられる。ステップ190において、ファイルのEOFがチェックされ、ステップ198において、EOFに達しなければ、イベントは順次ファイルログから読出される。ステップ200から204において、VAMはクエリーイベント、ローイベント、回転イベント、および/またはストップイベントといったイベントを判断する。ステップ208において、次のログファイルは回転イベント情報から得ることができる。
VAM実施
上記のように、一実施例に従うと、当該システムおよび方法は、たとえばMySQLデータベースまたはシステムと別の種類のデータベースまたはシステムとの間でデータを転送するために、ログベースレプリケーションを用いること、またはMySQLのようなデータベースプロダクトもしくはOracle GoldenGateのようなデータレプリケーションプロダクトを用いることを可能にする。以下の部分は、このような実施の形態および対応するベンダーアクセスモジュール(VAM)またはアプリケーションプログラムインターフェイス(API)の特定の実施を説明する。
バイナリログサポート
上記のように、一実施例に従うと、VAM(MySQL VAM)は、データをキャプチャするためにMySQLバイナリログを使用する。MySQLバイナリログは、DML操作といったような、データを変更するステートメントデータを含む。ステートメントは、変更を記述する「イベント」の形で記憶される。
バイナリログは2つの重要な役割を果たす:レプリケーションであって、バイナリログは、スレーブサーバに送られるステートメントの記録として、マスタレプリケーションサーバで用いられる。マスタサーバはそのバイナリログに含まれるイベントをスレーブに送り、そこでマスタで行なわれたのと同じデータ変更を行なうためにイベントが実行され;およびデータリカバリであって、特定のデータリカバリ操作はバイナリログの使用を必要とする。
バックアップファイルが回復されると、バックアップが行なわれた後に記録されたバイナリログのイベントは再実行される。これらのイベントにより、データベースはバックアップ時点のものから現在のものになる。完全なバックアップのためには、ユーザー(例えば、顧客)はMySQLDumpユーティリティを使用し、その後増分バックアップ用にバイナリログを使用することができる。
バイナリログ構成
一実施例に従うと、バイナリログがトランザクションデータを記憶可能にすることは、MySQLの設置によってデフォルトでは設定されない。その代わりに、「ログ-ビン」のパラメータを用いてバイナリロギングを可能にする。このパラメータは初期化ファイルにおいて、ウインドウズ(登録商標)プラットフォームではmy.iniとして、他のプラットフォームではmy.confとして指定される)。
MySQLバージョン5.1の前のリリースでは、バイナリログはステートメントレベル情報を含んでいた、すなわち、完全なDDLおよびDMLステートメントをログしていた。異種性を支持するために、データが汎用的なデータフォーマットで利用可能にするためには、純粋なテキストSQLステートメントに基づいてログベースキャプチャを構築することは難しい。しかしMySQL5.1リリースは、上記の問題を軽減するために、バイナリロギングサポートを導入している。さらに、MySQLは、バイナリデータへのアクセスのために内部C++クラスを提供している。
一実施例に従うと、バイナリロギングを可能にするために、MySQLサーバを構成するのに、以下のステップが必要である:MySQLサーバ構成ファイルを開く(ウインドウズ(登録商標)プラットフォームではmy.iniであり、他のプラットフォームではmy.confである);「ログ-ビン」パラメータを用いてバイナリロギングを能動化する。このオプションの値は、ログファイル用のディレクトリ場所を特定する。たとえば:
log-bin="C:/MySQL/MySQL Server 5.1/log/test.bin"
上記の例では、ログファイルの名前は‘test.00001, test.00002 …’などで作成される。これらのファイルは、"c:/MySQL/MySQL Server 5.1/log"ディレクトリに記憶される。構成ファイルにおいて、ロギングフォーマットはROWモードでのみ構成されるべきである。MIXEDモードはサポートされていない。このオプションにより、DMLステートメントはデータをバイナリフォーマットでログすることができる。これは、‘binlog_format’パラメータを用いることにより達成することができる。‘max_binlog_size’オプションを用いて、バイナリログファイルのサイズ(バイト単位)を指定することができる。最小値は4096となるべきである。
IngressおよびSybaseといった他のベンダで見られる循環型ロギングスタイルと比べて、MySQLのバイナリログは順次作成され番号が付けられる。MySQLはより古いログファイルを自動的にはアーカイブしないので、古いログファイルを保つ/バックアップするために、エンドユーザ/顧客は十分に注意しなければならない。一実施例に従うと、以下の処理は新しいバイナリログファイルを作成し、既存ログファイルを閉じる:サーバデーモン、mysqldが開始された場合;FLUSH LOGSまたはFLUSH MASTERといったMySQLコマンドコンソールプログラム(mysql)からフラッシュコマンドを明示する。現行のログサイズがmax_binlog_sizeパラメータに達すると、サーバはさらに新しいバイナリログファイルを自動的に作成する。
一実施例に従うと、MySQLはアクティブなおよび古いバイナリログファイルを含めたリストを含むインデックスファイルを維持する。このインデックスファイルは、他のバイナリログと同じディレクトリ場所にある。MySQLバイナリログは、特定テーブル/カラムのロギングのターンオフ/オンをサポートしない。
トランザクションおよびバイナリログ
一実施例に従うと、非トランザクションテーブルへの更新は、実行の後すぐにバイナリログに記憶される。拘束のないトランザクションでは、InnoDPテーブルといったトランザクションテーブルを変更するすべての更新(INSERT、DELETE、UPDATE)は、COMMITステートメントがサーバによって受取られるまでキャッシュされる。MySQLは、更新操作からより多くのデータを収容するために、一時ファイルを開いてキャッシュをフラッシュする。その時点で、mysqld(サーバデーモン)はトランザクション全体をバイナリログに書込む。サーバデーモンはROLLBACKステートメントが発行されたのなら、トランザクションデータを書込まない。バイナリログに関するかぎり、ロールバック操作はno−opの非記録操作である。
更新が混合しているトランザクションを、トランザクションテーブルおよび非トランザクションテーブルの両方にロールバックする場合、サーバデーモンはROLLBACKステートメントをログに明示する。SAVEPOINTステートメントは、ある名前の付けられたトランザクションセーブポイントを任意の名前に設定するために用いられる。ROLLBACK TO SAVEPOINTステートメントを用いて、トランザクションを示されたセーブポイントにロールバックする。MySQLはネストされたトランザクションまたはトランザクションのネーミングをサポートしない。新しいトランザクションが開始された場合、または前回のものがCOMMITもしくはROLLBACKで終了することなくサーバが閉じられた場合、MySQLは新しいトランザクショを開始させる前、またはサーバがシャットダウンされる前に、自動的により古いトランザクションのデータをディスクにコミットする。MySQLはトランザクションを複数のバイナリファイル間で分割しない。
一実施例に従うと、トランザクションデータのサイズが‘max_binlog_size’パラメータ値を超えた場合、バイナリログファイルの大きさが‘max_binlog_size’パラメータを用いて指定された値を超えることができる。非操作の更新(更新が「ゼロ」カラムをもたらす)は、バイナリログに書込まれない。これは空のトランザクションの場合にも当てはまる。カラムを自己に更新するためにトリガが用いられた場合、MySQLはステートメント更新の結果よりも、トリガ更新の結果をログする。たとえば、以下のトリガの場合、年齢を20に更新すると、MySQLは20ではなく、25の値(トリガの結果)をログさせる:
プラットフォームサポート
さまざまな実施例に従うと、本システムはWindows、Linux Operating system、HPUX、およびSolaris OS(登録商標)をサポートすることができる。MySQL VAMがバイナリログイベントをキャプチャするためには、MySQLextractプロセスには以下の許可が必要である(以下の許可は、非ウインドウズプラットフォームに適用可能である):構成ファイル(my.cnf)があるディレクトリ用のおよびバイナリログが生成されるディレクトリ用の読出しおよび実行許可;構成ファイル(my.cnf)用の読出許可;読出、書込(MySQLデーモンプロセスで使用);tmpディレクトリ(規定)用の実行許可。
バージョンサポート
MySQLは3.x以降のリリースからバイナリログをサポートする。リリース5.1以前では、DML操作によるデータベーステーブルへの変更は、SQLステートメント(テキスト形式)でバイナリログにログされた。リリース5.1以降では、MySQLバイナリログは、DML操作をバイナリ形式でローデータとしてストアする。一実施例に従うと、テキストに基づくSQLステートメントでの処理と比べて、このバイナリデータを読出し、これらをたとえばOracle GoldenGate汎用フォーマットに変換することは、MySQL VAMにとってより容易である。
データタイプサポート
表2は一実施例に従うサポートされるデータタイプを示す。
ストレージエンジンサポート
一実施例に従うと、MySQL VAMは以下のストレージエンジンをサポートする:MyISAM-非トランザクションストレージエンジン;およびInnoDB−トランザクションストレージエンジン。
サポートされているデータベース操作
一実施例に従うと、MySQL VAMはバイナリログから以下のデータベース操作をキャプチャすることができる:Startトランザクション、Commitトランザクション、Rollbackトランザクション−MySQLはバイナリログにロールバックされたトランザクションを送信するのではなく、MySQLはトランザクションがInnoDBのテーブルおよび同じトランザクションに関与しているmylSAMタイプに係わる場合、「トランザクションロールバック操作」をログする;挿入操作;更新操作;削除操作;切捨て操作。
最大ローサイズおよびカラムサポート
一実施例に従うと、MySQLの最大データベースローサイズ(現在64k)はすべて、たとえばOracle GoldenGateアプリケーションによってサポートされている。所与のMySQLテーブル用の最大カラム数(現在3398);MySQL用の最大オブジェクト名長さ(schema.table);およびMySQLの最大オブジェクト名長さ(schema.table)が支持される。InnoDBストレージエンジンを有するMySQLは、カラム数が1000を超えてはならないという制限を含む。
圧縮更新および削除のサポート
一実施例に従うと、バイナリログは、DML操作の一部ではないカラム値を記憶する。MySQL VAMとキャプチャモジュールとの間のデータ転送を最小にするために、圧縮更新および削除がサポートされる。
AUTO_INCREMENTカラム
一実施例に従うと、AUTO_INCREMENTカラム属性を用いて新しいローの一意的識別を生成することができる。このカラム値はほとんどの場合システムで生成されるので、以下の2つの要件が支持される:ターゲット側へのAUTO_INCREMENTカラム値の伝搬−MySQLログは、このAUTO_INCREMENTカラム値をバイナリログに記憶する。アプライ(apply)側(すなわちターゲット)では、replicatプロセスがオートインクリメントなカラム値の明示挿入操作を挿入する。MySQLは挿入操作の際、AUTO INCREMENTカラムを特定の値に強制することをサポートし;およびBi方向サポート−INSERT操作の際、AUTO_INCREMENTカラム値は次のより高い値で挿入される。
MySQLは双方向の‘auto_increment_’カラム問題を解決するために、‘auto_increment_increment’および‘auto_increment_offset’の2つの変数(初期化ファイルmy.iniを介して構成)をサポートする。これらサーバ側変数は、双方向設定の競合を解決するために、ソース側およびターゲット側で異なって設定できる。
双方向データレプリケーションサポート
一実施例に従うと、双方向ループ検出をサポートするために、MySQL VAMモジュールは、ユーザid、トランザクションidに基づき、レコードをフィルタ処理する。MySQLバイナリログは、これらの値をイベントには記憶しない。双方向ループ検出は、ターゲット側で、トレーステーブルまたはチェックポイントテーブル(FILTERTABLE オプションを用いて構成)を介してサポートされるべきである。MySQL双方向構成は、キャプチャから除外するためにReplicatトランザクションを識別するため、Replicatチェックポイントテーブルの使用を必要とする。extractは、チェックポイントテーブルでの操作で終わるトランザクションは無視する。この機能をサポートするために、TRANLOGOPTIONSはチェックポイントテーブルの名前を特定する新しいFILTERTABLE<テーブル>オプションを与える。Replicatデータベースユーザは、‘sql_log_bin’変数を用いてセッションレベルバイナリロギングをオフにすることができる。アプライ側では、Replicatユーザはこの値を0に設定して、バイナリロギングをオフにする。
LSNおよびタイムスタンプによる位置付け
一実施例に従うと、MySQL VAMはタイムスタンプによる位置付けおよびLSNによる位置付けをサポートする。タイムスタンプ位置は、ADD/ALTER抽出コマンドを用いて設定される。たとえば:
ADD/ALTER EXTRACT extract_name,MYSQL VAM, begin timestamp_value
ここで有効なタイムスタンプ値は以下のとおりである:
NOW(またはnow)−extractは、加えるまたは変更されたときの現行タイムスタンプ値を取る。MySQLMySQL VAMはタイムスタンプ値がこのタイムスタンプ値と等しいまたはより大きいトランザクションレコードを読出す。
今までのタイムスタンプ値−MySQL VAMはログファイルを検索し、タイムスタンプ値がこのタイムスタンプ値と等しいまたはより大きいトランザクションレコードを読出す。
今後のタイムスタンプ値−MySQL VAMは待機し、タイムスタンプ値がこのタイムスタンプ値と等しいまたはより大きいトランザクションレコードを読出す。
LSN値による位置付けは、ADD/ALTER抽出コマンドを用いて設定される。たとえば:
ADD/ALTER EXTRACT extract_name,MYSQL VAM,lognum log_num , logpos log_pos
ここでlog_numはログファイル番号である。たとえば、ログファイル名がtest.000034である場合、この値は34となる。MySQLMySQL VAMはこのログファイルを検索し、さらに読出すために開く:およびlog_posはログファイル内のオフセット値である。この場所後で利用可能なトランザクションレコードは、MySQL VAMによって読出される。
アーカイブログサポート
上記のように、一実施例に従うと、IngressおよびSybaseといった他のベンダで見られる循環型ロギングスタイルと比べて、MySQLのバイナリログは順次作成され番号が付けられる。MySQLは古いログファイルを自動的にはアーカイブしない。ログファイルは初期ファイルで指定されたログディレクトリに保持される。したがって顧客はより古いログファイルを保つ/バックアップするよう、注意しなければならない。一実施例に従うと、MySQL VAMを用いて位置付けおよびより古いログファイルの読み出しがサポートされる。MySQL VAMは、管理者または他のバックアップツールによって他の場所に移動させられたより古いログファイルを位置付けることが要求された場合、エラーを返すか、操作をアベンドする。
DDLレプリケーション
一実施例に従うと、バイナリログはDDLステートメントをテキストに基づくSQLステートメントとして記憶し、MySQL VAMはこの特徴をサポートする。
FetchColsおよびFetchModColsサポート
一実施例に従うと、FetchColsおよびFETCHCOLSEXCEPTを用いて、値がトランザクションログレコードにない場合に、カラム値をデータベースから取ってくることができる。このオプションは、データベースが圧縮更新を用いる場合(カラム値は変更されない限りログされない)に使用することができる。FETCHCOLS およびFETCHCOLSEXCEPTは、FILTER操作に必要なカラム値が利用可能であることを確実にする:
FETCHCOLSは特定カラムを取ってくる。
FETCHCOLSEXCEPTは、指定されているもの以外は、すべてのカラムを取ってくる。多くのカラムを有するテーブルでは、FETCHCOLSEXCEPTは各カラムをFETCHCOLSでリストするよりも有効であり得る。
FETCHMODCOLS およびFETCHMODCOLSEXCEPTは、カラムがトランザクションログにある場合でも、カラム値をデータベースから取ってくることを強制するために使用することができる。トランザクションログで存在し得る値は、変更されたカラムまたは補足ロギングで含まれたカラムのものである:
FETCHMODCOLSは特定カラムを取ってくる。
FETCHMODCOLSEXCEPTは、指定されているもの以外は、トランザクションログにあるすべてのカラムを取ってくる。多くのカラムを有するテーブルでは、FETCHMODCOL。
一実施例に従うと、この特徴はキャプチャする側でサポートされる。
初期ロードサポート
一実施例に従うと、MySQL VAMは初期ロードサポートを含む。
オープンソースデータベースおよびオープンソースオペレーティングシステムの人気に伴い、ますます多くの顧客はMySQLを仕事の一部として使い始めている。事業が成長するにつれ、組織は複雑なデータ管理を管理するために、MySQLからOracle/DB2/SQLServerに移行したいと考え、一般に以下の工程をたどる:
ステップ1、既存のMySQLデータを顧客の選択されたデータベースに移行。この課題のために、キャプチャ側初期ロードサポートを用いることができる;
ステップ2、移行がうまく行けば、リアルタイムレプリケーション(またはデータキャプチャを変更)を能動化する。MySQL VAMを用いてこの課題を達成することができる。
以下の初期ロード方法がサポートされている:Replicatでデータをロードする−extractプロセスは、データをテーブルから直接抽出する。この方法は実際はより遅い。なぜなら、アプライ側では1レコードずつ与えられるからである;バルクロードユーティリティでデータをロードする−extractプロセスはレコードをASCIIフォーマットで出力し、これは後でSQLLOADERまたはBCPで使われる;GoldenGate直接ロードでデータをロードする−extractプロセスはデータを直接テーブルから抽出し、replicatプロセスを呼出す。データを直接SQL*ローダにロードする。
その他の要件
一実施例に従うと、MySQL VAMモジュールは、たとえば付加的切捨点を加える(SyBASEcase)により、バイナリログ内容を変更しない。したがって、同じバイナリログでの2つ以上のextractプロセスの読出しのサポートが可能である。一実施例に従うと、MySQL VAMはレプリケーションオプションで構成されるMySQLデータベースと共存する。extractにおいて新しいパラメータを追加したりMySQLに特有のパラメータファイルを用いないよう注意しなければならない。
大文字および小文字の区別
一実施例に従うと、MySQLはデータベース名をディレクトリ名として、およびテーブル名をファイル名としてマッピングする(.frmファイルはテーブルについてのメタデータを保持する)。大文字および小文字によって区別されるテーブル名は、MySQLが実行される下地となるオペレーティングシステムに依存する。MySQLはウインドウズ(登録商標)プラットフォームにおいて大文字小文字が混合しているテーブル名を区別せず、UNIX(登録商標)プラットフォームのほとんどの種類において大文字小文字の区別をする。
文字設定サポート
一実施例に従うと、MySQLはCHAR、VARCHAR、 TEXT およびENUMカラムタイプ用にUNICODE文字セットをサポートする。MySQLはそのストリングカラムについてUTF8およびUTF16(ucs2)符号化の両方をサポートする。UNICODE文字セットでは、データはUTF16値としてトレールファイルに記憶されなければならない。ストリングカラム用のUTF8符号化の場合、MySQL VAMモジュール、初期ロードモジュール、およびアプライ側モジュールは、内部変換ライブラリを用いてデータをUTF16値に(またはから)変換する。MySQLはNCHAR, NVARCHARカラムタイプをサポートする。これらは、UTF8文字セットを有するカラムとして内部的にマッピングされる。MySQLキャプチャは、最初のリリースから、UTF8およびUSC2文字セットをサポートする。一実施例に従うと、MySQLキャプチャおよびアプライモジュールはUNICODE文字セットで認定されている。
付加的構成要件
一実施例に従うと、MySQL VAMは環境変数‘MYSQL_HOME’が正しく設定されることを必要とする。この変数は、MySQLデータベースの設置場所を示さなければならない。MySQL VAMはこの変数を用いてMySQL構成ファイルを検索する(ウインドウズ(登録商標)プラットフォームではmy.iniであり、ウインドウズでないプラットフォームではmy.confである)。さらに、以下のパラメータがMySQL構成ファイルの中に設定されなければならない(my.iniまたはmy.conf):「ログービン」パラメータを用いてバイナリロギングを能動化する−このオプションの値はログファイル用のディレクトリ場所を特定する;‘binlog_format’パラメータを用いてログフォーマットを指定する−これはROWモードとしてのみ構成されるべきである。‘MIXED’ および‘STATEMENT’モードはサポートされていない。たとえば:
この例では、ログファイルの名前は‘test.00001, test.00002’などで作成される。これらのファイルは“c:/MySQL/MySQL Server 5.1/log”ディレクトリに記憶される。
MySQL C++クラスの直接使用
MySQLは外の世界に対して利用可能な十分に規定されたログAPIを持たないが、バイナリログの内容を写す十分に定義されたファイルアクセスIO_CACHEクラスおよびイベントクラス(C++で公開)を有する。MySQLはログイベントについて別個の読出および処理を有する。内部IO_CACHEクラスはバイナリログデータをかたまりとしてオンデマンドで読出す(ディスクIOオーバーヘッドを避けるために、最小64kサイズ)。これらクラスにより、APIはこのブロックから読出することができる。処理側では、MySQLはデータをイベント特有のC++クラスの型に変換するために用いることができるイベントクラスを有する。この公的に利用可能なMySQLクラスは以下の欠点を有する:IO_CACHEクラスはメモリへの1回のショットでバイナリログイベントデータを読出す(サイズが64kを超えた場合)。より大きいデータを含むイベント(たとえば、サイズが2GBであるLOBデータ)では、これは問題となり得る;IO_CACHEクラスは自己でpthread特有機能を再度実施する。これはMySQL VAMがextractモジュールでリンクする際、一連のリンカーエラー(再定義)を発生させる。
一実施例に従うと、MySQL VAMはIO_CACHEクラスおよびイベントプロセッサクラスの両方を再度実施することができる。これはバイナリログをアクセスするMySQL VAMに完全な制御を与える。さらに、これはリンカーエラー、より大きいLOBデータフェッチング(fetching)およびMySQL特有ソースコードファイルまたはヘッダファイルの依存といった問題を緩和する。
一実施例に従うと、MySQL VAMは処理イベント用にC++クラスを再度実施し、バッファIO読出用にIO_CACHEクラスを使用することができる。このアプローチは、MySQLソースコードが、たとえばGoldenGate作成環境にいなければならないという依存性を減らす。このアプローチはさらにMySQL VAMがどのようにイベントデータを処理するかについての完全な制御を与える。頻繁に用いられるイベント状況も同様にリサイクルすることができる。
一実施例に従うと、MySQL VAMはMySQLに特有のイベントクラスおよびIO_CACHEクラスを用いてバイナリログをアクセスすることができる。MySQL VAMクラスは、MySQL VAMに特有の必要な機能を提供するために、イベントクラスから受け継ぐ必要がある。
符号付きまたは符号のない整数
MySQLは符号付きまたは符号なし(デフォルトは符号付き)のいずれかで定義される整数カラムをサポートする。たとえば、2バイトの符号付き整数カラムは、−32kから+32kの値をサポートし、符号がないものは0から+64kをサポートする。バイナリログは、数値カラムの符号について、すなわちそのカラムが符号付きまたは符号なしモードを支持しているのなら、メタデータを返さない。2つの設計上のアプローチが可能である:常に符号付きの値を返す、−ターゲット側でreplicatはカラムの種類に基づき変換を行なう;またはextractからMySQLカラムのメタデータを得て、extractするために正しい値を返す。一実施例に従うと、MySQL VAMは数値を符号付きの値としてMySQL VAM APIに返す。
シーケンスIdによる位置付け
一実施例に従うと、バイナリログの中では、MySQLイベントはそのヘッダ部に場所値を有する。この値の寿命はバイナリファイルに特有である。すなわち、この場所値は所与のバイナリファイル内では固有のものであり得るが、バイナリファイルの外では固有ではない。2つの異なるバイナリファイルにおける2つの異なるイベントは同じ値を有し得る。場所によってトランザクションレコードを固有に識別するためには、MySQL VAMはこのイベント場所値をログファイル名と結合する。たとえば、‘binlog.00054:123’では、‘binlog.00054’はバイナリログの名前であり、123はトランザクションレコードの場所である。MySQL VAMはGG_ATTR_DS_SEQIDを用いてこの値をASCIIストリング属性として送る。
一実施例に従うと、再スタートシナリオの際、extractはこの最後に受取られたシーケンスId値をMYSQL VAMIntialize()コールの際にMySQL VAMに送る。MySQL VAMはこの値を用いて正しい読出場所を設定する。MySQL VAMはこのシーケンスIdをextractから解析し、ログファイル名およびイベント場所を得る。次に、対応するログファイルを開き、イベントのスキャンを開始する。イベントの場所がシーケンスIdで特定されているものと一致すると、MySQL VAMはこの場所を現行の読出場所として設定し、この場所からバイナリログ内容の読出を開始する。
トランザクションID
DML操作を表わすイベントでは、MySQLはトランザクションIdをイベントデータの一部として持たない。したがって、MySQL VAMはこのトランザクションId(固有のもの)をMySQL VAM APIに送るための方法が必要である。一実施例に従うと、この問題を解決するために、MySQL VAM APIは‘START Transaction’ステートメントのシーケンスIdをトランザクションIdとして扱う。このシーケンスIdは、ログファイル名+ファイル内のイベントオフセットの組合せであるので、トランザクションIdの固有性は複数のログファイル間で保証される。さらに、MySQL VAMはこの擬似トランザクションIdを内部で維持し、この値を特定のトランザクション内のすべてのDMLステートメントに対してMySQL VAM APIに送る。MySQL VAMは「コミット」または「ロールバック」ステートメントに出くわすと、この値をクリアする。
LOBデータへのアクセス
MySQLバイナリログにおいて、LOBカラム値は他の非LOBカラム値とインラインで記憶される。これは他のデータベースと異なる。なぜなら、値はインラインでストアされず、データがオンデマンドでフェッチ(fetch)することができるロケータまたはクーポンを用いてアクセスされないからである。MySQLデータベースの場合では違う(ストレージエンジンMyISAM およびInnoDBを有する)。バイナリログからLOBカラム値を読出すため、MySQL内部IO_CACHEクラスは、ログファイルからこのLOBカラム値の全体の値をフェッチしてメモリに渡す、すなわち、メモリはこのクラスにより1回でこのLOBカラム用に完全に割当てられる。
一実施例に従うと、MySQL VAM APIはより大きいサイズのLOBデータは塊でMySQL VAM APIに送られるべきであるという仕様概要を与える。しかし、MySQLの場合、データは既にMySQL内部クラスで完全に既にフェッチされている(すなわち、メモリはIO_CACHEオブジェクトによって完全に割当てられており)、LOBデータは32kバイトのサイズの塊で、1つのコールや複数のコールで、MySQL VAM APIに送ることができる。一実施例に従うと、上記のように、MySQLのIO_CACHEクラスはLOBデータの全体の値を他のローデータとともに、ワンショットでフェッチする。これは、LOBのサイズが2GBである場合問題となる。1つの方法は、MySQL VAMがデータを塊でファイルから読出すことができるよう、IO_CACHEクラスの実施を書き直すことである。GoldenGate(あれば)から既存のファイルマネージャライブラリを用いることができる。一実施例に従うと、システムはIO_CACHEクラスを使用し、ログデータを塊でMySQL VAM APIに送る。
一実施例に従うと、MySQL VAM実施は、バイナリログファイルを読出すために、IO_CACHEクラスを使用することができる。LOBデータ制限を除き、IO_CACHEクラスはうまく他のMySQLデータの読出を扱う。さらに、LOBデータを2GBのサイズで処理することは実質的に珍しい(または滅多にない)。LOBカラムの内部記憶機構と無関係に、MySQL VAM APIが必要ならページアウトできるよう、MySQL VAMはLOBデータを塊でMySQL VAM APIに返すべきである。
OG処理およびMySQL VAM API通信
一実施例に従うと、MySQL VAM実施は2つの部分に分割することができる:第1の部分はLOGデータをバイナリログから読出し、データを準備し、データをMySQL VAM API用に用意する−これは別のスレッドで実行される;第2の部分は用意ができたデータ(レコード)をリクエスト毎にAPIに送る。この従来の設計での主な欠点は、すべて(完全な処理)はMySQL VAM APIがリクエストした場合にしか起こらないことであり、MySQL VAMモジュールが処理を完了するのに何らかの実行時間を必要とする。この間、MySQL VAM APIはアイドル状態にあり、MySQL VAMのパフォーマンスを低下させる。設計を2つの部分に分割することにより、MySQL VAM APIのアイドル時間がなくなる。第1の部分が独立してバイナリログを読出す間、システムはAPIに送るべきデータの準備を行ない、制限されたサイズQueue(キュー)に記憶する。次に、第2の部分はQueueから用意ができたレコードをフェッチし、MySQL VAM API側からリクエストが来ると直ちにMySQL VAM APIに送る。
アーキテクチャ設計
上記のように、一実施例に従うと、MySQL VAMモジュールの全体のアーキテクチャは以下を含む:
MySQLライブラリ−ファイルリーダ、ファイルCACHE、データ変換クラスを与えるライブラリ。
MySQL VAMイベントクラス−MySQLバイナリログからイベントを処理するMySQL VAMのインハウス実施。
MySQL VAMバイナリログクラス−MySQLライブラリをラップアラウンドするクラス、MySQL VAMイベントクラス。現行のバイナリログを開き、イベントを読出し、MySQL VAMレコードに変換し、ログ回転を処理するなど。
MySQL VAMリーダ、プロセッサクラス−ビンログクラスからレコードを読出しおよび処理し、レコードキューに入れるクラス。これらクラスはextractコールによりブロックではなく自己の専用スレッドを有する。
レコードキュー−後でMYSQL VAMRead ()コールによって使われるためにレコードを保持するキュー。
MySQL VAMレコードクラス−レコードキューからデータを読出し、MySQL VAM APIを用いてextractに送るクラス。
Extractプロセス−MySQL VAM APIからデータをキャプチャするためにコンパイルされた標準のGoldenGateextractプロセス。
バイナリログ構造およびログイベント
図5は一実施例に従うと、MySQLバイナリログでのイベント順序を示す。一実施例に従うと、MySQLはデータをイベント入力としてバイナリログ内に記憶する。MySQLは、SQLステートメントおよび操作の性質に基づき、さまざまなイベントをサポートする。MySQLはイベントデータを読出すためにC++クラスを与える。一般に、バイナリログ構造は以下のイベント入力を含む:
1.4バイトの魔法数で始まる。これは"\xfe\x62\x69\x6e"の値を有する定数BINLOG_MAGICとして定義される。この値は無視することができる。
2.次の入力はフォーマット記述イベントである。このイベントは所与のバイナリログファイルにわたって包括的である。MySQLはこのイベントを各バイナリログ毎に1回しか書込まない。このイベントは現行のバイナリログが使用されているかまたは正しく閉じられたかを追跡する。
3.一連のイベントが続く残りの入力は、図5に示される。
一実施例に従うと、MySQL VAMはバイナリログイベントのサブセットに興味を持つ。たとえば、MySQL VAMはトランザクション、DMLステートメントデータ、ログ回転などを表わすバイナリログイベントに興味を持つ。表3は、一実施例に係わる、MySQL VAMが興味を持つMySQLイベントのリストを示す。
イベント構造
図6は一実施例に従うイベントヘッダ構造を示す。すべてのイベントは汎用ヘッダ部と後に続くデータ部とを有する。一部のイベントは、任意のデータヘッダ部を有する。イベント構造は一般に次のように表わされる。
1.イベントヘッダ‐構造のサイズは19バイトである。この部分は、すべてのイベントに汎用的である以下のイベント特有データを含む。
4バイト−イベントのタイムスタンプ。1970年の開始からの秒数。
1バイト−イベントのタイプコード。タイプコードの対象の値および意味は次のとおりである: QUERY_EVENT= 2; STOP_EVENT= 3; ROTATE_EVENT= 4; FORMAT_DESCRIPTION_EVENT= 15; XID_EVENT= 16; TABLE_MAP_EVENT = 19; WRITE_ROWS_EVENT = 23; UPDATE_ROWS_EVENT = 24; DELETE_ROWS_EVENT = 25。
4バイト−サーバID。レプリケーションピア間でサーバを一意に識別。MySQL VAMはこの値を無視する。
4バイト−ヘッダを含むイベント全体の長さをバイトで表わす。
4バイト−ログにおけるイベントのオフセットをバイトで表わす。この値はLSNまたはシーケンス番号に類似している。
2バイト−イベントフラグ。MySQL VAMはこの値を無視する。
このイベントヘッダは、CLogEvent C++クラスによって表わされる。すべてのバイナリログ系イベント特有C++クラスはこのクラスから継承する。このクラスの構造は以下のように表わされる:
2.データヘッダ−構造のサイズは8バイトである。変数データを含むイベント(たとえば、テーブルマップイベント、書込ローイベントなど)はこの部分を含む。この部分は、以下を含む
6バイト−テーブル_idを含む。これは、テーブルバージョンとして扱うことができる。MySQL VAMはこの値を用いて、下地のテーブルメタデータが変更されたか否かをチェックする。
2バイト−データヘッダフラグ。MySQL VAMはこの値を無視する。
3.データ部−イベント特有データを保持する。たとえば、書込ローイベント用のカラム値のシーケンス、テーブルマップイベント用のカラムメタデータ。より詳細については、次の箇所参照。
イベントデータ部
一実施例に従うと、イベントデータ部はイベント特有データを保持する。データ部のサイズは動的である。すなわち、イベントの種類に応じて値は異なりかつ特定的であり、データの変数リストを保持する。次の箇所は、MySQL VAMが興味を持つイベントタイプのイベントデータ部の構造を説明する。
クエリーイベント
一実施例に従うと、このイベントはSQLクエリーを表わす。このイベントは、MySQL内部C++クラス‘CQueryEvent’によって表わされる。このイベントのデータ部は、データベース名、クエリーストリング値、および他の情報を含む。MySQL VAMはCQueryEventイベントを用いて、以下のメンバー変数を使ってこれらの値を引出す:
MySQLの‘BEGIN Transaction’および‘ROLLBACK Transaction’ならびに‘Truncate’ステートメントは、このCQueryEventクラスによって表わされる。これらのステートメントについて、メンバー「クエリー」は、“BEGIN”または“ROLLBACK”または“TRUNCATE table_name”といった値を含む。ログからこれらのステートメントをフィルタ処理するために、通常のストリングを用いることができる。
XID_イベント
一実施例に従うと、このイベントはトランザクションのコミットを表わす。このイベントは、MySQL内部C++クラス‘CXidEvent’によって表わされる。このイベントのデータ部は、MySQL VAMが無視する2相コミットトランザクションのトランザクションidを含む(MySQLレプリケーションもこの値を無視する)。MySQL VAMはこのイベント入力を用いてトランザクションがコミットされ、トランザクション特有オブジェクトと切離されていることと見なす。
テーブルマップイベント
一実施例に従うと、このイベントはトランザクションに係わる(DMLステートメントによって)テーブルのメタデータを表わす。このイベントは、書込、更新および削除ローイベントといったDML操作を表わすイベントより先に来る。たとえば、簡単な挿入操作はバイナリログにおいて2つの入力を引き起こす。最初の入力は、テーブルメタデータを含む「テーブルマップイベント」であり、次の入力はINSERT操作の一部として加えられるローデータを含む「書出ローイベント」である。汎用ヘッダ部とは別に、このイベントは付加的データヘッダ部+データ部を含む。(8バイトの)データヘッダ部は、以下のデータを含む:table_id:6バイト長−テーブルのメタデータ変更を追跡し;およびフラグを立てる:MySQL VAMはこのフラグを無視することができる。
所与のテーブルの時間テーブルマップイベントの大部分は、下地のテーブル構造が同じままであるのなら、変更されずに残る。バイナリログは同じテーブルマップイベントの複数の入力を含むが、これらを一度に処理して、後で再度用いる方がよい。これは、読出バイナリログのパフォーマンスの速度を上げる。Table_map_log_eventログクラスのインスタンスを記憶するのにハッシュテーブルを用いるのがよく、さらに処理するためにテーブル名を用いて後で引出すことができる。
データ構造が変更された場合(「テーブル変更…」ステートメントを使用)、MySQLは同じテーブルに対して新しいテーブルidを作成する。MySQLはテーブルidの履歴を記憶しない。バイナリログを読出す際にテーブルメタデータを変更する場合、MySQLは次のように扱う。1)プロセスをアベンドする。2)MySQL VAMは付加的処理のために変えられた(最新の)テーブル定義を用いる。一実施例に従うと、MySQL VAMは所与のテーブル名について既存のテーブルidをチェックし、異なれば、これはテーブルメタデータの変更として見なされ、MySQL VAMはextractにアベンドすることを知らせることができる。
テーブルマップイベントのデータ部は、以下のテーブルメタデータ情報を含む:
1バイト−データベース名の長さ。
nバイト−データベースネーム+null終了文字が続く。
1バイト−テーブル名の長さ。
nバイト−テーブル名+null終了文字が続く。
nバイト−カラム数。カラム数が255バイト以下である場合は1バイトであり、それ以外は2バイトである。
nバイト−テーブルの各カラムのタイプを記憶し、左から右側に示される。各バイトはMySQL内部カラムタイプにマッピングされる。
nバイト−フィールドメタデータのサイズ。より詳細については、フィールドメタデータ部(次の箇所)参照。
nバイト−フィールドメタデータ値。より詳細については、フィールドメタデータ部(次の箇所)参照。
nバイト−nullカラムビットであり、直近のバイトに切上げられる。各カラムについて、そのカラムのデータがnullであり得るか否かを示すビット。これに必要なバイト数はint((column_count+7)/8)である。左から最初のカラムのフラグは、第1のバイトの最下位ビットにあり、2番目は第1のバイトのつぎの最下位ビットにあり、9番目は第2バイトの最下位ビットにある、など。
フィールドメタデータ
図7は、一実施例に従うフィールドメタデータを示す。フィールドメタデータは一般にカラムメタデータのサイズに関連する付加的情報を表わす。これはパック長として扱うことができる、すなわち特定のカラム値を圧縮するのに必要な合計バイト数。これらの値は後で用いられて、実際の値を得るために適切なバイトを読出すために用いられる。固定長のカラムタイプ(たとえば、整数、日付など)については、このフィールドメタデータは通常ゼロである。たとえば、VARCHARのカラムタイプでは、このフィールドメタデータはVARCHARカラムの最大サイズを表わす。表4は異なるカラムタイプに対するフィールドメタデータ部の内容を示す。
‘MEDIUM BLOB’タイプのブロブカラムを有するテーブルがあるとする。ブロブカラムの最大サイズは16777216バイト(16MB)であり得る。このサイズは通常3バイト必要である。このテーブルに簡単な挿入操作が行なわれる。この挿入操作はバイナリログに、テーブルマップイベント(Table Map Event)、および書込ローイベント(Write Rows Event)を作成する。バイナリログは、書込ローイベント部にBLOBカラムおよび実際のBLOBデータを記憶する。このBLOBデータを検索するためには、MySQL VAMは以下のステップを行なわなければならない:
1.MySQL VAMはこのBLOBカラムの長さを計算するのに必要なバイト記憶領域を知る必要がある(この例では、16777216の長さを記憶するのに3バイト必要である)。この値は、‘テーブルマップイベント’の‘フィールドメタデータ(field metadata)’部から引出される。
2.上記の値に基づき、実際のデータ長を特定するために、MySQL VAMは‘書込ローイベント’から実際のローデータ値の最初の1つまたは2つまたは3つまたは4つのバイトを読出す。この場合、MySQL VAMはBLOBデータの実際の長さ値を得るために最初の3バイトを読出さなければならない。
3.MySQL VAMは実際の長さに基づき十分なメモリを割当て、バイナリログからデータをコピーする。
‘テーブルマップイベント’から、BLOBカラムに必要な最大カラムバイトストアを得る。これによって、3が返される。
column_max_datasize = uint2korr(m_field_metadata);
上記の値は‘書込ローイベント’から実際のデータを得るために用いることができる。
以下の例はテーブル′t1′のテーブルマップイベントのバイトシーケンス順序を示し、データベース′テスト(test)′は以下のように記述される:
図8は一実施例に従うテーブルマップイベント構造のテーブルを示す。テーブルマップイベントはC++クラス‘CTableMapEvent’によって表わされ、そのクラス構造は以下のとおりである:
書込ローイベント
図9は一実施例に従う書込ローイベント構造を示す。このイベントはMySQLINSERT操作を表わす。このイベントの前に、テーブルマップイベントが来る。汎用ヘッダ部とは別に、このイベントは付加的データヘッダ部+データ部を含む。(8バイトの)データヘッダ部は以下のデータを含み、これはより古いテーブルマップイベントと類似している。
table_id:6バイト長。これはより古いテーブルマップイベントのtable_idと比較できるが、あまり役に立たない。MySQL VAMはこの値を無視する。
flags:MySQL VAMはこのフラグを無視することができる。
書込ローイベントのデータ部は、カラムの順序に基づき配置されるカラム値を含む。書込ローイベントはCWriteRowsEventクラスによって表わされる。データ部は以下の情報を含む:
1または2バイト−カラムの数を記憶する。MySQLがサポートしている最大カラム数は3398である。
nバイト−カラムビットマップ。これはMySQLレプリケーションで用いられる内部データ構造である。MySQL VAMは通常この値を無視する。サイズは((no_of_cols+7)/8) である。
nバイト−(リトルエンディアンオーダ)でnullカラム値を示す。総合サイズは通常((no_of_cols+7)/8)である。左から最初のカラムのフラグは、第1のバイトの最下位ビットにあり、2番目は第1のバイトのつぎの最下位ビットにあり、9番目は第2バイトの最下位ビットにある、など。
nバイト−挿入値のバイトシーケンス。可変カラム値(たとえばVARCHAR, LOB, CHARタイプ)の前にはその長さがくる。
以下の例は、テーブルt2の書込ローイベントのバイトシーケンス順序を示す。
更新ログイベント
図10は一実施例に従う、更新ローイベント構造を示す。このイベントはMySQL UPDATE操作を表わす。このイベントの前に、テーブルマップイベントが来る。汎用ヘッダ部とは別に、このイベントは付加的データヘッダ部+データ部を含む。(8バイトの)データヘッダ部は以下のデータを含み、これはより古いテーブルマップイベントと類似している。
table_id:6バイト長。これはより古いテーブルマップイベントのtable_idと比較できる。flags:MySQL VAMはこのフラグを無視することができる。
更新ローイベントのデータ部は、カラムの順序に基づき配置されるカラム値を含む。更新ローイベントは、事前画像および事後画像データ値を含む。他のロギングシステムと違って、MySQLバイナリログは単にプライマリキーや更新されたカラムを記憶するのではなく、カラム値の全体のコピー(事前画像値および事後画像値の両方)を記憶する。たとえば、100カラムを含むテーブルで1つのカラムを更新すると、100カラム値の事前画像コピーおよび同じ100カラムの事後画像コピーが作成される。MySQL VAMがデータをMySQL VAM API(extract)に送る前にデータを圧縮(またはフィルタ処理)することが重要である。更新ローイベントはCUpdateRowsEventクラスによって表わされる。データ部は以下の情報を含む:
1または2バイト−カラムの数を記憶する。MySQLがサポートしている最大カラム数は3398である。
nバイト−カラムビットマップ。これはMySQLレプリケーションで用いられる内部データ構造である。MySQL VAMは通常この値を無視する。サイズは((no_of_cols+7)/8)である。
nバイト−事後画像カラムビットマップ。これはMySQLレプリケーションで用いられる内部データ構造である。MySQL VAMは通常この値を無視する。サイズは((no_of_cols+7)/8)である。
nバイト−事前画像データ用に(リトルエンディアンオーダ)でnullカラム値を示す。総合サイズは通常((no_of_cols+7)/8)ビットである。
nバイト−事前画像データ用の値のバイトシーケンス。可変カラム値(たとえばVARCHAR、LOB、CHARタイプ)の前にはその長さがくる。
nバイト−事後画像データ用に(リトルエンディアンオーダ)でnullカラム値を示す。総合サイズは通常((no_of_cols+7)/8)ビットである。
nバイト−事後画像データ用の値のバイトシーケンス。可変カラム値(たとえばVARCHAR、LOB、CHARタイプ)の前にはその長さがくる。
ロー削除イベント
このイベントはMySQL DELETE操作を表わす。このイベントの前にテーブルマップイベントが来る。汎用ヘッダ部と別に、このイベントは付加的データヘッダ部プラスデータ部を含む。(8バイトの)データヘッダ部は以下のデータを含み、これはより古いテーブルマップイベントと類似している。ロー削除イベントはCDeleteRowsEventクラスによって表わされる。
table_id:6バイト長。これはより古いテーブルマップイベントのtable_idフラグと比較できる、flags:MySQL VAMはこのフラグを無視することができる。
ロー削除イベントのデータ部は、カラムの順序に基づき配置されるカラム値を含む。
データ部は、書き込みローイベントデータ部と類似している。
CRowsLogEvent C++ クラス
CWriteRowsEvent、CUpdateRowsEvent およびCDeleteRowsEvent C++ classesはCRowsLogEvent C++クラスから継承する。このクラスはINSERT、UPDATE およびDELETE操作用にログデータを検索するのに特有の一般的操作の大部分を含む。
回転イベント
回転イベントは可能なログ回転を示すバイナリログにログされる。すなわち、MySQLサーバは現行のバイナリログを閉じて新しいものを開く。ログ回転の可能なシナリオは以下のとおりである:
1.ログファイルのサイズは‘max_binlog_size’パラメータを超えている。
2.MySQLコマンドコンソールから、明白な‘flush logs’コマンドが発行された。
どちらの場合でも、MySQLは現行のバイナリログに回転イベントを作成し、現行のバイナリログを閉じて、付加的処理用に新しいバイナリログを開く。回転イベントは、作成するべき新しいログファイルを含む。MySQL VAMはこの値を用いて既存のバイナリログファイルを閉じて、新しいバイナリログファイルを開き、読出しを続ける。回転イベントはCRotateEventC++クラスによって表わされ、以下のとおり定義される:
ストップイベント
MySQLサーバはシャットダウンが明確な場合、バイナリクラスにストップイベントをログする。後でMySQLがスタートさせると、新しいバイナリログファイルが作成される。ストップイベントは新しいバイナリログファイル用の入力を含まない。
イベント順序
図11は一実施例に従うイベント順序例を示す。この部分は、異なるシナリオ用にバイナリログのイベント順序を示す。さまざまなトランザクションシナリオについては、「イベント順序」の箇所参照。一例として、以下のステートメントをバイナリログファイルに記憶することができる:
図12は一実施例に従う別のイベント順序例を示す。一例として、以下のステートメントをバイナリログファイルに記憶することができる:
データタイプ
この部分はさまざまなサポートされているデータタイプおよびバイナリログ内のストレージ要件を説明する。MySQLはいくつかのカテゴリにおいて複数のデータタイプをサポートしている:数値型、日時型およびストリング(文字)型。各タイプは1組のバイトとして、ログレコード内に記憶される。用いられるバイト数は、データのタイプ、カラムがNULL可能であるか否か、およびフィールドの長さに依存する。可変長文字フィールド(たとえばVARCHAR、VARBINARY、CHAR、TEXT およびBLOBなど)の前にその長さが来る。
データタイプCHAR、VARCHARおよびTEXTはucs2(1文字当たり最大2バイト)フォーマットまたはutf8フォーマット(1文字当たり2または3バイト)で記憶することができる。たとえば、VARCHAR(255)カラムは、最大255文字の長さのストリングを保持することができる。カラムはlatin1文字セット(1文字当たり1バイト)を用いると仮定すると、必要な実際の記憶領域は、ストリング長さプラスストリングの長さを記録するための1バイトである。′abcd′のストリングでは、Lは4であり、記憶領域要件は5バイトである。同じカラムがucs2ダブルバイト文字セットを用いるとされるのなら、記憶領域の要件は10バイトである。′abcd′の長さは8バイトであり、カラムは長さを記憶するのに2バイトを必要とする。なぜなら、最大長は255より大きいからである(510バイトまで)。
一実施例に従うと、LOBフィールドはインラインに記憶される。LOBフィールドの前にはその長さが来る。サポートされているデータタイプおよびそのログサイズは表5に記載されている。
null値の取扱い
一実施例に従うと、バイナリログローイベント(すなわちWriteRowsEvent、UpdateRowsEvent およびDeleteRowsEvent)は他の非NULLカラム値とともにはNULLカラム値を記憶しない。NULLカラム値は、データ部の前にNULLバイトの組として記憶される。NULLバイトの合計数は通常(カラム数+7)/8である。より詳細にはWriteRowsEvent(todo)参照。
NULLカラムは、リトルエンディアンオーダとしてこれらNULLバイト部に記憶される。左から最初のカラムのフラグは、第1のバイトの最下位ビットにあり、2番目は第1のバイトのつぎの最下位ビットにあり、9番目は第2バイトの最下位ビットにある、など。カラムがNULL値を保持しているか否かを見つけるために、NULLバイトの各ビットをマスクすることができる。以下のコードは、カラムがNULLであるか否かをチェックする:
空のストリングは、ゼロ長値としてバイナリログに記憶される。
データタイプ変換
一実施例に従うと、CHAR、BINARY、VARCHARおよびVARBINARYタイプ−ストリングデータタイプの長さは可変である。実際のデータ値の前にデータ長が来る。長さの値は1バイト(長さが255未満の場合)または2バイト(長さが256以上の場合)を必要とする。
上記のように、ストリングカラムの‘フィールドメタデータ(fieldmetadata)’(CHAR、VARCHAR、BINARYおよびVARBINARYタイプタイプに当てはまる)は、長さの最大値を見つけるのに役立つ。この値に基づき、実際の長さは以下のように検索することができる。
uint2korr()関数はconfig_win.hで規定されるMySQL提供マクロである。この関数は所与のポインタの最初の2バイトを読取り、対応する整数値を返す。
ENUMタイプ
一実施例に従うと、ENUMカラムはログファイルにおいてインデックス値として記憶される。たとえば、ENUM(「赤」、「オレンジ」、「青」)のカラムでは0、1および2のインデックス値を有することができる。したがって、「オレンジ」のENUM値を記憶すると、バイナリログファイルではインデックス値2となる。サポートされる最大列挙インデックス値は65,535バイトである。
ENUMカラムタイプのフィールドメタデータは、ENUMインデックス値に必要な最大バイトを含む。この値に基づき、実際の長さは以下のように読出すことができる。
SETタイプ
一実施例に従うと、SETカラムは0またはより大きい値を有することができるストリングカラムであり、各々はテーブルを作成した場合に指定される許容値のリストから選択されなければならない。たとえば、SET(「1」、「2」)と指定されたカラムは、「1」「2」、「1,2」のいずれかの値を有することができる。SETは最大64個の異なるメンバーを有することができる。セットカラムはログファイルにおいてバイナリ値として記憶される。たとえば、SET('a','b','c','d')として指定されるカラムでは、メンバーは以下の10進数および2進数の値を有する:
したがって、SET('a','b')を記憶すると、3の10進数の値をもたらす(すなわち、2進数では0011)。SETカラムは最大64個の異なるメンバーを有することができるので、これらの値を記憶するのに要する最大バイトは最大8バイトとなる。SETカラムタイプのフィールドメタデータは、SET10進数に必要な最大バイトを含む。この値に基づき、実際の長さは以下のように取出すことができる:
整数タイプ
一実施例に従うと、整数値はバイナリログにおいて符号付きおよび符号なしの整数として記憶される。整数は符号付きの整数として読取られ、MySQL VAMによってextractに送られる。整数のCタイプは、整数カラムのサイズに依存し、これは長さによって定められる。MySQLではサイズに基づきすべての整数変形にはCタイプが規定され、関連するマクロを有して、メモリ場所をプラットフォームとは独立している整数値にコピーする。表7は各長さおよび関連するマクロで使用するタイプを示す。
整数値は指定サイズの整数としてGoldenGateMySQL VAMに返すことができるので、データ変換には適切なマクロを用いることだけが必要であり、変換された整数および長さを整数データとして返す。
浮動小数点、倍精度および10進数タイプ
一実施例に従うと、浮動小数点データタイプには、MySQLは単精度値には4バイト、倍精度値には8バイト使用する。MySQLは非標準シンタックス: FLOAT(M,D)またはDOUBLE (M,D)を可能にする。ここで(M,D)は値が合計M桁まで記憶できることを意味し、そのうちD桁は小数点の後ろに来てもよい。MySQLは浮動小数点および倍精度カラムタイプ用のマクロを有し、メモリ場所をプラットフォームと独立した浮動小数点または倍精度値にコピーする。表8は各長さおよびそれに伴うマクロで使用するタイプを示す。
浮動小数点および倍精度値は、指定サイズの浮動として、GoldenGateMySQL VAMに戻すことができる。それにより、データ変換には適切なマクロを用いることだけが必要であり、変換された整数および長さを整数データとして返却する。
DECIMAL(またはNUMERIC)のデータタイプは正確な数値データ値を記憶するために用いられる。これらのタイプは正確な精度を保つことが重要な、たとえば通貨データでの値を記憶するために用いられる。MySQLのリリースの前(5.0.3以前)では、DECIMALおよびNUMERIC値はストリングフォーマットで記憶される。
DECIMALカラムの値は、9桁の10進数(10進法)を4バイトに圧縮するバイナリフォーマットを用いて表わされる。各値の整数および小数部の記憶領域は別個に定められる。9桁の各倍数は4バイトを要し、「余り」の桁は4バイトの一部を要する。余剰桁に必要な記憶領域は表9によって与えられる:
MySQLは10進数値を含むメモリ場所をコピーして、ストリング値に変換するための、10進数カラムタイプ用の関数を有する。MySQL VAMは‘bin2decimal’関数を用いてメモリ場所を読取り、この値を‘decimal_t’構造に埋める。別の関数‘decimal_bin_size’はこの‘decimal_t’構造を単に変換し、値をストリングとして返す。これは以下のコードラインで記載される。
10進数値はストリングとしてGoldenGateMySQL VAMに返すことができ、データ変換は単に適切なマクロを用いることだけが必要であり、変換された10進数値を返す。
BITタイプ
一実施例に従うと、BITタイプカラムは1つの値当たり64ビットまで記憶する。必要な最大記憶領域は(M+7)/8バイトであり、'M'は値当たりのビット数を示す。MySQL VAMは以下のコードを用いてバイナリログからBITカラム値を読出す。
DATE、TIME、YEAR、DATETIMEおよびTIMESTAMPタイプ
日時タイプ変換はすべての変換の中で最も複雑なものである。他のデータタイプと比較して、MySQLは日時タイプを扱うマクロまたは公的関数を公開していない。MySQL内部実施はこれらのコールを扱うための適切な方法を見つけるためにデバッグされた。MySQL VAMはMySQL内部実施に基づき、自己のコードバージョンを書き直している。MySQL VAMはログからバイナリデータを読出し、これらを共通構造MySQL_TIMEに変換する(この構造はMySQLによって定義され、使用される)。後でこれらの構造はextractに渡される前にストリングに変換することができる。
MySQL_TIMEは以下のように規定される
DATEタイプは、DD+MM×32+YYYY×16×32として、圧縮3バイト整数形式に記憶される。サポートされている範囲は1000−01−01から9999−12−31である。DATEカラムは以下のコードを用いてバイナリログから読出される。
TIMEタイプはDD×24×3600+HH×3600+MM×60+SSとして、圧縮3バイト整数で記憶される。TIMEカラムは以下のコードを用いてバイナリログから読出される。
YEARタイプは1バイトの整数で記憶される。値はYYYY(値の範囲は1901から2155)またはYY(値の範囲は70(1970)から69(2069))形式であり得る。YEARカラム値は以下のコードを用いてバイナリログから読出される。
DATETIMEタイプは、日付および時刻情報の両方を含む値が必要である場合に用いられる。サポートされている範囲は′1000−01−01 00:00:00′から′9999−12−31 23:59:59′である。DATETIMEタイプはYYYY×1000+MM×100+DDとして圧縮される4バイトの整数を含む8バイトの整数として;HH×10000+MM×100+SSとして圧縮される4バイトの整数として記憶される。DATETIMEカラム値は以下のコードを用いてバイナリログから読出される:
TIMESTAMPタイプは4バイトの整数であり、エポックからの秒数UTCを表わす(範囲は′1970−01−01 00:00:01′UTCから′2038−01−19 03:14:07′UTCである)。TIMESTAMPカラム値は以下のコードを用いてバイナリログから読出される:
LOBデータタイプ
一実施例に従うと、MySQL LOBMySQLは、他のカラム値に従ってLOBレコードを記憶する(大型オブジェクト−すなわちTINYBLOB、BLOB、MEDIUM BLOB、LONG BLOBおよびTEXTタイプ)。BLOBおよびTEXTカラムデータは、VARBINARY またはVARCHARフィールドと同様の方法で記憶される。すなわち、最初のいくつかのバイトは、長さを記憶し、その後にオリジナルのLOB値が続く。LOBカラムでは、テーブルマップイベントのフィールドメタデータは、所与のLOBフィールドに必要な最大バイトの記憶領域を含む。この値は、LOB値を読出すときに必要なメモリを割当てる際に便利である。TINYTEXTおよびTINYBLOBカラムの最大サイズは255である。これはCHARおよびbinaryカラムを扱う場合と同様である。
TEXTおよびBLOBブロブカラムの最大サイズは64kである。これはまたはVARCHARおよびVARBINARYカラムを取扱うのと類似している。TINYTEXT、TEXT、TINYBLOBおよびBLOBカラムに記憶されている値は1回のショットでextractに送ることができる。他のLOBタイプでは、データは一度に64kのサイズの一塊として、読出すことができ、extractに送られる。以下のコード行はMySQL LOBカラムの取扱いを説明する。
(65kバイト以上のデータを保持することができる)MEDIUM BLOBおよびLONG BLOBのような他のLOBタイプでは、データは一度に32kの大きさの一塊として読出すことができ、複数のコールでextractに送られる。上記のように、LOBカラム値は他の非LOBカラム値に従って記憶される。これは他のデータベースと異なる。なぜなら、値はインラインで記憶されないし、データがオンデマンドで取ってくることができるロケータまたはクーポンを用いてアクセスされないからである。MySQLデータベースの場合では違う(ストレージエンジンMyISAM およびInnoDBを有する)。バイナリログからLOBカラム値を読出すため、MySQL内部IO_CACHEクラスは、ログファイルからこのLOBカラム値の全体の値をフェッチしてメモリに渡す、すなわち、メモリはこのクラスにより1回でこのLOBカラム用に完全に割当てられる。
一実施例に従うと、より大きいサイズのLOBデータが塊でMySQL VAM APIに送られるべきであるというMySQL VAM API仕様概要が示される。しかし、MySQLの場合、データは既にMySQL内部クラスで完全に既にフェッチされている(すなわち、メモリはIO_CACHEオブジェクトによって完全に割当てられており)、LOBデータは32kバイトのサイズの塊で、1つのコールや複数のコールで、MySQL VAM APIに送ることができる。
バイナリログを使った作業
一実施例に従うと上記のように、MySQLはバイナリログインデックスファイルを用いて、現行のバイナリログファイルおよびより古いログファイルを含むリストを維持する。このインデックスファイルは、バイナリログと同じディレクトリ場所にある。これにより、システムは構成ファイルから読出してログファイルフォーマットを見つける、たとえばROW、 STATEMENT、またはMIXEDフォーマットをさがし、ROWでなければアベンドする。
MySQLサーバが新しいバイナリログファイルを作成する場合(スタートアップ時、または明白な「フラッシュログ」コマンドによる)、BINLOG_MAGIC値(4バイト)および「フォーマット記述イベント」を書込む。このフォーマット記述は所与のバイナリログについて一度しか書込まれない。
このフォーマット記述イベントの「フラグ」属性は、現行のバイナリログがサーバによって使用中であるか否かを追跡する。MySQLサーバはスタートアップの際にこの状態をLOG_EVENT_BINLOG_IN_USE_F値に設定し、シャットダウンまたはログ回転の際にはこの値をクリアする。これは、バイナリログが正しく閉じられているか否かをチェックする信頼性のあるインジケータとして扱うことができる。
初期化の際、MySQL VAMは活性バイナリログファイルの名前を得る必要がある。MySQL VAMは以下のステップを用いてアクティブバイナリログの名前を得る。MySQLサーバは同じプロシージャを用いて現行のバイナリログを得る:
1.環境変数または供給されたMySQL VAMパラメータのどちらから、MySQL設置ホームを得る。
2.MySQL初期化ファイルを読出す−ウインドウズ(登録商標)プラットフォームではmy.iniであり、他のプラットフォームではmy.confである。
3.「ログ-ビン」パラメータの値を得る。この値から、ログディレクトリ場所およびログインデックスファイル名を見つける。
4.ログインデックスファイル名を開き、内容を読出す。この内容から、リストの最後のログファイルを見つける。
5.このログファイルを開き、ログファイルがまだサーバによって使用されているかをチェックする(フォーマット記述イベントのフラグ値がLOG_EVENT_BINLOG_IN_USE_Fであるかをチェックする)。イエスなら、MySQLサーバは書込のためにこのログファイルを現在使用している。MySQL VAMはこのログファイルをアクティブログファイルとして扱う。
バイナリログの位置付け
一実施例に従うと、MySQL VAM APIはタイムスタンプ値またはシーケンス番号のどちらかによって位置付けることをMySQL VAMに要求することができる。extractにおいて、位置付けはGGSCIにおいてADDまたはALTERコマンドのどちらかによって要求できる。MySQL VAMにおいてタイムスタンプおよびシーケンス番号による位置付けのサポートに加えて、本システムはアクティブバイナリログを終わりおよび先頭への位置付けをサポートする。
シーケンス番号による位置付け
一実施例に従うと、extractにトランザクションレコードを送信する場合、MySQL VAMはextractにシーケンス番号値をも送信する。再スタートシナリオの際、extractはこの最後に受取ったシーケンス番号値をMYSQL VAMIntialize()コールの際にMySQL VAMに送る。VAMはこの値を用いて正しい読出場所を設定する。
MySQL VAMはGG_ATTR_DS_SEQIDを用いてこのシーケンス番号値をASCIIストリングとして送る。MySQL VAMはこのASCIIストリングを、現行のログファイルおよび現行のイベント場所(すなわちlog.000001:10045)の組合せとして、この値をextractに送る前に作成する。
MYSQL VAMIntialize()コールの際にシーケンス番号によって位置付けるために、MySQL VAMはextractからシーケンス番号値を解析し、ログファイル名をイベント場所として得る。次に、対応するログファイルを開き、イベントのスキャンを開始する。イベントの場所がシーケンス番号で指定されたものと一致するなら、MySQL VAMはこの場所を現行の読出場所として設定し、この場所からバイナリログの内容の読出を始める。
タイムスタンプ値による位置付け
タイムスタンプによる位置付けのため、システムは必要なタイムスタンプ値以上のタイムスタンプを有するアクティブバイナリログ(すなわちBEGINストリングを含むQueryEvent)においてビギントランザクションレコードを見つけなければならない。タイムスタンプ値が未来の時間であるのなら、必要なタイムスタンプ場所以上のタイムスタンプを有するビギントランザクションレコードを見つけるまで、システムはログの終わりにおいて読出を続ける。バイナリログ内またはバイナリログとともに起こり得る2つのシナリオがある:
シナリオ1:Begin/Endトランザクションレコードはアクティブバイナリログにあり、最初にこのようなレコードのタイムスタンプは要求されるタイムスタンプ位置よりも低い。
このシナリオの場合、MySQL VAMはアクティブバイナリログファイルをスキャンして、タイムスタンプ値が要求されるタイムスタンプ場所以上であるビギントランザクションレコードを見つける。MySQL VAMが要求されるレコードを見つけられなかった場合、ログの終わりに位置付けられる。
シナリオ2:アクティブバイナリログにおける最初のBegin/Endトランザクションレコードは、要求されるタイムスタンプ場所以上のタイムスタンプ値を有する。
このシナリオは微妙である。このシナリオにおいて、より古いバイナリログも要求されるタイムスタンプ値に等しいタイムスタンプを有するBeginトランザクションレコードを持っている可能性がある。
一実施例に従うと、MySQL VAMは最新のものから古いものへと、バイナリログをスキャンする(順序はログインデックスファイルで維持される)。MySQL VAMが要求されるタイムスタンプに等しいタイムスタンプを有するBegin/End了トランザクションレコードを見つけなかった場合、MySQL VAMはエラーを返すかまたは最も古いログファイルの先頭に位置付ける。タイムスタンプによる位置付けは時間の掛かる処理となり得る。なぜなら、MySQL VAMはより古いログファイルを開けて、そのタイムスタンプに一致するイベントエントリを見つける必要があるかもしれないからである。
ログの終わりへの位置付け
一実施例に従うと、アクティブバイナリログの終わりに位置付けるために、MySQL VAMは、IO_CACHE関数クラスにログの終わりを見つけることを要求するために、my_b_seek()関数を使用する。
ログの先頭への位置付け
一実施例に従うと、トランザクションログの先頭に位置付けるために、MySQL VAMはmy_b_seek()関数をコールして、ログの先頭を、BINLOG_MAGICプラスグローバルフォーマット記述イベントデータの後ろに位置付ける。
バイナリログの読出
一実施例に従うと、MySQL VAMはMySQLのIO_CACHE C++クラスおよびファイルユーティリティ関数を用いてMySQLバイナリログを開いて読出す。MySQLのIO_CACHE C++クラス(mysql_client.libの一部)は、バイナリログの内容を64kのサイズの塊で読出す。このバッファ読出はIO使用の減少に役立つ。
バイナリログファイルを読出す正しいシーケンスを見つけるために、‘mysqlbinlog’ユーティリティおよび‘replication slave thread’モジュールといったMySQLのさまざまな内部モジュールがデバッグされる。以下のコード行は、IO_CACHEクラスを初期化し、バイナリログファイルを開いて読出す。
ログ回転
一実施例に従うと、以下のシナリオによりMySQLのログ回転を引き起こす(すなわち、既存のアクティブログファイルを閉じて、新しいログファイルを開く)。
1.アクティブログファイルのサイズが、max_binlog_size値を超えた場合(my.iniまたはmy.confファイルで指定されている)。
a.MySQLはアクティブバイナリログにおいて’Rotate Event’をログする。回転イベントデータ部は、新しいアクティブバイナリログの場所および名前を含む。
b.MySQLはアクティブバイナリログを閉じて、フォーマット記述イベントフラグをNULLにリセットする(このフラグは前にLOG_EVENT_BINLOG_IN_USE_F値に設定されている)。
c.MySQLは新しいバイナリログを作成し、フォーマット記述イベントフラグをLOG_EVENT_BINLOG_IN_USE_F値に設定する。
2.明確な「フラッシュログ」コマンドがMySQL SQLプロンプトで発行された場合。
a.MySQLはアクティブバイナリログにおいてRotate Eventをログする。回転イベントデータ部は、新しいアクティブバイナリログの場所および名前を含む。
b.MySQLはアクティブログを閉じて、フォーマット記述イベントフラグをNULLにリセットする(このフラグは前にLOG_EVENT_BINLOG_IN_USE_F値に設定されている)。
c.MySQLは新しいバイナリログを作成し、フォーマット記述イベントフラグをLOG_EVENT_BINLOG_IN_USE_F値に設定する。
3.サーバシャットダウンの際。
a.MySQLはアクティブバイナリログにStop Eventをログする。
b.MySQLはバイナリログを閉じ、さらにフォーマット記述イベントフラグをNULL値にリセットする(このフラグは前にLOG_EVENT_BINLOG_IN_USE_F値に設定されている)。
4.サーバスタートアップの際。
a.MySQLは新しいバイナリログを作成し、フォーマット記述イベントフラグをLOG_EVENT_BINLOG_IN_USE_F値に設定する。
上記のように、一実施例に従うと、MySQL VAMはログ回転が起こったことを識別するために回転イベントを使用し、次のバイナリログの名前を得るために、回転イベントデータを用いる。MySQL VAMは次のバイナリログを開き、そのバイナリログ読出を続ける。シナリオ3および4では、MySQL VAMがストップイベントに出合うと、使用しているバイナリログを閉じて、次のバイナリログがあるかログインデックスファイルをチェックする。MySQL VAMがインデックスファイルにおいて次のバイナリログを見つけると、そのバイナリログを開いて読出を続ける。MySQL VAMがインデックスファイルにおいて新しいログファイル名を見つけることができなかった(たとえば、サーバがまだシャットダウンモードにあるか、シャットダウン後、スタートしていない)場合、MySQL VAMはextractに対してアベンドすることを知らせる。
考慮するべきもう一つの興味のあるシナリオがある。サーバクラッシュの際、フォーマット記述イベントのフラグがサーバの再スタートのときにサーバによってリセットされない可能性は小さく、またはMySQLサーバがアクティブバイナリログファイルに回転イベントもしくはストップイベントのどちらもログしない。後のスタートアップの際、サーバはより古いバイナリログのフラグをリセットすることなく、新しいバイナリログファイルを作成する。このような特有の状況では、2つのバイナリログがLOG_EVENT_BINLOG_IN_USE_F状態のフラグを設定していることになる。MySQL VAMがこのシナリオに出合うのは以下の条件の場合である:
1. MySQL VAMは現在アクティブバイナリログを処理している。サーバクラッシュは読出のときに起こる。この場合、extractを停止させ、クラッシュリカバリを行ない、サーバスタートアップの後MySQL VAMを再度スタートさせるのがよい。
2. MySQL VAMはより古いログファイルを読むよう位置付けられている。1つのファイルから別のファイルに読出す場合(すなわちログ回転の場合)、LOG_EVENT_BINLOG_IN_USE_Fの値のログファイルフラグに出合う。このログファイルは最新のログファイルではないことに注意しなければならない(すなわち、アクティブなバイナリログではない)。EOFが起こると、MySQL VAMは次のログファイルがあるかどうかについて、ログインデックスファイルをチェックする。この場合、MySQL VAMはサーバクラッシュが前に起こっていると見なし、既存のログファイルを閉じ、次のログファイルを開けてログ読出を続ける。
MySQLVAMクラス設計
上記のように、一実施例に従うと、MySQL VAM実施はC++を用いて書込まれ、MySQL VAMモジュールの実施は2つの主な部分に分けられる。最初の部分では、内部で開発されたイベントC++クラスを用いてバイナリログイベントを読出し、これらをデータレコードに処理し、レコードを用意ができたフォーマット(送信できる状態)にして、制限されたサイズのQueueに記憶する。第2の部分では、Queueからレコードを取ってきて、APIからリクエストを受けるたびにAPIに送る。
バイナリログリーダ
図13は、一実施例に従うVAMバイナリログリーダのクラスダイヤグラムを示す。CMySQLBinLogManagerクラスは主要制御クラスであり、全体の処理を管理し、作業を異なるクラスにコミットする。データをバイナリログから読出し、バイナリログデータを処理し(MySQLイベントをデータレコードに変換)、レコード(既成フォーマット)を制限されたサイズのQueueに入れることを主に担当する。これはすべての関数を「純粋仮想」として有するCLogManagerクラスから派生している。
設計はCMySQLBinLogReaderクラスを有し、データをバイナリログから取ってくることを担う。さまざまなC++イベントクラスおよびMySQLのIO_CACHEクラスを用いて、バイナリログのライフサイクルおよびイベントインスタンスを管理する。さらに、イベントをフィルタ処理するためにCFilterBinLogログを用いる。
CLogProcessorクラスはバイナリログデータを処理するのであって、制限されたサイズQueue(CRecordQueue)を準備した既成オブジェクトで埋める。後で、これらのオブジェクトはAPIに送られるために他のクラスによってフェッチされる。
CRecordQueueクラスは既成レコード(CRecord)の記憶を担う。
先頭から、処理はCMySQLBinLogManagerクラスのscanLog機能から始まり、これは別個の実行エンティティ(スレッド)であり、独立して実行され、全体の処理実行を担う。まずCMySQLBinLogReaderにバイナリログの読出を求め、そこから生のイベントインスタンスを得る。このレコードをさらに処理するためCLogProcessorに渡して、制限されたサイズのQueueに入力される。
バイナリログプロセッサ
図14は一実施例に従うと、バイナリログプロセッサのクラスダイヤグラムを示す。
CMySQL VAMModuleは全体のMYSQL VAMモジュールの主要制御クラスである。これはシングルトンクラスであり、MYSQL VAMモジュールの寿命の間中1つのオブジェクトしか持たない。中にすべてのコアビジネスロジックがあり、タスクをさまざまなクラスにわたってデリゲート(delegate)する。
MYSQL VAMモジュールはAPIに4つの関数を公開しており、これはMYSQL VAMInitialize、MYSQL VAMRead、MYSQL VAMMesage およびMYSQL VAMControlである。これらの関数のビジネスロジックはCMySQL VAMModuleクラスの中にある。CRecordQueueキューからCRecordレコード(設計の第1の部分により、Queueに入れられた既成レコード)をフェッチして、CMySQL VAMCommunicatorクラスによってAPIに送る。
CMySQL VAMCommunicatorクラスはどのようにデータをAPIに対して送るおよび得るかを担う。CMySQL VAMApiクラスを用いてAPIからの公開された関数を用いる。CMySQL VAMApiクラスはAPI公開関数のラッパである。
CErrorContainerクラスは中にエラーオブジェクトを記憶し、エラーになりがちなシナリオを取扱う。
MySQL VAM公開関数(すなわち、MYSQL VAMInitialize)がAPIからコールされるたびに、フローはCMySQL VAMModuleクラスに向けられ、そのフローを別の他のクラスにリダイレクトし、データをAPIに返す。たとえば、MYSQL VAMRead読出しがAPIからコールされたのなら、CMySQL VAMModuleのMySQL VAMReadがコールされ、CRecordQueueキューからデータをフェッチして、CMySQL VAMCommunicatorクラスを介してAPIに送られる。
本発明は、1つ以上のプロセッサ、メモリおよび/または本開示の教示に従うプログラミングされたコンピュータ読取可能記憶媒体を含む、1つ以上の従来の汎用もしくは特殊なデジタルコンピュータ、演算装置、マシンまたはマイクロプロセッサを用いて、好都合に実施できる。適切なソフトウェアコード化は、ソフトウェア技術の当業者にとって明らかなように、本開示の教示に基づき、熟練したプログラマーによって容易に用意することができる。
一部の実施例において、本発明は一時的ではない記憶媒体またはコンピュータ読取可能媒体であるコンピュータプログラムプロダクトを含み、そこに命令が記憶されて、コンピュータに本発明のいずれかの処理を実行するようプログラミングするために用いることができる。記憶媒体は、フロッピー(登録商標)ディスク、光学ディスク、DVD、CD−ROM、マイクロドライブ、光磁気ディスク、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、フラッシュメモリ装置、磁気または光カード、ナノシステム(分子メモリICを含む)を有するすべての種類の物理媒体、ならびに命令および/またはデータを記憶するのに適するすべての種類の媒体または装置を含むことができるが、これらに限定されない。
本発明の記載は、図示および説明のために提供されている。本発明を開示されたそのままの形に制限する意図はない。多くの変形および変更は当業者にとって明らかである。特に、実施例はMySQL環境およびMYSQL VAMを用いて記載されているが、他の種類のVAMを他の種類のデータベースまたはシステムで実施できることは明らかである。実施例は本発明の原理および実用的アプリケーションを最もよく説明する目的のために選択および記載されており、それにより当業者がさまざまな実施例について、および意図される特定の使用に適するさまざまな変形について、本発明を理解することができる。本発明の範囲は特許請求の範囲およびその均等の意味によって定義されるものとする。

Claims (17)

  1. バイナリログファイルを使用するMySQLデータベースまたはシステムと、他の種類のデータベースまたはシステムとの間でデータを転送するために、ログベースレプリケーションを使用するシステムであって、
    ベンダーアクセスモジュールを備え、前記ベンダーアクセスモジュールは、
    MySQLデータベースまたはシステムによってバイナリログファイルに記録されるバイナリログイベントのうち、前記MySQLデータベースまたはシステムが記録したヘッダを参照して、予め定められた種類のバイナリログイベントのサブセットのみを特定し、
    前記特定したバイナリログイベントのサブセットのバイナリログデータをデータレコードに変換し、
    変換されたデータレコードをレコードキューに保持し、
    前記レコードキューに保持されたデータレコードを処理するとともに、処理されたデータを含むトレールファイルを生成するために、extractプロセスとやり取りするように構成され、前記処理されたデータは非MySQLデータベースまたはシステムへの適用に使用される、システム。
  2. 記バイナリログファイルはMySQLバイナリログファイルである、請求項1に記載のシステム。
  3. 前記extractプロセスはOracle(登録商標)GoldenGateextractプロセスであり、前記トレールファイルはOracleGoldenGateトレールファイルである、請求項1または2に記載のシステム。
  4. 前記ベンダーアクセスモジュールは、extractプロセスが特定のトランザクション用にデータレコードを検索するためにAPIを提供する、請求項1〜3のいずれか1項に記載のシステム。
  5. 前記ベンダーアクセスモジュールは、バイナリログからイベントの処理を与えるために用いることができる、複数のVAMイベントクラスと;MySQLデータベースまたはシステムによって与えられるアクセスライブラリをラップアラウンドするために用いることができる、複数のVAMバイナリログクラスと;ビンログクラスからレコードを読出しおよび処理し、これらをデータレコードキューに入れるために用いることができる、複数のVAMリーダおよびプロセッサクラスとを含む、請求項1〜4のいずれか1項に記載のシステム。
  6. 前記ベンダーアクセスモジュールは、ログインデックスファイルを用いて、複数のバイナリログファイルから使用するべき現行のバイナリログファイル、およびその状態を判断する、請求項1〜5のいずれか1項に記載のシステム。
  7. 前記ベンダーアクセスモジュールは、前記バイナリログファイルに記録されているログ回転イベントを特定し、当該特定結果を用いて次のバイナリログファイル名を取得する、請求項1〜6のいずれか1項に記載のシステム。
  8. 前記ベンダーアクセスモジュールは、前記バイナリログファイルに記録されているEOFを検出し、次のバイナリログファイルを探索する、請求項1〜7のいずれか1項に記載のシステム。
  9. バイナリログファイルを使用するMySQLデータベースまたはシステムと、他の種類のデータベースまたはシステムとの間でデータを転送するためにログベースレプリケーションを用いる方法であって、
    ベンダーアクセスモジュールを設けるステップを備え、前記ベンダーアクセスモジュールは、
    MySQLデータベースまたはシステムによってバイナリログファイルに記録されるバイナリログイベントのうち、前記MySQLデータベースまたはシステムが記録したヘッダを参照して、予め定められた種類のバイナリログイベントのサブセットのみを特定し、
    前記特定したバイナリログイベントのサブセットのバイナリログデータをデータレコードに変換し、
    変換されたデータレコードをレコードキューに保持し、
    前記レコードキューに保持されたデータレコードを処理するとともに、処理されたデータを含むトレールファイルを生成するために、extractプロセスとやり取りするように構成され、前記処理されたデータは非MySQLデータベースまたはシステムへの適用に使用される、方法。
  10. 記バイナリログファイルはMySQLバイナリログファイルである、請求項9に記載の方法。
  11. 前記extractプロセスはOracle(登録商標)GoldenGateextractプロセスであり、前記トレールファイルはOracleGoldenGateトレールファイルである、請求項9または10に記載の方法。
  12. 前記ベンダーアクセスモジュールは、extractプロセスが特定のトランザクション用にデータレコードを検索するためにAPIを設ける、請求項9〜11のいずれか1項に記載の方法。
  13. 前記ベンダーアクセスモジュールは、バイナリログからイベントの処理を与えるために用いることができる、複数のVAMイベントクラスと;前記MySQLデータベースまたはシステムによって与えられるアクセスライブラリをラップアラウンドするために用いることができる、複数のVAMバイナリログクラスと;ビンログクラスからレコードを読出しおよび処理し、これらをデータレコードキューに入れるために用いることができる、複数のVAMリーダおよびプロセッサクラスとを含む、請求項9〜12のいずれか1項に記載の方法。
  14. 前記ベンダーアクセスモジュールは、ログインデックスファイルを用いて、複数のバイナリログファイルから使用するべき現行のバイナリログファイル、およびその状態を判断する、請求項9〜13のいずれか1項に記載の方法。
  15. 前記ベンダーアクセスモジュールは、前記バイナリログファイルに記録されているログ回転イベントを特定し、当該特定結果を用いて次のバイナリログファイル名を取得する、請求項9〜14のいずれか1項に記載の方法。
  16. 前記ベンダーアクセスモジュールは、前記バイナリログファイルに記録されているEOFを検出し、次のバイナリログファイルを探索する、請求項9〜15のいずれか1項に記載の方法。
  17. 請求項9〜16のいずれか1項に記載の方法をコンピュータに実行させるためのプログラム。
JP2013521774A 2010-07-27 2011-05-13 MySQLデータベース−異種ログベースレプリケーション Active JP6062855B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US36814110P 2010-07-27 2010-07-27
US61/368,141 2010-07-27
US13/077,760 2011-03-31
US13/077,760 US8510270B2 (en) 2010-07-27 2011-03-31 MYSQL database heterogeneous log based replication
PCT/US2011/036508 WO2012018424A2 (en) 2010-07-27 2011-05-13 Mysql database heterogeneous log based replication

Publications (3)

Publication Number Publication Date
JP2013535737A JP2013535737A (ja) 2013-09-12
JP2013535737A5 JP2013535737A5 (ja) 2014-06-26
JP6062855B2 true JP6062855B2 (ja) 2017-01-18

Family

ID=44121253

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013521774A Active JP6062855B2 (ja) 2010-07-27 2011-05-13 MySQLデータベース−異種ログベースレプリケーション

Country Status (5)

Country Link
US (3) US8510270B2 (ja)
EP (2) EP2599014B1 (ja)
JP (1) JP6062855B2 (ja)
CN (1) CN103221949B (ja)
WO (1) WO2012018424A2 (ja)

Families Citing this family (196)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8332365B2 (en) 2009-03-31 2012-12-11 Amazon Technologies, Inc. Cloning and recovery of data volumes
US8626778B2 (en) 2010-07-23 2014-01-07 Oracle International Corporation System and method for conversion of JMS message data into database transactions for application to multiple heterogeneous databases
US8510270B2 (en) 2010-07-27 2013-08-13 Oracle International Corporation MYSQL database heterogeneous log based replication
US9298878B2 (en) 2010-07-29 2016-03-29 Oracle International Corporation System and method for real-time transactional data obfuscation
JP5230713B2 (ja) 2010-10-29 2013-07-10 株式会社東芝 電池用活物質、非水電解質電池及び電池パック
US11544288B2 (en) 2010-12-23 2023-01-03 Mongodb, Inc. Systems and methods for managing distributed database deployments
US10262050B2 (en) * 2015-09-25 2019-04-16 Mongodb, Inc. Distributed database systems and methods with pluggable storage engines
US11615115B2 (en) 2010-12-23 2023-03-28 Mongodb, Inc. Systems and methods for managing distributed database deployments
US8874593B2 (en) * 2011-07-01 2014-10-28 Salesforce.Com, Inc. Testing data silo
US9367431B2 (en) 2011-07-01 2016-06-14 Salesforce.Com, Inc. Testing data silo
US8984350B1 (en) * 2012-04-16 2015-03-17 Google Inc. Replication method and apparatus in a distributed system
US11403317B2 (en) 2012-07-26 2022-08-02 Mongodb, Inc. Aggregation framework system architecture and method
US11544284B2 (en) 2012-07-26 2023-01-03 Mongodb, Inc. Aggregation framework system architecture and method
CN103780638B (zh) * 2012-10-18 2019-02-19 腾讯科技(深圳)有限公司 数据同步方法及系统
CN102915377B (zh) * 2012-11-14 2016-08-03 深圳市宏电技术股份有限公司 数据库转换或同步方法及系统
CN103092745B (zh) 2013-01-22 2016-04-13 中兴通讯股份有限公司 系统日志记录的控制方法和装置
US10474652B2 (en) * 2013-03-14 2019-11-12 Inpixon Optimizing wide data-type storage and analysis of data in a column store database
US9176996B2 (en) 2013-06-25 2015-11-03 Sap Se Automated resolution of database dictionary conflicts
US9639448B2 (en) * 2013-06-27 2017-05-02 Sap Se Multi-version systems for zero downtime upgrades
CN103455557B (zh) * 2013-08-08 2016-06-29 上海新炬网络技术有限公司 一种基于日志的结构化数据同步方法
US9836516B2 (en) 2013-10-18 2017-12-05 Sap Se Parallel scanners for log based replication
US10198493B2 (en) 2013-10-18 2019-02-05 Sybase, Inc. Routing replicated data based on the content of the data
CN103577586B (zh) * 2013-11-08 2017-03-15 北京国双科技有限公司 日志记录的处理方法及装置
CN104657364B (zh) * 2013-11-18 2018-02-23 华为技术有限公司 一种日志结构数据库系统查询请求消息处理方法及装置
CN104750729B (zh) * 2013-12-30 2018-08-28 中国移动通信集团公司 一种基于日志文件的数据管理方法及数据管理系统
US9442996B2 (en) 2014-01-15 2016-09-13 International Business Machines Corporation Enabling collaborative development of a database application across multiple database management systems
CN103761318B (zh) * 2014-01-27 2017-08-18 中国工商银行股份有限公司 一种关系型异构数据库数据同步的方法及系统
CN104915341B (zh) * 2014-03-10 2018-06-26 中国科学院沈阳自动化研究所 可视化多数据库etl集成方法和系统
US9558255B2 (en) * 2014-03-11 2017-01-31 International Business Machines Corporation Managing replication configuration availability
CN103984715B (zh) * 2014-05-08 2017-04-12 武汉库百网络技术有限公司 一种异构数据库的数据同步、校验方法、装置及系统
US9785510B1 (en) 2014-05-09 2017-10-10 Amazon Technologies, Inc. Variable data replication for storage implementing data backup
US9619278B2 (en) 2014-06-26 2017-04-11 Amazon Technologies, Inc. Log-based concurrency control using signatures
US9613078B2 (en) 2014-06-26 2017-04-04 Amazon Technologies, Inc. Multi-database log with multi-item transaction support
US10282228B2 (en) 2014-06-26 2019-05-07 Amazon Technologies, Inc. Log-based transaction constraint management
US9619544B2 (en) 2014-06-26 2017-04-11 Amazon Technologies, Inc. Distributed state management using dynamic replication graphs
US9529882B2 (en) 2014-06-26 2016-12-27 Amazon Technologies, Inc. Coordinated suspension of replication groups
US9652312B2 (en) 2014-07-03 2017-05-16 FishEye Products, LLC Realtime processing of streaming data
CN105447014B (zh) * 2014-08-15 2019-03-15 阿里巴巴集团控股有限公司 基于binlog的元数据管理方法和用于提供元数据的方法及装置
US9734021B1 (en) 2014-08-18 2017-08-15 Amazon Technologies, Inc. Visualizing restoration operation granularity for a database
CN105471948B (zh) * 2014-09-05 2019-02-19 阿里巴巴集团控股有限公司 系统间同步业务数据的方法及装置
US10303795B2 (en) 2014-09-10 2019-05-28 Amazon Technologies, Inc. Read descriptors at heterogeneous storage systems
US9519674B2 (en) 2014-09-10 2016-12-13 Amazon Technologies, Inc. Stateless datastore-independent transactions
US9323569B2 (en) 2014-09-10 2016-04-26 Amazon Technologies, Inc. Scalable log-based transaction management
US10373247B2 (en) 2014-09-19 2019-08-06 Amazon Technologies, Inc. Lifecycle transitions in log-coordinated data stores
US10025802B2 (en) 2014-09-19 2018-07-17 Amazon Technologies, Inc. Automated configuration of log-coordinated storage groups
US9799017B1 (en) 2014-09-19 2017-10-24 Amazon Technologies, Inc. Cross-data-store operations in log-coordinated storage systems
US10013440B1 (en) 2014-10-31 2018-07-03 Amazon Technologies, Inc. Incremental out-of-place updates for index structures
US9984139B1 (en) 2014-11-10 2018-05-29 Amazon Technologies, Inc. Publish session framework for datastore operation records
CN104573024B (zh) * 2015-01-12 2018-03-20 国家电网公司 一种复杂网络体系下异构安全日志信息的自适应提取方法及系统
CN104573056A (zh) * 2015-01-22 2015-04-29 浪潮电子信息产业股份有限公司 一种基于oracle数据库大数据量在线迁移的方法
US9904722B1 (en) 2015-03-13 2018-02-27 Amazon Technologies, Inc. Log-based distributed transaction management
CN104765775B (zh) * 2015-03-17 2018-07-27 新浪网技术(中国)有限公司 一种日志保存方法及装置
US9928281B2 (en) 2015-03-20 2018-03-27 International Business Machines Corporation Lightweight table comparison
CN106156165A (zh) * 2015-04-16 2016-11-23 阿里巴巴集团控股有限公司 异构数据源之间的数据同步方法和装置
US10409770B1 (en) 2015-05-14 2019-09-10 Amazon Technologies, Inc. Automatic archiving of data store log data
US9798752B1 (en) * 2015-05-22 2017-10-24 State Farm Mutual Automobile Insurance Company Systems and methods for ingesting relational data into a delimited column qualifier NoSQL database
US10866865B1 (en) 2015-06-29 2020-12-15 Amazon Technologies, Inc. Storage system journal entry redaction
US10866968B1 (en) 2015-06-29 2020-12-15 Amazon Technologies, Inc. Compact snapshots of journal-based storage systems
US11609890B1 (en) 2015-06-29 2023-03-21 Amazon Technologies, Inc. Schema management for journal-based storage systems
US11599520B1 (en) 2015-06-29 2023-03-07 Amazon Technologies, Inc. Consistency management using query restrictions in journal-based storage systems
US10346434B1 (en) 2015-08-21 2019-07-09 Amazon Technologies, Inc. Partitioned data materialization in journal-based storage systems
US10108658B1 (en) 2015-08-21 2018-10-23 Amazon Technologies, Inc. Deferred assignments in journal-based storage systems
US10324905B1 (en) 2015-08-21 2019-06-18 Amazon Technologies, Inc. Proactive state change acceptability verification in journal-based storage systems
US9990391B1 (en) 2015-08-21 2018-06-05 Amazon Technologies, Inc. Transactional messages in journal-based storage systems
US10031935B1 (en) 2015-08-21 2018-07-24 Amazon Technologies, Inc. Customer-requested partitioning of journal-based storage systems
US10235407B1 (en) 2015-08-21 2019-03-19 Amazon Technologies, Inc. Distributed storage system journal forking
CN106547801A (zh) * 2015-09-23 2017-03-29 北京奇虎科技有限公司 数据库数据闪回方法和装置
US11461356B2 (en) * 2015-09-25 2022-10-04 Mongodb, Inc. Large scale unstructured database systems
US10673623B2 (en) 2015-09-25 2020-06-02 Mongodb, Inc. Systems and methods for hierarchical key management in encrypted distributed databases
US10360236B2 (en) 2015-09-25 2019-07-23 International Business Machines Corporation Replicating structured query language (SQL) in a heterogeneous replication environment
US10198346B1 (en) 2015-09-28 2019-02-05 Amazon Technologies, Inc. Test framework for applications using journal-based databases
US10331657B1 (en) 2015-09-28 2019-06-25 Amazon Technologies, Inc. Contention analysis for journal-based databases
US10133767B1 (en) 2015-09-28 2018-11-20 Amazon Technologies, Inc. Materialization strategies in journal-based databases
CN106844363B (zh) * 2015-12-03 2021-01-29 阿里巴巴集团控股有限公司 用于数据库进行物理热备及数据恢复的方法和设备
US10621156B1 (en) 2015-12-18 2020-04-14 Amazon Technologies, Inc. Application schemas for journal-based databases
US10853182B1 (en) 2015-12-21 2020-12-01 Amazon Technologies, Inc. Scalable log-based secondary indexes for non-relational databases
US10567500B1 (en) 2015-12-21 2020-02-18 Amazon Technologies, Inc. Continuous backup of data in a distributed data store
US10423493B1 (en) 2015-12-21 2019-09-24 Amazon Technologies, Inc. Scalable log-based continuous data protection for distributed databases
US10628580B2 (en) * 2016-01-10 2020-04-21 Apple Inc. Containers shared by multiple users of a device
CN105760456B (zh) * 2016-02-04 2019-11-29 网易(杭州)网络有限公司 一种保持数据一致性的方法和装置
CN107085579A (zh) * 2016-02-16 2017-08-22 中国移动通信集团福建有限公司 一种数据采集分发方法及装置
US10146854B2 (en) 2016-02-29 2018-12-04 International Business Machines Corporation Continuous automatic update statistics evaluation using change data capture techniques
US10671496B2 (en) 2016-05-31 2020-06-02 Mongodb, Inc. Method and apparatus for reading and writing committed data
CN106021593A (zh) * 2016-06-07 2016-10-12 浪潮电子信息产业股份有限公司 一种第一数据库与第二数据库接管过程中的复制处理方法
CN106899648B (zh) 2016-06-20 2020-02-14 阿里巴巴集团控股有限公司 一种数据处理方法和设备
US10776220B2 (en) 2016-06-27 2020-09-15 Mongodb, Inc. Systems and methods for monitoring distributed database deployments
CN106227727A (zh) * 2016-06-30 2016-12-14 乐视控股(北京)有限公司 一种分布式系统的日志更新方法、装置与系统
CN105956207A (zh) * 2016-07-01 2016-09-21 杭州帕拉迪网络科技有限公司 一种基于binlog的可配置的mysql数据库实时同步方法
US10289383B2 (en) 2016-07-28 2019-05-14 International Business Machines Corporation Cross object synchronization
US10705926B2 (en) * 2016-07-29 2020-07-07 Rubrik, Inc. Data protection and recovery across relational and non-relational databases
CN107783975B (zh) * 2016-08-24 2021-02-26 北京京东尚科信息技术有限公司 分布式数据库同步处理的方法和装置
CN106326469A (zh) * 2016-08-31 2017-01-11 无锡雅座在线科技发展有限公司 数据的同步方法和装置
CN107818431B (zh) * 2016-09-14 2021-05-25 北京京东尚科信息技术有限公司 一种提供订单轨迹数据的方法和系统
US10803048B2 (en) 2016-09-16 2020-10-13 Oracle International Corporation Change data capture processing and analysis
US10275281B2 (en) * 2016-09-30 2019-04-30 Salesforce.Com, Inc. Scheduling jobs for processing log files using a database system
CN107918620B (zh) 2016-10-10 2022-04-19 阿里巴巴集团控股有限公司 一种数据库的写入方法及装置、电子设备
CN106484869A (zh) * 2016-10-12 2017-03-08 北京集奥聚合科技有限公司 一种基于mysql binlog的分布式缓存方法及系统
EP3309692A1 (en) * 2016-10-17 2018-04-18 Huawei Technologies Co., Ltd. Method for elastic geographical database replication
CN106503257B (zh) * 2016-11-15 2019-09-20 北京京东金融科技控股有限公司 基于binlog补偿机制的分布式事务服务方法及系统
CN108228592B (zh) * 2016-12-13 2021-02-26 北京京东尚科信息技术有限公司 基于二进制日志的数据归档方法及数据归档装置
US10521344B1 (en) 2017-03-10 2019-12-31 Pure Storage, Inc. Servicing input/output (‘I/O’) operations directed to a dataset that is synchronized across a plurality of storage systems
CN107122424B (zh) * 2017-04-07 2019-11-05 南京南瑞集团公司 一种关系数据库日志抽取方法
CN107330003A (zh) * 2017-06-12 2017-11-07 上海藤榕网络科技有限公司 数据同步方法、系统、存储器及数据同步设备
CN107436938B (zh) * 2017-07-27 2019-11-05 国家电网公司 一种关系数据库前映像的附加日志解析方法
CN110019498B (zh) * 2017-08-14 2022-04-12 北京京东尚科信息技术有限公司 日志同步方法及装置、存储介质、电子设备
CN107506263A (zh) * 2017-08-24 2017-12-22 深圳互联先锋科技有限公司 一种故障测试方法和装置
US10990581B1 (en) 2017-09-27 2021-04-27 Amazon Technologies, Inc. Tracking a size of a database change log
US10754844B1 (en) 2017-09-27 2020-08-25 Amazon Technologies, Inc. Efficient database snapshot generation
US11762836B2 (en) * 2017-09-29 2023-09-19 Oracle International Corporation System and method for capture of change data from distributed data sources, for use with heterogeneous targets
CN110069489B (zh) * 2017-10-17 2023-01-31 株式会社日立制作所 一种信息处理方法、装置、设备及计算机可读存储介质
US10671494B1 (en) * 2017-11-01 2020-06-02 Pure Storage, Inc. Consistent selection of replicated datasets during storage system recovery
US11182372B1 (en) 2017-11-08 2021-11-23 Amazon Technologies, Inc. Tracking database partition change log dependencies
US10042879B1 (en) 2017-11-13 2018-08-07 Lendingclub Corporation Techniques for dynamically enriching and propagating a correlation context
US11354301B2 (en) * 2017-11-13 2022-06-07 LendingClub Bank, National Association Multi-system operation audit log
US11042503B1 (en) 2017-11-22 2021-06-22 Amazon Technologies, Inc. Continuous data protection and restoration
US11269731B1 (en) 2017-11-22 2022-03-08 Amazon Technologies, Inc. Continuous data protection
CN107943979A (zh) * 2017-11-29 2018-04-20 山东鲁能软件技术有限公司 一种数据库之间数据的准实时同步方法及装置
CN109690521B (zh) * 2017-12-28 2023-07-04 深圳配天智能技术研究院有限公司 一种数据库合并的方法以及装置
US11030216B2 (en) 2018-01-08 2021-06-08 International Business Machines Corporation Replicating non-supported data types using an existing supported replication format
CN108255621A (zh) * 2018-01-10 2018-07-06 深圳友门鹿网络科技有限公司 一种基于binlog的MySQL增量消息解析方法
CN110198327B (zh) * 2018-03-05 2021-09-28 腾讯科技(深圳)有限公司 一种数据传输方法及相关设备
US10621049B1 (en) 2018-03-12 2020-04-14 Amazon Technologies, Inc. Consistent backups based on local node clock
US11321353B2 (en) 2018-03-20 2022-05-03 International Business Machines Corporation Dynamic roll-over of source and target latency in a replication environment
US10713232B2 (en) * 2018-04-16 2020-07-14 Computational Systems, Inc. Efficient data processing
CN108563535B (zh) * 2018-04-27 2021-12-24 四川巧夺天工信息安全智能设备有限公司 一种对MySQL数据库全库的恢复方法
US11645261B2 (en) * 2018-04-27 2023-05-09 Oracle International Corporation System and method for heterogeneous database replication from a remote server
CN110515861B (zh) * 2018-05-21 2022-08-05 北京忆芯科技有限公司 处理刷写命令的存储设备及其方法
CN108829543A (zh) * 2018-06-21 2018-11-16 郑州云海信息技术有限公司 一种减小备份Linux系统日志大小的方法
CN109240735B (zh) * 2018-07-27 2021-09-24 平安科技(深圳)有限公司 需求回滚方案填写方法、装置、终端及可读存储介质
US11126505B1 (en) 2018-08-10 2021-09-21 Amazon Technologies, Inc. Past-state backup generator and interface for database systems
CN110928885B (zh) * 2018-09-04 2023-05-16 三六零科技集团有限公司 Mysql数据库的数据更新到Es数据库的方法及装置
US11663207B2 (en) * 2018-09-24 2023-05-30 Salesforce, Inc. Translation of tenant identifiers
US11061872B2 (en) * 2018-10-16 2021-07-13 International Business Machines Corporation Integrating a legacy static system with an event-based system
CN109408290B (zh) * 2018-10-19 2021-02-26 厦门市美亚柏科信息股份有限公司 一种基于InnoDB的碎片文件恢复方法、装置及存储介质
US20200142985A1 (en) * 2018-11-07 2020-05-07 ZenDesk, Inc. Asynchronously publishing events to a message bus in an event-driven computing system
CN111177141A (zh) * 2018-11-09 2020-05-19 上海擎感智能科技有限公司 利用MySQL并行复制恢复数据方法、设备及系统
KR102119258B1 (ko) 2018-11-14 2020-06-05 주식회사 실크로드소프트 데이터베이스 관리 시스템에서의 변경 데이터 캡쳐 구현 기법
US11042454B1 (en) 2018-11-20 2021-06-22 Amazon Technologies, Inc. Restoration of a data source
US11151114B2 (en) * 2018-12-04 2021-10-19 International Business Machines Corporation Log reader and parser sharing determination in a change data capture environment
CN111382140B (zh) * 2018-12-29 2023-06-16 方正国际软件(北京)有限公司 数据库序列迁移的方法及电子设备
US12093316B2 (en) * 2019-01-31 2024-09-17 Hewlett Packard Enterprise Development Lp Partial file system instances
KR102177792B1 (ko) * 2019-02-26 2020-11-11 주식회사 퍼즐시스템즈 컬럼 별 바이너리 파일 저장 구조를 이용하여 대용량 데이터를 메모리 용량 제약없이 차트로 표시하는 시스템
KR102171430B1 (ko) * 2019-02-26 2020-10-29 주식회사 퍼즐시스템즈 데이터베이스에서 조회된 대용량 데이터를 컬럼 별 바이너리 파일로 저장하는 시스템
US11392541B2 (en) 2019-03-22 2022-07-19 Hewlett Packard Enterprise Development Lp Data transfer using snapshot differencing from edge system to core system
US10997160B1 (en) 2019-03-25 2021-05-04 Amazon Technologies, Inc. Streaming committed transaction updates to a data store
US11249983B2 (en) * 2019-04-02 2022-02-15 International Business Machines Corporation Transaction change data forwarding
US11468011B2 (en) 2019-04-11 2022-10-11 Singlestore, Inc. Database management system
CN110162571A (zh) * 2019-04-26 2019-08-23 厦门市美亚柏科信息股份有限公司 一种异构数据库之间数据同步的系统、方法、存储介质
US11100087B2 (en) * 2019-04-26 2021-08-24 Microsoft Technology Licensing, Llc Data tokenization system maintaining data integrity
US11726991B2 (en) * 2019-04-30 2023-08-15 EMC IP Holding Company LLC Bulk updating of mapping pointers with metadata transaction log
US11170029B2 (en) 2019-05-31 2021-11-09 Lendingclub Corporation Multi-user cross-device tracking
US11829384B1 (en) 2019-06-24 2023-11-28 Amazon Technologies, Inc. Amortizing replication log updates for transactions
CN110417892B (zh) * 2019-07-31 2021-08-27 中国工商银行股份有限公司 基于报文解析的数据复制链路优化方法及装置
US11886439B1 (en) 2019-08-27 2024-01-30 Amazon Technologies, Inc. Asynchronous change data capture for direct external transmission
US11494408B2 (en) * 2019-09-24 2022-11-08 Salesforce.Com, Inc. Asynchronous row to object enrichment of database change streams
CN110795420A (zh) * 2019-10-30 2020-02-14 浪潮云信息技术有限公司 一种基于Ansible的MySQL数据库自动化备份方法
CN111008246B (zh) * 2019-11-26 2024-04-19 中盈优创资讯科技有限公司 数据库日志同步方法、装置、计算机设备及可读存储介质
CN111198869A (zh) * 2019-12-17 2020-05-26 未鲲(上海)科技服务有限公司 数据迁移方法、装置、设备及计算机可读存储介质
CN111414358B (zh) * 2019-12-30 2024-09-27 杭州美创科技股份有限公司 应用于关系型数据库数据装载的方法
US11347719B2 (en) * 2019-12-31 2022-05-31 Capital One Services, Llc Multi-table data validation tool
CN111241044B (zh) * 2020-01-08 2023-09-19 中国联合网络通信集团有限公司 搭建异构数据库的方法、装置、设备及可读存储介质
KR20200056357A (ko) 2020-03-17 2020-05-22 주식회사 실크로드소프트 데이터베이스 관리 시스템에서의 변경 데이터 캡쳐 구현 기법
US11182406B2 (en) 2020-03-27 2021-11-23 International Business Machines Corporation Increased data availability during replication
US11422970B2 (en) * 2020-05-11 2022-08-23 Sap Se Handling of data archiving events in a replication system
WO2021237704A1 (zh) * 2020-05-29 2021-12-02 深圳市欢太科技有限公司 数据同步方法及相关装置
CN111858501B (zh) * 2020-06-02 2023-03-28 武汉达梦数据库股份有限公司 一种基于日志解析同步的日志读取方法和数据同步系统
CN113779048A (zh) * 2020-06-18 2021-12-10 北京沃东天骏信息技术有限公司 一种数据处理方法和装置
US11416468B2 (en) 2020-07-21 2022-08-16 International Business Machines Corporation Active-active system index management
US11860894B2 (en) * 2020-08-24 2024-01-02 International Business Machines Corporation Database management system data replication
US11397718B2 (en) 2020-09-09 2022-07-26 International Business Machines Corporation Dynamic selection of synchronization update path
CN112307118B (zh) * 2020-09-30 2024-03-22 武汉达梦数据库股份有限公司 基于日志解析同步的保障数据一致性的方法和同步系统
US11182275B1 (en) 2020-10-23 2021-11-23 Capital One Services, Llc Systems and method for testing computing environments
CN112307124B (zh) * 2020-11-03 2024-09-27 深圳神拳互动科技有限公司 数据库同步验证方法、装置、设备及存储介质
CN112306994A (zh) * 2020-11-10 2021-02-02 北京沃东天骏信息技术有限公司 数据库数据迁移方法、装置以及存储介质
US11704335B2 (en) 2020-11-13 2023-07-18 International Business Machines Corporation Data synchronization in a data analysis system
CN112307108A (zh) * 2020-11-25 2021-02-02 科大国创云网科技有限公司 一种基于简单配置方式的数据抽取方法及系统
CN112507027B (zh) * 2020-12-16 2024-04-16 平安科技(深圳)有限公司 基于Kafka的增量数据同步方法、装置、设备及介质
CN112612760B (zh) * 2020-12-30 2024-08-06 中国农业银行股份有限公司 一种日志消息输出方法及装置
KR102463665B1 (ko) * 2021-02-18 2022-11-09 (주)알투비솔루션 원격 dbms 테이블간 고성능 테이블 데이터 정합성 검증 시스템
US11675809B2 (en) 2021-03-02 2023-06-13 International Business Machines Corporation Replicating data changes using multiple storage devices and tracking records of pending data changes stored on the storage devices
US11182260B1 (en) 2021-03-02 2021-11-23 International Business Machines Corporation Avoiding recovery log archive access in database accelerator environments
US11226878B1 (en) 2021-03-02 2022-01-18 International Business Machines Corporation Accelerator-based database recovery
US11500733B2 (en) 2021-03-19 2022-11-15 International Business Machines Corporation Volatile database caching in a database accelerator
US11797570B2 (en) 2021-03-19 2023-10-24 International Business Machines Corporation Asynchronous persistency of replicated data changes in a database accelerator
US11853319B1 (en) 2021-03-25 2023-12-26 Amazon Technologies, Inc. Caching updates appended to an immutable log for handling reads to the immutable log
CN113157496B (zh) * 2021-04-28 2023-03-10 深圳市腾讯网域计算机网络有限公司 应用于数据恢复的处理方法、相关装置、设备及存储介质
CN113590581B (zh) * 2021-06-28 2024-05-14 中国农业银行股份有限公司 数据传输方法、装置、设备及存储介质
CN113254983B (zh) * 2021-07-13 2021-10-01 卓尔智联(武汉)研究院有限公司 一种数据处理方法及装置
CN113704213A (zh) * 2021-08-20 2021-11-26 辽宁振兴银行股份有限公司 一种基于sqlldr2和ogg数据同步的实现方法
CN113934786B (zh) * 2021-09-29 2023-09-08 浪潮卓数大数据产业发展有限公司 一种构建统一etl的实施方法
CN114020850B (zh) * 2022-01-05 2022-04-08 深圳市明源云科技有限公司 数据库数据同步方法、装置、设备及可读存储介质
CN114527966B (zh) * 2022-02-24 2024-06-04 中国人民解放军火箭军工程大学 一种文件输入输出流高效通用化算法库实现方法
CN114648513B (zh) * 2022-03-29 2022-11-29 华南理工大学 一种基于自标注数据增广的摩托车检测方法
US12007977B1 (en) 2022-09-30 2024-06-11 Amazon Technologies, Inc. Selectively applying a replication log for logical database replica creation
CN116467372A (zh) * 2023-02-21 2023-07-21 中国人民解放军海军工程大学 一种数据库自动转换方法、装置、电子设备及存储介质
CN118277491B (zh) * 2024-06-04 2024-08-09 杭州玳数科技有限公司 基于Canal的元数据同步方法、设备、存储介质及计算机程序产品

Family Cites Families (68)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6314390A (ja) * 1986-07-04 1988-01-21 Nec Corp マルチボリユ−ム制御方式
US7031987B2 (en) 1997-05-30 2006-04-18 Oracle International Corporation Integrating tablespaces with different block sizes
US6016501A (en) * 1998-03-18 2000-01-18 Bmc Software Enterprise data movement system and method which performs data load and changed data propagation operations
US6173388B1 (en) 1998-04-09 2001-01-09 Teranex Inc. Directly accessing local memories of array processors for improved real-time corner turning processing
US6212628B1 (en) 1998-04-09 2001-04-03 Teranex, Inc. Mesh connected computer
WO2000013136A1 (en) 1998-08-31 2000-03-09 Digital Video Express, L.P. Watermarking system and methodology for digital multimedia content
JP4250231B2 (ja) * 1998-09-04 2009-04-08 キヤノン株式会社 ファイル管理装置、ファイル管理方法、及び記憶媒体
AU1936900A (en) 1998-12-08 2000-06-26 Mediadna, Inc. A system and method of obfuscating data
US6877023B1 (en) 2000-01-28 2005-04-05 Softwired, Inc. Messaging system for delivering data in the form of portable message formats between message clients
US6687848B1 (en) 2000-05-31 2004-02-03 Sun Microsystems, Inc. Techniques for preventing information loss in a business to business message in an enterprise computer system
US6753889B1 (en) 2000-05-31 2004-06-22 Sun Microsystems, Inc. Platform independent business to business messenger adapter generation tool
US20020123987A1 (en) 2001-01-18 2002-09-05 Cox James A. Nearest neighbor data method and system
US7143190B2 (en) 2001-04-02 2006-11-28 Irving S. Rappaport Method and system for remotely facilitating the integration of a plurality of dissimilar systems
US7124299B2 (en) 2001-05-18 2006-10-17 Claymore Systems, Inc. System, method and computer program product for auditing XML messages in a network-based message stream
US7007025B1 (en) 2001-06-08 2006-02-28 Xsides Corporation Method and system for maintaining secure data input and output
US7299230B2 (en) 2001-08-30 2007-11-20 Siebel Systems, Inc. Method, apparatus and system for transforming, converting and processing messages between multiple systems
US7254586B2 (en) 2002-06-28 2007-08-07 Microsoft Corporation Secure and opaque type library providing secure data protection of variables
US7076508B2 (en) * 2002-08-12 2006-07-11 International Business Machines Corporation Method, system, and program for merging log entries from multiple recovery log files
US7290249B2 (en) 2003-01-27 2007-10-30 Bea Systems, Inc. System and method for java message service mark-up language
US7039773B2 (en) 2003-04-29 2006-05-02 Oracle International Corporation Method and mechanism for efficient implementation of ordered records
JP2004341926A (ja) * 2003-05-16 2004-12-02 Toshiba Corp データベース管理システム、データベース管理プログラム
US20040254919A1 (en) * 2003-06-13 2004-12-16 Microsoft Corporation Log parser
US7321939B1 (en) 2003-06-27 2008-01-22 Embarq Holdings Company Llc Enhanced distributed extract, transform and load (ETL) computer method
US7143123B2 (en) 2004-01-09 2006-11-28 Microsoft Corporation Well-known transactions in data replication
JP2005293323A (ja) * 2004-03-31 2005-10-20 Nec Corp 異種rdbms間での差分配信レコード反映システム
US8554806B2 (en) 2004-05-14 2013-10-08 Oracle International Corporation Cross platform transportable tablespaces
US7571173B2 (en) 2004-05-14 2009-08-04 Oracle International Corporation Cross-platform transportable database
US20060041540A1 (en) 2004-06-20 2006-02-23 Marvin Shannon System and Method Relating to Dynamically Constructed Addresses in Electronic Messages
GB0414291D0 (en) * 2004-06-25 2004-07-28 Ibm Methods, apparatus and computer programs for data replication
US7360111B2 (en) * 2004-06-29 2008-04-15 Microsoft Corporation Lossless recovery for computer systems with remotely dependent data recovery
US7257690B1 (en) * 2004-10-15 2007-08-14 Veritas Operating Corporation Log-structured temporal shadow store
US7702698B1 (en) * 2005-03-01 2010-04-20 Yahoo! Inc. Database replication across different database platforms
US7310716B2 (en) * 2005-03-04 2007-12-18 Emc Corporation Techniques for producing a consistent copy of source data at a target location
US20060212356A1 (en) * 2005-03-14 2006-09-21 Michael Lambert System and method for integrated order and channel management
US7844957B2 (en) 2005-08-19 2010-11-30 Sybase, Inc. Development system with methodology providing optimized message parsing and handling
JP2007114817A (ja) * 2005-10-18 2007-05-10 Hitachi High-Tech Science Systems Corp ログ情報のビジュアル化装置とその方法及びビジュアル化プログラム
US7885922B2 (en) 2005-10-28 2011-02-08 Oracle International Corporation Apparatus and method for creating a real time database replica
US7831574B2 (en) * 2006-05-12 2010-11-09 Oracle International Corporation Apparatus and method for forming a homogenous transaction data store from heterogeneous sources
US7627562B2 (en) 2006-06-13 2009-12-01 Microsoft Corporation Obfuscating document stylometry
US8015214B2 (en) 2006-06-30 2011-09-06 Encapsa Technology, Llc Method of encapsulating information in a database and an encapsulated database
WO2008021244A2 (en) 2006-08-10 2008-02-21 Trustees Of Tufts College Systems and methods for identifying unwanted or harmful electronic text
CN101246486B (zh) 2007-02-13 2012-02-01 国际商业机器公司 用于改进的表达式处理的方法和装置
US7873635B2 (en) 2007-05-31 2011-01-18 Microsoft Corporation Search ranger system and double-funnel model for search spam analyses and browser protection
US7730107B1 (en) 2007-08-17 2010-06-01 Oclc Online Computer Library Center, Inc. System and method for updating and sharing private library profile data to facilitate delivery of electronic content to libraries
US10248483B2 (en) 2007-10-19 2019-04-02 Oracle International Corporation Data recovery advisor
US9305180B2 (en) 2008-05-12 2016-04-05 New BIS Luxco S.à r.l Data obfuscation system, method, and computer implementation of data obfuscation for secret databases
US7962458B2 (en) * 2008-06-12 2011-06-14 Gravic, Inc. Method for replicating explicit locks in a data replication engine
US8301593B2 (en) * 2008-06-12 2012-10-30 Gravic, Inc. Mixed mode synchronous and asynchronous replication system
US8069053B2 (en) 2008-08-13 2011-11-29 Hartford Fire Insurance Company Systems and methods for de-identification of personal data
JP5694641B2 (ja) 2008-09-12 2015-04-01 スリーエム イノベイティブ プロパティズ カンパニー ラッピング立体成形体及びその製造方法
JP4789021B2 (ja) 2009-02-06 2011-10-05 日本電気株式会社 データ処理装置及びデータ処理方法
JP4722195B2 (ja) 2009-04-13 2011-07-13 富士通株式会社 データベース・メッセージ分析支援プログラム、方法及び装置
US8108343B2 (en) 2009-04-23 2012-01-31 Microsoft Corporation De-duplication and completeness in multi-log based replication
US8214515B2 (en) 2009-06-01 2012-07-03 Trion Worlds, Inc. Web client data conversion for synthetic environment interaction
CN101615199A (zh) * 2009-07-31 2009-12-30 深圳市珍爱网信息技术有限公司 异构数据库同步方法及系统
CN101719165B (zh) * 2010-01-12 2014-12-17 浪潮电子信息产业股份有限公司 一种实现数据库高效快速备份的方法
US8768902B2 (en) 2010-06-11 2014-07-01 Microsoft Corporation Unified concurrent changes to data, schema, and application
US8954385B2 (en) * 2010-06-28 2015-02-10 Sandisk Enterprise Ip Llc Efficient recovery of transactional data stores
US8626778B2 (en) 2010-07-23 2014-01-07 Oracle International Corporation System and method for conversion of JMS message data into database transactions for application to multiple heterogeneous databases
US8510270B2 (en) 2010-07-27 2013-08-13 Oracle International Corporation MYSQL database heterogeneous log based replication
US9298878B2 (en) 2010-07-29 2016-03-29 Oracle International Corporation System and method for real-time transactional data obfuscation
US9130988B2 (en) 2010-12-21 2015-09-08 Microsoft Technology Licensing, Llc Scareware detection
WO2012166581A2 (en) 2011-05-27 2012-12-06 Ctc Tech Corp. Creation, use and training of computer-based discovery avatars
US20130246376A1 (en) 2012-03-16 2013-09-19 Infosys Limited Methods for managing data intake and devices thereof
US9606729B2 (en) 2013-03-15 2017-03-28 Skyera, Llc Apparatus and method for insertion and deletion in multi-dimensional to linear address space translation
US10032244B2 (en) 2014-08-21 2018-07-24 Intel Corporation Method and apparatus for implementing a nearest neighbor search on a graphics processing unit (GPU)
US9818043B2 (en) 2015-06-24 2017-11-14 Microsoft Technology Licensing, Llc Real-time, model-based object detection and pose estimation
US10331753B1 (en) 2018-04-04 2019-06-25 The Florida International University Board Of Trustees Efficient progressive continuous k-nearest neighbor query algorithm for moving objects with a tree-like index

Also Published As

Publication number Publication date
EP2599014A2 (en) 2013-06-05
US20120030172A1 (en) 2012-02-02
EP2599014B1 (en) 2019-02-13
EP3410320A1 (en) 2018-12-05
WO2012018424A3 (en) 2013-04-18
US20130318044A1 (en) 2013-11-28
JP2013535737A (ja) 2013-09-12
US9442995B2 (en) 2016-09-13
WO2012018424A2 (en) 2012-02-09
EP3410320B1 (en) 2021-03-10
CN103221949A (zh) 2013-07-24
USRE48243E1 (en) 2020-10-06
US8510270B2 (en) 2013-08-13
CN103221949B (zh) 2017-10-17

Similar Documents

Publication Publication Date Title
JP6062855B2 (ja) MySQLデータベース−異種ログベースレプリケーション
US10558617B2 (en) File system backup using change journal
US7676481B2 (en) Serialization of file system item(s) and associated entity(ies)
CN100445998C (zh) 事务文件系统
US10642696B2 (en) Copying compressed pages without uncompressing the compressed pages
US8386431B2 (en) Method and system for determining database object associated with tenant-independent or tenant-specific data, configured to store data partition, current version of the respective convertor
US10120767B2 (en) System, method, and computer program product for creating a virtual database
US10235368B2 (en) System and method for updating external file referenced by database with transactional consistency using SQL
EP4113314A1 (en) Computer-implemented method for database management, computer program product and database system
JP3709510B2 (ja) リレーショナルデータベース管理方法およびリレーショナルデータベースシステム
KR101109390B1 (ko) 하드웨어/소프트웨어 인터페이스 시스템에 의해 관리가능한 정보의 단위들에 대한 동기화 서비스를 제공하는시스템 및 방법
Berkeley Oracle Berkeley DB
Allen et al. LOBs
Salinas-Monteagudo et al. A triggerless approach to writeset extraction in multiversioned databases
Balaji Oracle Database Application Developer's Guide-Large Objects 10g Release 2 (10.2) Part No. B14249-01 Copyright© 1996, 2005, Oracle. All rights reserved. Primary Authors: Jack Melnick, Eric Paapanen Contributing Authors: K. Akiyama, Geeta Arora, S. Banerjee, Yujie Cao, Thomas H. Chang, E. Chong, S.

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140509

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140509

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150219

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150303

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150529

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160112

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160408

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160614

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160913

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20161122

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20161215

R150 Certificate of patent or registration of utility model

Ref document number: 6062855

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250