1.はじめに
1-1.概要など
SQ Server のトランザクションをGoldenGateを使ってキャプチャをしてみます。
キャプチャして、ローカルトレールが出力されるまでの手順となります。
1-2.環境
- OS : Windows Server 2019 評価版
- DB : MS SQL Server 2019 評価版
- GG : 19.1.0.0.220831
1-3.参考資料
インストール手順
GG設定手順
バイナリダウンロード
パッチダウンロード
- Primary Note for Oracle GoldenGate Core Product Patch Sets (Doc ID 1645495.1)
- Oracle GoldenGate 19.1.0.0.220831 Patch Set Availability (Doc ID 2904554.1)
Visual C++ 2013 再配布パッケージダウンロード(GGで必要)
2.GoldenGateインストール
2-1. バイナリの入手
このリンク先から、Oracle GoldenGate 19.1.0.0.200204 for SQL Server on Windows (64 bit) をダウンロードする。
ファイル名は「19100200204_ggs_Windows_x64_MSSQL_64bit_CDC.zip」
2-2. パッチの入手
Oracle GoldenGate 19.1.0.0.220831 Patch Set Availability (Doc ID 2904554.1)
こちらのNoteを参考に、19.1.0.0.220831 のパッチをダウンロードする。
ファイル名は「p34553300_19100220831_MSWIN-x86-64.zip」
2-3. GGバイナリインストール
任意のディレクトリに、「19100200204_ggs_Windows_x64_MSSQL_64bit_CDC.zip」を解凍する。
2-4. パッチ適用
GGバイナリをインストールしたディレクトリに、パッチ「p34553300_19100220831_MSWIN-x86-64.zip」を解凍した中身を上書きする。
インストールしてパッチを上書きした状態。( C:\app\ogg\gghome1 へインストール )
2-5. ggsci 起動
インストールディレクトリ内の ggsci.exe をダブルクリックして起動。
以下のように起動すれば成功。
ただし、以下のNoteにあるように、VisualC++ 2013 再配布パッケージがインストールされていない場合、「MSVCR120.dllが見つからない」と表示されて起動しません。
GGSCI Fails To Run On Windows Server 2016 With Missing MSVCR120.dll Error (Doc ID 2584593.1)
こちらから、再配布パッケージをDLして、対象のWindowsServerへインストールします。
ファイル名は「vcredist_x64.exe」
2-6. ディレクトリ作成
VisualC++2013再配布パッケージをインストールし ggsci が起動できるようになったら、「CREATE SUBDIRS」コマンドを実行して、サブディレクトリを作成します。
GGSCI (win2019) 2> CREATE SUBDIRS
Creating subdirectories under current directory C:\app\ogg\gghome1
Parameter file C:\app\ogg\gghome1\dirprm: created.
Report file C:\app\ogg\gghome1\dirrpt: created.
Checkpoint file C:\app\ogg\gghome1\dirchk: created.
Process status files C:\app\ogg\gghome1\dirpcs: created.
SQL script files C:\app\ogg\gghome1\dirsql: created.
Database definitions files C:\app\ogg\gghome1\dirdef: created.
Extract data files C:\app\ogg\gghome1\dirdat: created.
Temporary files C:\app\ogg\gghome1\dirtmp: created.
Credential store files C:\app\ogg\gghome1\dircrd: created.
Masterkey wallet files C:\app\ogg\gghome1\dirwlt: created.
Dump files C:\app\ogg\gghome1\dirdmp: created.
GGSCI (win2019) 3>
3.SQL Server 準備
3-1. 認証設定
デフォルトでは、SQL Server 2019 では Windows認証だけが有効になっているため、SQL Server 認証も有効にする。
こちらを参考にさせて頂いた。
SQLServer認証と、Windows認証両方のモードを選択する。
※DB再起動を求められるため、管理ツール → サービス → 「SQL Server (MSSQLSERVER)」を再起動する。
3-2. サンプルDB作成
テスト用のDBを作成する。
Database を右クリックして、New Database.. を選択。
マニュアルの 8.3.3 データベースの要件 に記載がある以下を確認(デフォルトTrueだった)
Auto Update Statisticsがデータベースに対して有効になっていることを確認します。
OKを押下して作成すると、ツリーに testdb が追加される。
3-3. SQL Server エージェント起動
マニュアルの 8.3.2 インスタンスの要件 に以下の記載があるため、エージェントを起動する。
(Extract) Oracle GoldenGateでトランザクション・データを取得するには、ソースSQL ServerインスタンスでSQL Serverエージェントを実行している必要があり、データベースに対するSQL Server変更データ取得ジョブを実行している必要があります。データベースに対してSQL Serverトランザクション・レプリケーションも有効にしている場合は、SQL Serverログ・リーダー・エージェントを実行している必要があります。
管理ツール → サービス より、「SQL Server エージェント」を右クリック → 開始
3-4. ODBC 17 インストール
マニュアルの 8.2 その他のプログラムおよび設定 に以下の記載があるため、ODBCのインストール状況を確認
SQL ServerのためのOracle GoldenGateのプログラムおよび設定に関する情報を次に示します。>Oracle GoldenGateをインストールするオペレーティング・システム用にMicrosoft ODBC Driver 17をインストールします。
https://docs.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-2017
「プログラムと機能」を開くと、既にインストールされていたため、特に追加は不要だった。
3-5. GG用ユーザ作成
GoldenGate Capture が SQL Server に接続し、キャプチャするためのユーザを作成する。
こちら を参考にさせて頂いた。
まずは、データベース直下の Security の配下の、Logins を右クリックして、「New Login」を選択
ユーザ名は ggadmin とし、SQLServer認証を選択して、パスワードを設定。
デフォルトDBは作成した testdb とする。
Captureを登録して、かつサプリメンタルロギング設定を行うためには権限の設定が必要。
21.1.2 サプリメンタル・ロギングなどの機能を有効にするユーザー
TRANDATAを有効にするデータベース・ユーザーには、sysadmin権限が付与されている必要があります。
21.1.1 SQL ServerのExtractユーザーとReplicatユーザー
SQL Server認証を使用して接続するExtract
アカウントは、最低でもソース・データベースの固定データベース・ロールdb_ownerのメンバーであることが必要です。
DB全体のサーバロールとして、sysadmin を設定
testdb 内のロールとして、db_owner を設定
作成したユーザ ggadmin で、ManagementStudioで SQL Server 認証によりログインできることを確認
さらに、ggadminスキーマを作成する。
※ サプリメンタルロギング用のジョブやテーブルを作成するためのスキーマ
testdb 配下の、Security → Schema から、「New Schema」を選択
スキーマ名は、ユーザ名と同じ ggadmin を入力。
Owner(ユーザ名)は作成したユーザ名 ggadmin を入力。
スキーマ作成完了。
3-6. 接続用データソース作成
21.2.1 Extractのデータベース接続の構成 に、ODBCデータソースが必要と記載があるため、
Extractでは、ODBC (Open Database Connectivity)接続でソースSQL Serverデータベースに接続します。この接続を確立するには、「データ ソース (ODBC)」コントロール パネルからデータ・ソース名(DSN)を設定します。手順は、「Windowsでのデータベース接続の構成」を参照してください。
21.2.4 Windowsでのデータベース接続の構成 を参考に、データソースを作成する。
- ODBCクライアントを実行するには、「コントロール パネル」、「管理ツール」、「データソース(ODBC)」の順に選択します。
- ODBCクライアントの「ODBCデータ ソース アドミニストレータ」ダイアログ・ボックスで「システムDSN」タブを選択し、「追加」をクリックします。
上記はこの通りにすすめる。
次に、SQL Serverドライバは、ODBC Driver 17 を選択
Nameは、GG(ggsciや各プロセスのDBLOGIN)で接続する時に使うデータソース名を入力
Serverは自身のホスト名を入力
SQL Server 認証を選択して、ggadminとパスワードを入力する。
Default database は、CaptureしたいDB ( testdb ) を選択する。他はいじらず。
※ ggadmin でログインができない場合、このプルダウン表示時にエラーダイアログが表示される。
TESTS COMPLETED SUCCESSFULLY! が表示されれば成功。データソース作成は完了。
試しに ggsci でDB接続を行ってみる。
※データソース名は ogg_datasouce で設定
※パスワードは welcome1 で設定
GGSCI (win2019) 4> dblogin sourcedb ogg_datasource userid ggadmin password welcome1
2022-11-08 22:20:38 INFO OGG-03036 Database character set identified as windows-932. Locale: ja_JP.
2022-11-08 22:20:38 INFO OGG-03037 Session character set identified as windows-932.
Successfully logged into database.
GGSCI (win2019 as ggadmin@OGG_DATASOURCE) 5>
ログイン成功!
3-7. テスト用スキーマと、テーブルを作成
アプリケーション用のスキーマ・テーブルを作成する。
まずはアプリケーション用ユーザと、同じ名前のスキーマを作成する。
※ ggadmin作成時と同じ入り方
DB直下のSecurityの下の Login から、「New Login」を選択
SQLServer認証で、パスワードを設定。
サーバロールはデフォルト
testdb にチェックを入れるのを忘れないようにする。
ユーザは作成完了。
次にスキーマを作成する。
testdb 配下の、Security → Schema から、「New Schema」を選択
スキーマ名は、作成したユーザ名と同じ名前を入力。
Owner(ユーザ名)は作成したユーザ名を入力。
スキーマ作成完了。
次にサンプルテーブルを作成する。
Commands completed successfully.
と出力されれば成功。
ObjectExplorerを更新すれば、テーブルが現れる。
4.GoldenGate 用設定
4-1. GG用デフォルトスキーマの定義
以下のNoteより、デフォルトのスキーマを定義する必要がある。
ERROR OGG-05263 No GGSCHEMA Clause Was Specified In The GLOBALS File. Please Specify A GGSCHEMA (Doc ID 2317616.1)
以下のように GGSCHEMA で定義したスキーマに、GG用のプロシージャやテーブルが作成される。
22.1 CDCサプリメンタル・ロギングの有効化
ネーミング規則がschema.OracleGGTranTablesのトラッキング表を作成します。この表を使用してCDC表のトランザクション・インジケータが格納され、CDC表のトリガーが起動されたときにこの表に移入されます。表はGLOBALSファイルのGGSCHEMAパラメータにリストされたスキーマによって所有されます。
各CDC表に対して一意のフェッチ・ストアド・プロシージャを作成し、さらにExtractが機能するために必要なその他のストアド・プロシージャも作成します。ストアド・プロシージャは、GLOBALSファイルのGGSCHEMAパラメータにリストされたスキーマによって所有されます。
ソースOracle GoldenGateインストールで、GLOBALS (すべて大文字で拡張子なし)ファイルがGGSCHEMA schemanameパラメータで作成されていることを確認します。ソース・データベースで使用されているスキーマ名(CREATE SCHEMA schemaname)が作成されていることを確認します。このスキーマは、データベースで作成される後続のすべてのOracle GoldenGateコンポーネントで使用されるため、Oracle GoldenGateのみで使用される一意のスキーマ(‘ogg’など)を作成することをお薦めしますSQL Serverスキーマcdcは使用しないで、Oracle GoldenGateに固有の新しいスキーマを作成することをお薦めします。
定義用のGLOBALSファイルを作成する。
GGインストールフォルダ内に、「GLOBALS」ファイルを作成し、以下を記述する。
GGSCHEMA ggadmin
保存してメモ帳を閉じる。
4-2. サプリメンタルロギングの状況事前確認
キャプチャ対象テーブルに対して、サプリメンタルロギングを有効化する。
appluser.appltest テーブルの、現状の確認を行う。
GGSCI (win2019) 1> dblogin sourcedb ogg_datasource userid ggadmin password welcome1
2022-11-08 22:28:40 INFO OGG-03036 Database character set identified as windows-932. Locale: ja_JP.
2022-11-08 22:28:40 INFO OGG-03037 Session character set identified as windows-932.
Successfully logged into database.
GGSCI (win2019 as ggadmin@OGG_DATASOURCE) 19> info trandata appluser.appltest
2022-11-10 00:25:18 INFO OGG-25170 The following OGG CDC object(s) is missing for table appluser.appltest: CDC Table, CDC Capture Instance, OGG CDC Trigger, OGG CDC Fetch Proc. Run ADD TRANDATA for table appluser.appltest to re-enable supplemental logging.
2022-11-10 00:25:18 INFO OGG-05297 Logging of supplemental log data is disabled for table appluser.appltest.
GGSCI (win2019 as ggadmin@OGG_DATASOURCE) 20>
現状は disabled であることが確認できた。
4-3. CDC設定
マニュアルの 22.1 CDCサプリメンタル・ロギングの有効化 に沿ってCDCを有効化する。
データベース全体で、「SQL Serverチェンジ・データ・キャプチャ(CDC)」を有効化するため、以下を実行する。
EXECUTE sys.sp_cdc_enable_db
4-4. サプリメンタルロギング
サプリメンタルロギングを有効化する。
GGSCI (win2019) 1> dblogin sourcedb ogg_datasource userid ggadmin password welcome1
2022-11-10 00:41:57 INFO OGG-03036 Database character set identified as windows-932. Locale: ja_JP.
2022-11-10 00:41:57 INFO OGG-03037 Session character set identified as windows-932.
Successfully logged into database.
GGSCI (win2019 as ggadmin@OGG_DATASOURCE) 2> add trandata appluser.appltest
Logging of supplemental log data is enabled for table appluser.appltest in filegroup PRIMARY
GGSCI (win2019 as ggadmin@OGG_DATASOURCE) 3>
4-5. CDC削除ジョブ登録
マニュアルの 22.2 CDCステージング・データのパージ より。
サプリメンタルロギングを有効化すると、CDCシステム表にレコードがたまるとのこと。
サプリメンタル・ロギングを有効にすると、Extractでトランザクションを再構成するために必要なデータが一連のSQL Server CDCシステム表に格納され、さらに、トランザクション内で操作をトラッキングするために使用されるOracle GoldenGateオブジェクトも格納されます。
さらに、CDCクリーンナップジョブが自動作成され、72時間でパージされる。
サプリメンタル・ロギングを有効にする際に、SQL Serverは自身のチェンジ・データ・キャプチャ・クリーンアップ・ジョブを作成し、デフォルトではこれを夜間に実行して、72時間より古いデータをパージします。
でも、キャプチャする前に削除される場合がある。その対処のために、バッチを実行してOGGクリンナップジョブ関連のプロシージャと表を作成する必要がある。
SQL Server CDCのクリーン・アップ・ジョブは、Extractが該当するCDCシステム表のデータを引き続き必要とする可能性があることを認識しないため、Extractがキャプチャする前にそのデータを削除してしまうことがあります。
この状況を修正するために、SQL ServerのためのOracle GoldenGateにはogg_cdc_cleanup_setup.batプログラムが含まれています。このプログラムは、Oracle GoldenGateクリーン・アップ・ジョブ関連のストアド・プロシージャと表を作成するために使用します。
~~~
Oracle GoldenGate CDCクリーンアップ・ジョブは作成時に、10分ごとに実行されるようにスケジュールされ、デフォルトの保存期間は72時間になります。ただし、保存期間に関係なく、ジョブによってExtractのリカバリ・チェックポイントのデータはパージされません。
以下の通り、サプリメンタルロギングを有効化したら、OGGクリンナップジョブを作成する必要がある。
サプリメンタル・ロギングを有効にした直後、かつExtractを起動する前に、次のステップを使用して、Oracle GoldenGate CDCクリーンアップ・ジョブおよび関連付けられたオブジェクトを作成してください。
まずは、SQLServerのクリンナップジョブを削除する。
SQL ServerエージェントからデータベースのSQL Serverのcdc.dbname_cleanupジョブを停止し、無効にします。または、次のコマンドでソース・データベースからドロップできます
EXECUTE sys.sp_cdc_drop_job 'cleanup'
次に、GoldenGateのクリンナップジョブを登録する。
ogg_cdc_cleanup_setup.batファイルを実行し、次の変数値を指定します。
Windowsの場合:
ogg_cdc_cleanup_setup.bat createJob
実行例:
> cd C:\app\ogg\gghome1
> ogg_cdc_cleanup_setup.bat createJob ggadmin welcome1 testdb win2019 ggadmin
------ こうなると成功 ------
C:\app\ogg\gghome1>ogg_cdc_cleanup_setup.bat createJob ggadmin welcome1 testdb win2019 ggadmin
Oracle GoldenGate CDC cleanup job setup script
==============================================
Command: createJob
The Oracle GoldenGate CDC Cleanup job and its relevant tables and procedures have been created.
以上でCDC関連作業は終わり。
5.GoldenGate プロセス 登録
あとは通常のGoldenGateプロセス登録のみ。
5-1. Managerプロセス作成
Manager用パラメータの編集。
GGSCI> EDIT PARAM MGR
以下を記述して保存して閉じる。
PORT 7909
5-2. Capture定義作成
ローカルトレール用ディレクトリ作成。(SQLCAP01という名前にした)
次に、パラメータ編集。
GGSCI> sh mkdir dirdat\SQLCAP01
GGSCI> sh dir dirdat\
GGSCI> EDIT PARAM SQLCAP01
Captureのパラメータは以下。(SQLCAP01という名前にした)
EXTRACT SQLCAP01
SOURCEDB ogg_datasource userid ggadmin password welcome1
EXTTRAIL C:\app\ogg\gghome1\dirdat\SQLCAP01\lt
TABLE TESTTABLE;
保存して閉じる。
5-3. Capture登録
GGSCI> dblogin sourcedb ogg_datasource userid ggadmin password welcome1
GGSCI> add extract SQLCAP01, tranlog, begin now
GGSCI> add exttrail C:\app\ogg\gghome1\dirdat\SQLCAP01\lt, extract SQLCAP01
5-4. プロセス起動
Manager起動
GGSCI> info all
GGSCI> start mgr
すると、Windows版ではフォアグラウンドの別ウインドウで起動する。。。
マニュアルの WindowsサービスとしてのManagerのインストール のあたりを参考に、サービス化することで回避はできると思うが、未検証。
Capture起動
GGSCI> start Sqlcap01
Captureも、別ウインドウで起動。
問題がある場合は、すぐにウインドウが終了する。
その場合は、ggserr.log を見て対処となる。
6.確認
Captureが成功すると、ローカルトレールファイルのサイズが増加する(はず)
※本来なら、Datapumpを作成して、トレールを転送し、Replicatで適用してデータ同期を確認すべきだが、今後検証を行う。