MySQLからOracleへのリアルタイム同期ソリューションの詳細な説明

MySQLからOracleへのリアルタイム同期ソリューションの詳細な説明

1 要件の概要

MySQL5.6本番データベースの複数のテーブルのデータは、Oracle11gデータウェアハウスにリアルタイムで同期されます。MySQL履歴データは700Gで、毎日平均約50Gのログファイルが生成されます。MySQLログスペースは50Gで、制限を超えるとログファイルがロールアウトされます。同期プロセス全体が MySQL のビジネス操作に影響を与えてはなりません。

2 技術原則

LingBee データ統合ソフトウェア BeeDI は、MySQL データを Oracle にリアルタイムで同期し、ETL を通じて履歴データを完全に同期し、ログ分析を通じて増分データをリアルタイムで同期するために使用されます。

ログスペースの制限により、すべての履歴データを一度に同期すると、1 日以上かかります。完全同期プロセス中に生成されたログは削除され、リアルタイム ログ解析タスクのデータが欠落します。したがって、履歴データはバッチで同期する必要があります。基本的な操作は次のとおりです。

部分的なテーブルを完全に同期します。

b. 完全に同期されたテーブルをリアルタイム ログ解析タスクに追加し、タスクを開始します。MySQL と Oracle の対応するテーブル データが整合したら、ログ解析タスクを停止します。

すべてのテーブルがリアルタイム ログ解析タスクに追加されるまで、上記の手順 a と b を繰り返します。

3 MySQL環境の設定

3.1 ユーザーを作成する

メイン データベースに同期ユーザーを作成します。ユーザー同期を例にとると、ユーザーを作成して権限を割り当てるためのステートメントは次のようになります。

'sync'@'%' というユーザーを作成します ('xxxxx' によって識別されます)。

*.* に SELECT、PROCESS、SUPER、REPLICATION CLIENT、REPLICATION SLAVE 権限を 'sync'@'%' に付与します。

3.2 BinLogを有効にする

メイン データベースのログのオープン状態とログ レコード形式を照会します。

'log_bin' のような変数を表示します。

「%binlog_format%」のような変数を表示します。

ログ ステータスが OFF の場合、またはログ形式が ROW でない場合は、my.ini ファイルを編集して次の項目を設定します。

log-bin="xxxxxx" --ログを開く

binlog_format="ROW" --ログレコード形式

4 BeeDI同期操作

4.1 完全同期タスクの設定

BeeDI で新しい ETL ジョブを作成し、ETL テンプレート プロパティ ダイアログ ボックスのマッピング プロパティで LOB ロードをバインドされたストレージに設定します。

[LOB ロード] は、Oracle LOB データのロード方法を指定するために使用されます。配置ストレージは、LOB ポインタを配置することによって LOB コンテンツを更新し、バインド ストレージは、パラメータ バインドによって LOB コンテンツを更新します。

データ抽出のパフォーマンスを最適化するには、抽出コンポーネントの [オプション] ダイアログボックスで [非同期] 抽出モードを設定することをお勧めします。

データの読み込みパフォーマンスを最適化するには、読み込みコンポーネントの [オプション] ダイアログ ボックスでバッチ読み込みモードを選択することをお勧めします。

完全同期タスクの構成は次のように完了します。

上記の方法に従って、それぞれが同期テーブルに対応する複数の ETL ジョブを作成します。

4.2 リアルタイムログ解析タスクの設定

リアルタイム分析タスクでは、同期するすべてのテーブルを指定するスクリプトジョブを使用します。スクリプトコードは次のとおりです。

4.3 完全同期タスクを実行する

実行する完全同期ジョブを選択し、ツールバーの[開始]ボタンをクリックします。本番ライブラリリソースとBeeDIが配置されているマシンリソースが十分であれば、複数の完全同期ジョブを同時に開始できます。

4.4 リアルタイムログ解析タスクを実行する

すべての完全同期ジョブが終了したら、リアルタイム タスク スクリプトを編集し、変数 cdc_tables に完全同期されたテーブルを指定し、inquireLog 関数のパラメータにログ キャプチャ開始点を設定します。最初の完全同期ジョブの開始時刻をログ キャプチャ開始点として指定できます。ログ キャプチャ ポイントは、タスクを最初に実行するときに 1 回だけ設定する必要があります。ログ キャプチャ ポイントは、後でタスクを実行するときに自動的に管理されます。

スケジュール ウィンドウで、ショートカット メニューから [追加] をクリックして、実行するリアルタイム ログ解析ジョブを読み込みます。スケジュール ウィンドウでリアルタイム ジョブを選択し、ツールバーの [タイミング] ボタンをクリックして、タイミングを秒単位で設定し、実行サイクルを 1 秒に設定します。

