[HeatWavejpMeetup#08] OCI GoldenGate を用いたAutonomous Database から MySQL HeatWave へのデータ連携 [稲葉 祐人 氏(スマートスタイル)]

203 Views

February 25, 25

スライド概要

本セッションでは、OCI GoldenGateを活用し、Autonomous Database と MySQL HeatWave の間でデータ連携を行う具体的な手順についてご紹介します。
また Autonomous Database から MySQLHeatWave へのデータ連携を行う際に気をつけるべきポイントや、陥りがちな落とし穴について触れていきます。

【登壇者】
株式会社スマートスタイル
データベース&クラウド事業部 技術本部 クラウド部
稲葉 祐人 氏

profile-image

HeatWavejpは、MySQL HeatWave の良さを知っていただき、参加者同士でノウハウやナレッジを共有できるユーザーコミュニティです。参加者同士のつながりを深めるため、以下の活動を行ってまいります。 COMMUNICATION *Slackやconnpassを活用したユーザー同士のコミュニケーションの場の提供 EVENT *オンライン/オフラインでのMeetupセミナーや勉強会の開催(隔月程度) SHARING *製品情報や最新アップデート、リリース情報の共有 INTERACT *参加者のコミュニティ・ネットワークやユーザー同士の交流を促進

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

HeatWavejp Meetup #08 OCI GoldenGate を用いた Autonomous Database から MySQL HeatWave へのデータ連携 2024年6月17日(月) Copyright © 2024 HeatWavejp All Rights Reserved. 株式会社スマートスタイル DB&クラウド事業部 技術本部 クラウド部 稲葉 祐人

2.

アジェンダ 1. OCI GoldenGate とは 2. データ連携の全体像 3. データ連携の手順 4. 補足 5. まとめ Copyright © 2024 HeatWavejp All Rights Reserved.

3.

OCI GoldenGate とは① OCI GoldenGateとは • 「Oracle GoldenGate」というデータ・レプリケーション製品のOCI上のマネージド・サービス • GoldenGateの魅力は、複数のデータソース/ターゲット間で低遅延のデータ・レプリケーションを実現可能 Copyright © 2024 HeatWavejp All Rights Reserved.

4.

OCI GoldenGate とは② GoldenGateの基本的な構成 ②ReplicatがTrail Fileを読み込み、 同じトランザクションを実行 ①Extractが変更履歴を抽出し、 Trail Fileへ書き込む Trail File Source Target Service Manager GoldenGate Deployment Copyright © 2024 HeatWavejp All Rights Reserved. Administration Server Service Manager (OCIではコンソール)が デプロイメント全体を管理 Administration Server (OCIではGoldenGateコンソール)で 各プロセス実装・運用・監視・管理

5.

データ連携の全体像① Oracle Modern Data Platform Reference Architecture(MySQL HeatWave) Copyright © 2024 HeatWavejp All Rights Reserved.

6.

データ連携の全体像② データ連携の流れ • 以下の公式チュートリアルで紹介されている手順を参考にソースとターゲット変更して実施 OCI MySQL HeatWaveデータベースからAutonomous Data Warehouseへのデータのレプリケート (oracle.com) ソースDB Copyright © 2024 HeatWavejp All Rights Reserved. ターゲットDB

7.

データ連携の構築手順⓪ ソースDBとターゲットDBの作成 1. 対象となるDBとVCNを作成します。 • ソースDB : Autonomous Database (ATP 19c) • ターゲットDB: MySQL HeatWave (MySQL 8.4.0 - LTS) • VCN :「インターネット接続性を持つ」ウィザードで作成し、セキュリティリストを修正 ADBの構築方法に関する 弊社ブログ Copyright © 2024 HeatWavejp All Rights Reserved. HeatWave構築に関する 弊社ホワイトペーパー

8.

データ連携の構築手順① データ連携の準備 ソースDB Copyright © 2024 HeatWavejp All Rights Reserved. ターゲットDB

9.

データ連携の構築手順② データ連携の準備(ターゲットDB ー MySQL HeatWave) 1. Oracle社提供のSQLスクリプトをダウンロードします。 2. Insert文は実行せずに、 SRC_OCIGGLLデータベースを作成します 3. SRC_OCIGGLLデータベース内に以下の6つの空テーブルを作成します。 • SRC_CITY • SRC_CUSTOMER • SRC_ORDERS • SRC_ORDER_LINES • SRC_PRODUCT • SRC_REGION 4. 作成したテーブルが空であることを確認します。 Copyright © 2024 HeatWavejp All Rights Reserved.

10.

データ連携の構築手順③ 空テーブルであることの確認 空テーブルの作成 Copyright © 2024 HeatWavejp All Rights Reserved.

11.

データ連携の構築手順④ データ連携の準備(ターゲットDB ー MySQL HeatWave) 5. 各テーブルに対してプライマリーキーを追加します。 mysql> alter table SRC_OCIGGLL.SRC_CITY add primary key (CITY_ID); 6. 各テーブルに対してHeatWaveを利用するという設定(RAPID設定)を行います。 mysql> alter table SRC_OCIGGLL.SRC_CITY secondary_engine RAPID; プライマリーキーの追加 Copyright © 2024 HeatWavejp All Rights Reserved. RAPID設定

12.

データ連携の構築手順⑤ データ連携の準備(ターゲットDB ー MySQL HeatWave) 7. SRC_OCIGGLLデータベースのテーブルのデータをMySQL HeatWaveにロードします。 8. OCI GoldenGateで使用するユーザを作成し、権限を付与します。 ggadminユーザの作成と権限付与 HeatWaveへのロード Copyright © 2024 HeatWavejp All Rights Reserved.

13.

データ連携の構築手順⑥ データ連携の準備 ソースDB Copyright © 2024 HeatWavejp All Rights Reserved. ターゲットDB

14.

データ連携の構築手順⑦ データ連携の準備(ソースDB ー ADB) 1. ADBのツール「Database Actions」からGGADMINユーザを有効化します。 2. Database ActionsなどでADBに接続し、サプリメンタル・ロギングを有効化します。 SQL> alter pluggable database add supplemental log data; GGADMINユーザの有効化 Copyright © 2024 HeatWavejp All Rights Reserved. サプリメンタル・ロギングの有効化

15.

データ連携の構築手順⑧ データ連携の準備(ソースDB ー ADB) 3. Oracle社提供のSQLスクリプトzipファイルをダウンロードします。 4. zipファイルを解凍し、以下のファイルのSQLスクリプトをDatabase Actionsなどで実行します。 • OCIGGLL_OCIGGS_SETUP_USERS_ATP.sql • OCIGGLL_OCIGGS_SRC_USER_SEED_DATA.sql ファイル選択 Copyright © 2024 HeatWavejp All Rights Reserved. SQLスクリプトの実行

16.

データ連携の構築手順⑨ データ連携の準備(ソースDB ー ADB) ※ 注意 「OCIGGLL_OCIGGS_SRC_USER_SEED_DATA.sql」を実行するときに、 SQLスクリプトのデータ型が適切でないというエラーが出るので、 197行目~209行目を以下のように書き換えてみてください! Copyright © 2024 HeatWavejp All Rights Reserved.

17.

データ連携の構築手順⑩ データ連携の準備 ソースDB Copyright © 2024 HeatWavejp All Rights Reserved. ターゲットDB

18.

データ連携の構築手順⑪ データ連携の準備(OCI GoldenGate ー ADB) 1. OCIのコンソール画面のハンバーガーメニューから「Oracle Database」を選択し、 「GoldenGate」をクリックします。 2. 以下の項目を入力し、ADB用のデプロイメントを作成します。 • 名前:GGOracleATP(任意のもので可) • デプロイメント方法:開発またはテスト(検証のため) • OCPU数:1(検証のため) • サブネット:プライベートサブネット • ライセンスタイプ:ライセンス込み • ネットワーク(オプション):GoldenGateコンソール・パブリック・アクセスを有効化 Copyright © 2024 HeatWavejp All Rights Reserved.

19.

データ連携の構築手順⑫ データ連携の準備(OCI GoldenGate ー ADB) 2. (続き) 以下の項目を入力し、ADB用のデプロイメントを作成します。 • デプロイメント・タイプ:データ・レプリケーション • テクノロジ:Oracle Database • バージョン:oggoracle:21.14.0.0.0_240525.0856_994 • GoldenGateインスタンス名:GGinstOracleATP • 管理者ユーザー名:oggadmin • パスワード・シークレット:作成したシークレットキーを選択 ※シークレットは、OCI上のVaultサービスを活用し、作成します。その際に「手動シークレット作成」、 「プレーンテキスト」を選択し、GoldenGateにログインするパスワードを入力してください。 詳細は以下のドキュメントを参照してください。 参考:Vaultでのシークレットの作成 (oracle.com) Copyright © 2024 HeatWavejp All Rights Reserved.

20.

データ連携の構築手順⑬ データ連携の準備(OCI GoldenGate ー ADB) 3. ソースDBであるADBにアクセスするために、接続オブジェクトを作成します。 4. コンソール上で「GoldenGate」から「接続」を選択し、以下の項目を入力して作成します。 • 名前:srcoracleatp • タイプ:Oracle Autonomous Database • 接続詳細:「データベースの選択」をクリック • データベース:準備で作成したADBを選択 • データベース・ユーザー名:ggadmin • データベース・ユーザー・パスワード:GGADMINを有効化した際のパスワードを入力 • ネットワーク接続:共有エンドポイント 5. 接続オブジェクトをデプロイメントにアタッチします。 Copyright © 2024 HeatWavejp All Rights Reserved.

21.

データ連携の構築手順⑭ 接続オブジェクトのアタッチ デプロイメントの作成 Copyright © 2024 HeatWavejp All Rights Reserved.

22.

データ連携の構築手順⑮ データ連携の準備(OCI GoldenGate ー MySQL HeatWave) 1. OCIのコンソール画面のハンバーガーメニューから「Oracle Database」を選択し、 「GoldenGate」をクリックします。 2. 以下の項目を入力し、MySQL HeatWave用のデプロイメントを作成します。 ※ADBとの相違点のみ太文字にしています。 • 名前: GGMySQLHW(任意のもので可) • デプロイメント方法:開発またはテスト(検証のため) • OCPU数:1(検証のため) • サブネット:プライベートサブネット • ライセンスタイプ:ライセンス込み • ネットワーク(オプション):GoldenGateコンソール・パブリック・アクセスを有効化 Copyright © 2024 HeatWavejp All Rights Reserved.

23.

データ連携の構築手順⑯ データ連携の準備(OCI GoldenGate ー MySQL HeatWave) 2. (続き) 以下の項目を入力し、ADB用のデプロイメントを作成します。 • デプロイメント・タイプ:データ・レプリケーション • テクノロジ:MySQL • バージョン: oggmysql:21.14.0.0.0_240404.1108_994 • GoldenGateインスタンス名:GGinstMySQLHW • 管理者ユーザー名:oggadmin • パスワード・シークレット:作成したシークレットキーを選択(ADBと同じキーでも可) ※シークレットは、OCI上のVaultサービスを活用し、作成します。その際に「手動シークレット作成」、 「プレーンテキスト」を選択し、GoldenGateにログインするパスワードを入力してください。 詳細は以下のドキュメントを参照してください。 参考:Vaultでのシークレットの作成 (oracle.com) Copyright © 2024 HeatWavejp All Rights Reserved.

24.

データ連携の構築手順⑰ データ連携の準備(OCI GoldenGate ー MySQL HeatWave) 3. ターゲットDBであるHeatWaveにアクセスするために、接続オブジェクトを作成します。 4. コンソール上で「GoldenGate」から「接続」を選択し、以下の項目を入力して作成します。 • 名前:trgmysqlhw • タイプ:OCI MySQL HeatWave • 接続詳細:「 MySQLデータベース・システムの選択」をクリック • データベース:準備で作成したHeatWaveを選択 • データベース名: SRC_OCIGGLL • データベース・ユーザー名:ggadmin • データベース・ユーザー・パスワード:ggadminを有効化した際のパスワードを入力 • SSL詳細:TLS(セキュリティ・プロトコル)/優先(SSLモード) 5. 接続オブジェクトをデプロイメントにアタッチします。 Copyright © 2024 HeatWavejp All Rights Reserved.

25.

データ連携の構築手順⑱ 接続オブジェクトのアタッチ デプロイメントの作成 Copyright © 2024 HeatWavejp All Rights Reserved.

26.

データ連携の構築手順⑲ ソースデータベースからデータを抽出する ソースDB Copyright © 2024 HeatWavejp All Rights Reserved. ターゲットDB

27.

データ連携の構築手順⑳ Extractの作成(OCI GoldenGate ー ADB) 1. OCIのコンソール画面の「GoldenGate」からADB用のデプロイメントを選択し、 「コンソールの起動」をクリックし、管理者ユーザーoggadminでログインします。 OCI GoldeGateコンソール画面 OCI GoldeGateログイン画面 Copyright © 2024 HeatWavejp All Rights Reserved.

28.

データ連携の構築手順㉑ Extractの作成(OCI GoldenGate ー ADB) 2. 管理サービスの画面上部にある「+」のボタンをクリックし、以下の項目を入力してExtractを追加します。 • 抽出タイプ:統合Extract • プロセス名:CDCEXT • トレイル名:C1 • 資格証明ドメイン:OracleGoldenGate • 資格証明別名:srcoracleatp(接続オブジェクト作成時の名前) • パラメーター・ファイル:最後の行に「 TABLE SRC_OCIGGLL.*; 」を追加 Copyright © 2024 HeatWavejp All Rights Reserved.

29.

データ連携の構築手順㉒ Extractの作成(OCI GoldenGate ー ADB) 3. 再度「+」のボタンをクリックし、以下の項目を入力して初期ロード用のExtractを追加します。 • 抽出タイプ:Extractの初期ロード • プロセス名:ILEXT • パラメーター・ファイル:以下の内容を最後に追加します。 ※統合Extractと違い、トレイル名などをパラメーター・ファイルに記述するのは仕様らしいです USERIDALIAS srcoracleatp DOMAIN OracleGoldenGate EXTFILE I1 , PURGE TABLE SRC_OCIGGLL.*; Copyright © 2024 HeatWavejp All Rights Reserved.

30.

データ連携の構築手順㉓ Extractの作成(OCI GoldenGate ー ADB) 4. 初期ロード用のExtractと、更新用のExtractが追加されていることを確認します。 ※初期ロード用のExtractは、初期読み込みが成功するとステータスが「黄色」になります 変更用Extract 初期ロード用Extract Copyright © 2024 HeatWavejp All Rights Reserved.

31.

データ連携の構築手順㉔ 初期ロード用配布パス ソースDB Copyright © 2024 HeatWavejp All Rights Reserved. ターゲットDB

32.

データ連携の構築手順㉕ 初期ロード用の配布パスの準備(OCI GoldenGate ー MySQL HeatWave) 1. OCIのコンソール画面の「GoldenGate」からHeatWave用のデプロイメントを選択し、 「コンソールの起動」をクリックし、管理者ユーザーoggadminでログインします。 2. ナビゲーションメニューから「管理者」を選択し、「+」ボタンから以下の項目を入力しユーザを発行します。 • ユーザ名:ggsnet • ロール:演算子(英語だとOperator) • タイプ:パスワード • パスワード:任意のパスワードを入力 Copyright © 2024 HeatWavejp All Rights Reserved.

33.

データ連携の構築手順㉖ 初期ロード用の配布パスの作成(OCI GoldenGate ー ADB) 1. 先程作成した配布パスユーザをADBのデプロイメントに追加します。 2. ナビゲーションメニューから「構成」を選択し、「+」ボタンから以下の項目を入力し資格証明を追加します。 • 資格証明ドメイン:GGNetwork • 資格証明別名:dpuser • ユーザ名:ggsnet • パスワード:HeatWaveデプロイメントでggsnetに指定したパスワードを入力 Copyright © 2024 HeatWavejp All Rights Reserved.

34.

データ連携の構築手順㉗ 初期ロード用の配布パスの作成(OCI GoldenGate ー ADB) 3. ADBのデプロイメントコンソールから「分散サービス」を選択し、 右上の 「+」ボタンから以下の項目を入力し配布パスを作成します。 • 配布パス名:dpiext • ソース:Extractは何も選択せず、下の段に「I1」と入力 • ターゲット認証方式:ユーザID別名 • ターゲット:wws • ターゲットホスト:HeatWave用のデプロイメントの詳細にあるURLを入力 ※ https:// 以降で、末尾のスラッシュなしで入力する必要があります Copyright © 2024 HeatWavejp All Rights Reserved.

35.

データ連携の構築手順㉘ 初期ロード用の配布パスの作成(OCI GoldenGate ー ADB) 3. (続き) • ポート番号:443 • トレイル名:I1 • ドメイン:GGNetwork • 別名:dpuser Copyright © 2024 HeatWavejp All Rights Reserved.

36.

データ連携の構築手順㉙ データをターゲット・データベースに届ける ソースDB Copyright © 2024 HeatWavejp All Rights Reserved. ターゲットDB

37.

データ連携の構築手順㉚ 初期ロード用のReplicatの作成(OCI GoldenGate ー MySQL HeatWave) 1. HeatWave用のデプロイメントコンソール画面に移動し、ナビゲーションメニューから「構成」を選択し、 「接続」ボタンをクリックして、MySQL HeatWaveに接続します。 ※接続できない場合は、ggadminユーザのパスワードが一致していない可能性があります 2. 接続に成功すると、チェックポイント表が追加できるようになります。以下の項目を入力して作成します。 • チェックポイント表名: SRC_OCIGGLL.CHECKTABLE Copyright © 2024 HeatWavejp All Rights Reserved.

38.

データ連携の構築手順㉛ 初期ロード用のReplicatの作成(OCI GoldenGate ー MySQL HeatWave) 3. ナビゲーションメニューから「概要」を選択し、「+」ボタンから以下の項目を入力しReplicatを追加します。 • プロセス名:RIL • 資格認証ドメイン:OracleGoldenGate • 資格証明別名:trgmysqlhw • トレイル名:I1 • チェックポイント表:SRC_OCIGGLL.CHECKTABLE • パラメーター・ファイル:最後の行に「MAP SRC_OCIGGLL.*, TARGET SRC_OCIGGLL.*;」を追加 Copyright © 2024 HeatWavejp All Rights Reserved.

39.

データ連携の構築手順㉜ 初期ロード用のReplicatの作成(OCI GoldenGate ー MySQL HeatWave) 4. 配布パスが通常通りに動いていれば、初期ロード用のデータがターゲットDBに挿入されます。 Replicat(RIL)の「アクション」を選択後、「詳細」を選択、「統計」をクリックします。 ソースDBからターゲットDBのテーブルにデータが挿入されたことが確認できます。 Copyright © 2024 HeatWavejp All Rights Reserved.

40.

データ連携の構築手順㉝ 初期ロード用のReplicatの作成(OCI GoldenGate ー MySQL HeatWave) 5. ターゲットDBであるMySQL HeatWaveにログインし、データが挿入されていることを確認します。 >>snip<< 51行追加された! Copyright © 2024 HeatWavejp All Rights Reserved.

41.

データ連携の構築手順㉞ 変更用配布パス ソースDB Copyright © 2024 HeatWavejp All Rights Reserved. ターゲットDB

42.

データ連携の構築手順㉟ 変更用の配布パスの作成(OCI GoldenGate ー ADB) 1. ADBのデプロイメントコンソールから「分散サービス」を選択し、 右上の 「+」ボタンから以下の項目を入力し配布パスを作成します。 • 配布パス名:dpcdcext • ソース:「CDCEXT」を選択し、下の段に「C1」と入力 • ターゲット認証方式:ユーザID別名 • ターゲット:wws • ターゲットホスト:HeatWave用のデプロイメントの詳細にあるURLを入力 ※ https:// 以降で、末尾のスラッシュなしで入力する必要があります Copyright © 2024 HeatWavejp All Rights Reserved.

43.

データ連携の構築手順㊱ 変更用の配布パスの作成(OCI GoldenGate ー ADB) 1. (続き) • ポート番号:443 • トレイン名:C1 • ドメイン:GGSNetwork • 別名:dpuser 変更用配布パス 初期ロード用配布パス Copyright © 2024 HeatWavejp All Rights Reserved.

44.

データ連携の構築手順㊲ 変更用Replicat ソースDB Copyright © 2024 HeatWavejp All Rights Reserved. ターゲットDB

45.

データ連携の構築手順㊳ 変更用のReplicatの作成(OCI GoldenGate ー MySQL HeatWave) 1. HeatWaveのデプロイメントコンソールに移動し、ナビゲーションメニューから「概要」を選択し、 「+」ボタンから以下の項目を入力しReplicatを追加します。 • プロセス名: RCDC • 資格認証ドメイン:OracleGoldenGate • 資格証明別名:trgmysqlhw • トレイル名:C1 • チェックポイント表:SRC_OCIGGLL.CHECKTABLE • パラメーター・ファイル: 最後の行に「MAP SRC_OCIGGLL.*, TARGET SRC_OCIGGLL.*;」を追加 Copyright © 2024 HeatWavejp All Rights Reserved.

46.

データ連携の構築手順㊴ 変更用のReplicatの作成(OCI GoldenGate ー MySQL HeatWave) 2. 変更用のReplicat(RCDC)が追加されていることを確認します。 変更用Replicat 初期ロード用Replicat Copyright © 2024 HeatWavejp All Rights Reserved.

47.

データ連携の構築手順㊵ データの挿入 ソースDB Copyright © 2024 HeatWavejp All Rights Reserved. 挿入の確認 ターゲットDB

48.

データ連携の構築手順㊶ 変更用のデータの追加(ソースDB ー ADB) 1. Database ActionsなどでADBに接続し、 SRC_CITYテーブルに10行のレコードを挿入します。 Copyright © 2024 HeatWavejp All Rights Reserved.

49.

データ連携の構築手順㊷ 変更用のデータの追加(OCI GoldenGate ー MySQL HeatWave) 1. HeatWaveのデプロイメントコンソールに移動し、 Replicat(RCDC)の「アクション」を選択後、 「詳細」を選択、「統計」をクリックします。 2. 10行分のデータが挿入されたことが確認します。 Copyright © 2024 HeatWavejp All Rights Reserved.

50.

データ連携の構築手順㊸ 変更用のデータの追加(ターゲットDB ー MySQL HeatWave) 1. ターゲットDBであるMySQL HeatWaveにログインし、データが挿入されていることを確認します。 >>snip<< 61行になっている! Copyright © 2024 HeatWavejp All Rights Reserved.

51.

補足 OCI GoldenGate に 23aiバージョンがリリース • AIワークロードの分散ベクトルのサポート、最新のOracle Database 23aiのサポート • ユーザーインターフェースの刷新 • 可観測性と診断の向上 etc... 参考:https://blogs.oracle.com/oracle4engineer/post/ja-ann-goldengate-23ai Copyright © 2024 HeatWavejp All Rights Reserved.

52.

参考 ◼ Replicate data from OCI MySQL Database to Autonomous Data Warehouse https://docs.oracle.com/en/cloud/paas/goldengate-service/amyql/index.html ◼ Oracle Cloud Infrastructure GoldenGate - Manage connections https://docs.oracle.com/en/cloud/paas/goldengate-service/mcjzr/ ◼ OCI GoldenGateを使ってAutonomous DatabaseからMySQL HeatWaveへのデータ連携を試してみた https://qiita.com/ninomiyatsu/items/b0d83446dac181f85fde ◼ OCI GoldenGate(OCI GG) で BaseDB 19c から ADW-S にレプリケーションしてみる。 https://qiita.com/ora_gonsuke777/items/2116a8f92349fe6c3330 ◼ OCI-GoldenGateの分散パスを利用してOracle Databaseのリージョン間レプリケーションを実装する https://qiita.com/ykuma614/items/9a82986c1fe97182104d ◼ Oracle Database Technology Night #54 Oracle Databaseのアップグレードとクラウド移行実践 GoldenGateとReal Application Testingの活用 Oracle Database Technology Night #54 Oracle Databaseのアップグレードとクラウド移行実践 Copyright © 2024 HeatWavejp All Rights Reserved.

53.

まとめ ◼ OCI GoldenGate は、OCI上のマネージド・サービスであり、複数のデータソース/ターゲット 間で低遅延のデータ・レプリケーションを実現できる ◼ Autonomous DatabaseからHeatWaveへのデータ連携では、GoldenGateのExtractと Replicatプロセスを組み合わせて行う ◼ 具体的な手順としては、まずAutonomous Database側でExtractを設定し、次に HeatWave側でReplicatを設定する ◼ 初期ロード用と変更用に分けて構築することで、スムーズなデータレプリケーションが可能になる ◼ OCI GoldenGate 23ai がリリース Copyright © 2024 HeatWavejp All Rights Reserved.

54.

Copyright © 2024 HeatWavejp All Rights Reserved.