リアルタイム タスクが実行されると、1 分ごとに読み取られるログ レコードと最新のログ解析時点を含む MySQL データベース ログ解析情報がログ ウィンドウに出力されます。

4.5 同期テーブルを追加する

リアルタイムタスクに対応するジョブステータスにタイミングアイコンが頻繁に表示される場合、タスクがリアルタイム状態に入ったことを示します。この時点で、MySQL ソーステーブルと Oracle ターゲットテーブルのデータは一致しています。リアルタイムログ解析タスクを停止し、他のテーブルの完全同期タスクを構成します (4.1 および 4.3 を参照)。完全なタスクが完了したら、リアルタイム ログ解析タスクを編集し、完全に同期された他のテーブルを追加して、リアルタイム タスクを開始します (4.2 および 4.4 を参照)。

5. 同期データの一貫性を確認する

ソースデータベースとターゲットデータベースで順番に select count(*) from [table] を実行し、テーブルレコード数が等しいかどうかを比較します。

ソース データベースとターゲット データベースでそれぞれ select sum([数値列]) from [テーブル] を実行し、指定されたフィールドの算術合計が等しいかどうかを比較します。

これで、MySQL から Oracle へのリアルタイム同期ソリューションの詳細な説明に関するこの記事は終了です。MySQL から Oracle へのリアルタイム同期に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLとOracleの誤解の詳細な説明
  • SpringBoot マルチデータベース接続 (mysql+oracle) の実装
  • Oracle の MySQL バージョンでユーザー Scott のテーブル ステートメントを作成する例
  • mysql と oracle のデフォルトのトランザクション分離レベルの説明
  • MyBatis JdbcType と Oracle および MySql データ型の対応の説明
  • MySQLとOracleの違いのまとめ(機能性能の比較、選択、使用時のSQLなど)
  • Oracle Rownum 書き込みに似た MySQL の詳細な例
  • 3つの主要データベース(Mysql、SqlServer、Oracle)の違いについて簡単に説明します。
  • Oracle を MySQL に置き換える際の問題と解決策

<<:  Nginx ロードバランシングの設定方法

>>:  マテリアルデザインで水滴アニメーションボタンを実現するための純粋なCSS

推薦する

http.server に基づく LAN サーバーの構築プロセスの分析

皆さんはこのような状況に遭遇したことがあるでしょうか。プロジェクトや研究開発を行う際に、緊急にファイ...

モバイル署名機能を実装するJavaScript

この記事では、モバイル署名機能を実装するためのJavaScriptの具体的なコードを参考までに共有し...

ユーザーエクスペリエンスの概要

最近では、ソフトウェアやウェブサイトのいずれの作業であっても、設計時に「ユーザー エクスペリエンス」...

imgタグ間のスペースの問題の詳細な説明

IMG タグの基本分析 HTML5 では、img タグには 4 つの要素があります。 (1) src...

CentOS8 Linux 8.0.1905 のインストール手順(図解)

現在、CentOS の最新バージョンは CentOS 8 です。次に、CentOS Linux 8....

負荷分散と動的および静的分離操作を実現するDocker NginxコンテナとTomcatコンテナ

Tomcat8 イメージをダウンロード [root@localhost ~]# docker sea...

データベースクエリの最適化: サブクエリの最適化

1. 事例会社のトップ以外の従業員全員を年齢別にグループ化します。 t_emp で id が存在しな...

純粋な CSS を使用してドロップダウン メニューを作成するサンプル コード

導入:最近の面接の質問を見ると、ドロップダウン メニューを実装するために CSS を使用することが多...

泡の小さな鋭角効果を実現するCSS

効果画像(境界線の色が薄すぎるので、{} で囲みます): { }参考リンク Pure CSS バブル...

HTML の順序付きリスト、順序なしリスト、定義リストに関する簡単な説明

順序付きリストXML/HTML コードコンテンツをクリップボードにコピー<オルタイプ= &qu...

JavaScript関数におけるこのポイントの問題の詳細な説明

このキーワードどのオブジェクトが関数を呼び出しますか? また、関数内の this はどのオブジェクト...

vue3 のコンポーネントの互換性のない変更の詳細な説明

目次機能コンポーネント非同期コンポーネントの書き方とdefineAsyncComponentメソッド...

Expressを使用してプロジェクトを自動的にビルドするNode.jsのプロセス全体

1. Expressライブラリとジェネレータをインストールするcmdを開いて、次のコマンドを入力しま...

初心者向け入門チュートリアル: ドメイン名の解決とバインディング

では、ドメイン名を登録して仮想ホストを購入した後、IE でドメイン名を入力して Web サイトを開く...

HTMLのインライン要素とブロックレベル要素とは何か、またそれらの違いは何ですか

以前の就職面接で面接官が尋ねた質問を覚えています。「インライン要素とは何ですか。ブロックレベル要素と...