1. 環境要件
- ソースデータベースに Oracle Database 11g がインストールされていること。Oracle GoldenGate(OGG)用 DataHub プラグインの現在のバージョンは、Oracle Database 11g のみをサポートしています。
- ソースデータベースに OGG V12.2.X がインストールされていること。OGG V12.2.0.2 をインストールすることをお勧めします。
- デスティネーションデータベースに OGG アプリケーションアダプター V12.2.X がインストールされていること。OGG アプリケーションアダプター V12.2.0.1 をインストールすることをお勧めします。
- Java Development Kit(JDK)V1.8 がインストールされていること。
2. インストール
以下のパートでは、Oracle の構成方法、および OGG のインストールと構成方法について説明します。このトピックで使用されているパラメーター構成は、あくまでも参考です。実際の業務運用では、O&M エンジニアが提供する構成を使用してください。
関連するインストールパッケージは、このトピックの最後にダウンロードできます。
- OGG
- OGG アプリケーションアダプター
- OGG 用 DataHub エージェント
ソースデータベースでの OGG の構成
1. ソースデータベースでの Oracle の構成
注: 次の構成のいずれかが見落とされた場合、更新操作の前にパラメーターが未指定のままになる可能性があります。 データベース管理者として SQL*Plus を起動するには、次のコマンドを実行します: sqlplus / as sysdba。次に、以下の構成を完了します。
# 表領域を作成します。
create tablespace ATMV datafile '/home/oracle/u01/app/oracle/oradata/uprr/ATMV.dbf' size 100m autoextend on next 50m maxsize unlimited;
# ogg_test という名前のユーザーを作成します。パスワードも ogg_test に設定します。
create user ogg_test identified by ogg_test default tablespace ATMV;
# 必要な権限をユーザー ogg_test に付与します。
grant connect,resource,dba to ogg_test;
# データベースでサプリメンタルロギングが有効になっているかどうかを確認します。
Select SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI, SUPPLEMENTAL_LOG_DATA_FK, SUPPLEMENTAL_LOG_DATA_ALL from v$database;
# 結果が NO の場合は、サプリメンタルロギングを有効にします。
alter database add supplemental log data;
alter database add supplemental log data (primary key, unique,foreign key) columns;
# ロールバック
alter database drop supplemental log data (primary key, unique,foreign key) columns;
alter database drop supplemental log data;
# データベースレベルですべてのフィールドのロギングを有効にします。このロギングモードが有効になっている場合、削除操作では主キーフィールドのみがログに記録されます。他のフィールドの情報が必要な場合は、ソースデータベースの Extract プロセスで NOCOMPRESSDELETES パラメーターを設定します。
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
# 強制ロギングを有効にします。
alter database force logging;
# シーケンスのサポートを有効にします。
@sequence.sql
#
alter table sys.seq$ add supplemental log data (primary key) columns;
2. ソースデータベースへの OGG のインストール
OGG インストールパッケージをダウンロードして解凍します。次のディレクトリが生成されます。
drwxr-xr-x install
drwxrwxr-x response
-rwxr-xr-x runInstaller
drwxr-xr-x stage
response/oggcore.rsp 内の依存関係をインストールします。次のテンプレートは、OGG レスポンスファイルを示しています。
oracle.install.responseFileVersion=/oracle/install/rspfmt_ogginstall_response_schema_v12_1_2
# インストールオプション。インストールされている Oracle のバージョンを示します。
INSTALL_OPTION=ORA11g
# OGG をインストールするディレクトリ。
SOFTWARE_LOCATION=/home/oracle/u01/ggate
# インストール後に Manager プロセスを起動するかどうかを指定します。
START_MANAGER=false
# Manager プロセスのポート番号。
MANAGER_PORT=7839
# Oracle データベースのディレクトリ。
DATABASE_LOCATION=/home/oracle/u01/app/oracle/product/11.2.0/dbhome_1
# オプション。インベントリファイルを格納するディレクトリ。
INVENTORY_LOCATION=
# インベントリディレクトリの UNIX グループ。この例では、OGG は ogg_test Oracle アカウントを使用してインストールされます。必要に応じて、OGG 専用のアカウントを作成することもできます。
UNIX_GROUP_NAME=oinstall
OGG をインストールするには、次のコマンドを実行します。
runInstaller -silent -responseFile {YOUR_OGG_INSTALL_FILE_PATH}/response/oggcore.rsp
この例では、OGG は /home/oracle/u01/ggate ディレクトリにインストールされ、インストールログは /home/oracle/u01/ggate/cfgtoollogs/oui ディレクトリに保存されます。silentInstall{time}.log ファイルに次のメッセージが表示されたら、OGG のインストールは完了です。
Oracle GoldenGate Core のインストールは正常に完了しました。
/home/oracle/u01/ggate/ggsci コマンドを実行し、コマンドプロンプトで CREATE SUBDIRS と入力して、dir で始まる名前の OGG ディレクトリを作成します。OGG はソースデータベースにインストールされます。
3. ソースデータベースでの Manager プロセスの構成
ここでは、Oracle GoldenGate Software Command Interface(GGSCI)を使用してソースデータベースの Manager プロセスを構成する方法について説明します。edit params mgr コマンドを実行して、Manager プロセスを構成できます。次のコードは構成を示しています。
PORT 7839
DYNAMICPORTLIST 7840-7849
USERID ogg_test, PASSWORD ogg_test
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 7
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7Manager プロセスを構成した後、view params mgr コマンドを実行して構成を確認できます。
start mgr コマンドを実行して、Manager プロセスを起動します。
info mgr コマンドを実行して、Manager プロセスのステータスを表示します。
4. ソースデータベースでの Extract プロセスの構成
Extract プロセスを構成するには、構成ファイルを作成します。カスタムファイル名を指定できます。この例では、ファイル名は dhext です。GGSCI で、edit params dhext コマンドを実行して Extract 構成ファイルを編集します。
EXTRACT dhext
SETENV (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
DBOPTIONS ALLOWUNUSEDCOLUMN
USERID ogg_test, PASSWORD ogg_test
REPORTCOUNT EVERY 1 MINUTES, RATE
NUMFILES 5000
DISCARDFILE ./dirrpt/ext_test.dsc, APPEND, MEGABYTES 100
DISCARDROLLOVER AT 2:00
WARNLONGTRANS 2h, CHECKINTERVAL 3m
EXTTRAIL ./dirdat/st, MEGABYTES 200
DDL &
INCLUDE MAPPED OBJTYPE 'table' &
INCLUDE MAPPED OBJTYPE 'index' &
INCLUDE MAPPED OBJTYPE 'SEQUENCE' &
EXCLUDE OPTYPE COMMENT
DDLOPTIONS NOCROSSRENAME REPORT
TABLE OGG_TEST.*,tokens (TKN-ROWID=@GETENV('RECORD','rowid'));
SEQUENCE OGG_TEST.*;
GETUPDATEBEFORES注:TABLE OGG_TEST.*,tokens (TKN-ROWID=@GETENV('RECORD','rowid')); コマンドを使用すると、ソーステーブルの行 ID を取得できます。行 ID を取得する必要がない場合は、コマンドの rowid を TABLE OGG_TEST.*; に置き換えます。
Extract プロセスを追加して起動します。
# Extract プロセスを追加します。
add extract dhext,tranlog, begin now
# 各証跡の最大ファイルサイズは 200 MB です。
add exttrail ./dirdat/st,extract dhext, megabytes 200
# Extract プロセスを起動します。
start dhextExtract プロセスが起動すると、ggate/dirdat ディレクトリに保存されているファイル内のデータベースの変更内容を表示できます。
5. DEFGEN パラメーターファイルの作成
OGG V12.2.X 以降を使用している場合は、この手順をスキップできます。
ソースデータベースで GGSCI を起動します。GGSCI で、次のコマンドを実行して DEFGEN パラメーターファイルを作成し、デスティネーションデータベースの dirdef ディレクトリにコピーします: edit params defgen。
DEFSFILE ./dirdef/ogg_test.def
USERID ogg_test, PASSWORD ogg_test
table OGG_TEST.*;シェルで次のコマンドを実行して、ogg_test.def という名前の DEFGEN パラメーターファイルを作成します: ./defgen paramfile ./dirprm/defgen.prm。
6. ソースデータベースでのデータポンプの構成
ソースデータベースで GGSCI を起動します。GGSCI で、次のコマンドを実行してデータポンプを構成します: edit params pump。
EXTRACT pump
RMTHOST xx.xx.xx.xx, MGRPORT 7839, COMPRESS
PASSTHRU
NUMFILES 5000
RMTTRAIL ./dirdat/st
DYNAMICRESOLUTION
TABLE OGG_TEST.*;
SEQUENCE OGG_TEST.*;データポンプを追加して起動します。
# データポンプを追加します。
add extract pump,exttrailsource ./dirdat/st
# デスティネーションデータベースに証跡を追加します。各証跡の最大ファイルサイズは 200 MB です。
add rmttrail ./dirdat/st,extract pump,megabytes 200
# データポンプを起動する前に、デスティネーションデータベースの Manager プロセスが起動していることを確認してください。
start pumpデータポンプが起動すると、デスティネーションデータベースの dirdat ディレクトリに配信された証跡を表示できます。
デスティネーションデータベースでの OGG の構成
1. デスティネーションデータベースへの OGG のインストール
デスティネーションデータベースの OGG は OGG アプリケーションアダプターであり、手動でインストールする必要はありません。インストールパッケージを解凍するだけです。解凍後、GGSCI を起動し、create subdirs コマンドを入力して必要なディレクトリを作成する必要があります。create subdirs コマンドを実行すると、OGG ディレクトリに dir で始まる名前の複数のディレクトリが作成されます。
OGG V12.2.X 以降を使用していない限り、ソースデータベースで生成された DEFGEN パラメーターファイルをデスティネーションデータベースの dirdef ディレクトリにコピーします。
2. OGG 用 DataHub プラグインのインストールと構成
環境要件: JDK 1.7 以降。JAVA_HOME および LD_LIBRARY_PATH 環境変数を構成し、~/.bash_profile ファイルで構成を指定します。例:
export JAVA_HOME=/xxx/xxx
export JRE_HOME=/xxx/xxx/jrexx
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$JRE_HOME/lib/amd64:$JRE_HOME/lib/amd64/server環境変数を構成した後、datahub-ogg-plugin.tar.gz パッケージをダウンロードして解凍します。インストールディレクトリの conf サブディレクトリにある javaue.properties ファイルを変更し、{YOUR_HOME} を解凍後のパスに置き換えます。
gg.handlerlist=ggdatahub
gg.handler.ggdatahub.type=com.aliyun.odps.ogg.handler.datahub.DatahubHandler
gg.handler.ggdatahub.configureFileName={YOUR_HOME}/aliyun-datahub-ogg-plugin/conf/configure.xml
goldengate.userexit.nochkpt=false
goldengate.userexit.timestamp=utc+8
gg.classpath={YOUR_HOME}/aliyun-datahub-ogg-plugin/lib/*
gg.log.level=debug
jvm.bootoptions=-Xmx512m -Dlog4j.configuration=file:{YOUR_HOME}/datahub-ogg-plugin/conf/log4j.properties -Djava.class.path=ggjava/ggjava.jarインストールディレクトリの conf サブディレクトリにある log4j.properties ファイルを変更し、{YOUR_HOME} を解凍後のパスに置き換えます。インストールディレクトリの conf サブディレクトリにある configure.xml ファイルを、次のコードとパラメーターの説明に従って変更します。
<?xml version="1.0" encoding="UTF-8"?>
<configue>
<defaultOracleConfigure>
<!--必須。Oracle データベースシステム識別子(SID)。-->
<sid>100</sid>
<!--Oracle テーブルのスキーマ。この構成は、mappings の oracleSchema で上書きできます。これらの 2 つのパラメーターの少なくとも 1 つを指定する必要があります。-->
<schema>ogg_test</schema>
</defaultOracleConfigure>
<defalutDatahubConfigure>
<!--必須。DataHub のエンドポイント。-->
<endPoint>YOUR_DATAHUB_ENDPOINT</endPoint>
<!--DataHub プロジェクトの名前。この構成は、mappings の datahubProject で上書きできます。これらの 2 つのパラメーターの少なくとも 1 つを指定する必要があります。-->
<project>YOUR_DATAHUB_PROJECT</project>
<!--DataHub にアクセスするための AccessKey ID。この構成は、mappings の datahubAccessId で上書きできます。これらの 2 つのパラメーターの少なくとも 1 つを指定する必要があります。-->
<accessId>YOUR_DATAHUB_ACCESS_ID</accessId>
<!--DataHub にアクセスするための AccessKey シークレット。この構成は、mappings の datahubAccessKey で上書きできます。これらの 2 つのパラメーターの少なくとも 1 つを指定する必要があります。-->
<accessKey>YOUR_DATAHUB_ACCESS_KEY</accessKey>
<!--データ更新タイプを示す DataHub のフィールド。この構成は、mappings の ctypeColumn で上書きできます。-->
<ctypeColumn>optype</ctypeColumn>
<!--データ更新時刻を示す DataHub のフィールド。この構成は、mappings の ctimeColumn で上書きできます。-->
<ctimeColumn>readtime</ctimeColumn>
<!--更新されたレコードのシーケンス番号を示す DataHub のフィールド。この構成は、mappings の cidColumn で上書きできます。シーケンス番号は、レコードが更新されるにつれて増加します。複数のシーケンス番号は連続していない場合があります。-->
<cidColumn>record_id</cidColumn>
</defalutDatahubConfigure>
<!--エラー処理方法。デフォルトでは、エラーが発生した場合、システムはエラーを無視して操作を続行するか、操作を繰り返し再試行します。-->
<!--オプション。一度に管理できるレコードの最大数。デフォルト値: 1000。-->
<batchSize>1000</batchSize>
<!--オプション。タイムスタンプを変換する形式。デフォルト値: yyyy-MM-dd HH:mm:ss。-->
<defaultDateFormat>yyyy-MM-dd HH:mm:ss</defaultDateFormat>
<!--オプション。システムがダーティレコードを無視するかどうかを指定します。デフォルト値: false。-->
<dirtyDataContinue>true</dirtyDataContinue>
<!--オプション。ダーティレコードを格納するファイルの名前。デフォルト値: datahub_ogg_plugin.dirty。-->
<dirtyDataFile>datahub_ogg_plugin.dirty</dirtyDataFile>
<!--オプション ダーティレコードを格納するファイルの最大サイズ。単位: MB。デフォルト値: 500。-->
<dirtyDataFileMaxSize>200</dirtyDataFileMaxSize>
<!--オプション。許可される最大再試行回数。-1 の値は、無制限の再試行を示します。0 の値は、再試行なしを示します。0 より大きい値は、指定された回数の再試行を示します。-->
<retryTimes>0</retryTimes>
<!--オプション。データの書き込み先となる優先度の高いシャードの ID。例: 0,1。-->
<shardId>0,1</shardId>
<!--オプション。2 回の連続する再試行の間隔。単位: ミリ秒。デフォルト値: 3000。-->
<retryInterval>4000</retryInterval>
<!--オプション。チェックポイントファイルの名前。デフォルト値: datahub_ogg_plugin.chk。-->
<checkPointFileName>datahub_ogg_plugin.chk</checkPointFileName>
<mappings>
<mapping>
<!--Oracle テーブルのスキーマ。このパラメーターについては、前のパートで説明しています。-->
<oracleSchema></oracleSchema>
<!--必須。Oracle テーブルの名前。-->
<oracleTable>t_person</oracleTable>
<!--DataHub プロジェクトの名前。このパラメーターについては、前のパートで説明しています。-->
<datahubProject></datahubProject>
<!--必須。DataHub トピックの名前。-->
<datahubTopic>t_person</datahubTopic>
<!--オプション。ソーステーブルの行を示す DataHub のフィールド。-->
<rowIdColumn></rowIdColumn>
<ctypeColumn></ctypeColumn>
<ctimeColumn></ctimeColumn>
<cidColumn></cidColumn>
<columnMapping>
<!--
src: 必須。Oracle テーブルのフィールド名。
dest: 必須。DataHub トピックのフィールド名。
destOld: オプション。更新前のデータを格納する DataHub トピックフィールド。
isShardColumn: オプション。ハッシュキー値に基づいてシャード ID を生成するかどうかを指定します。この構成は、shardId パラメーターで上書きできます。デフォルト値: false。
isDateFormat: タイムスタンプを dateFormat パラメーターで指定された形式に変換するかどうかを指定します。デフォルト値: true。このパラメーターを false に設定した場合、ソースデータベースのタイムスタンプのデータ型は LONG である必要があります。
dateFormat: タイムスタンプを変換する形式。このパラメーターを空のままにすると、デフォルトの形式が使用されます。
-->
<column src="id" dest="id" isShardColumn="true" isDateFormat="false" dateFormat="yyyy-MM-dd HH:mm:ss"/>
<column src="name" dest="name" isShardColumn="true"/>
<column src="age" dest="age"/>
<column src="address" dest="address"/>
<column src="comments" dest="comments"/>
<column src="sex" dest="sex"/>
<column src="temp" dest="temp" destOld="temp1"/>
</columnMapping>
</mapping>
</mappings>
</configue>
3. デスティネーションデータベースでの Manager プロセスの構成
edit params mgr コマンドを実行して、Manager プロセスを構成します。
PORT 7839
DYNAMICPORTLIST 7840-7849
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 7
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7start mgr コマンドを実行して、Manager プロセスを起動します。
4. デスティネーションデータベースでの Extract プロセスの構成
GGSCI で、edit params dhwriter コマンドを実行して Extract プロセスを構成します。
extract dhwriter
getEnv (JAVA_HOME)
getEnv (LD_LIBRARY_PATH)
getEnv (PATH)
CUSEREXIT ./libggjava_ue.so CUSEREXIT PASSTHRU INCLUDEUPDATEBEFORES, PARAMS "{YOUR_HOME}/datahub-ogg-plugin/conf/javaue.properties"
sourcedefs ./dirdef/ogg_test.def
table OGG_TEST.*;Extract プロセスを追加して起動します。
# Extract プロセスを追加します。
add extract dhwriter, exttrailsource ./dirdat/st
# Extract プロセスを起動します。
start dhwriter3. サンプルログとサンプルデータ
サンプルログ
プラグインはソースデータベースには関与しません。デスティネーションデータベースのログは、次の 2 つのタイプに分類できます。
- DataHub プラグインログ: デフォルトでは、各 Replicat プロセスはプラグインディレクトリの log サブディレクトリにログを持ち、ログ名は datahub-ogg-plugin.log です。このタイプのログに基づいて、プラグインに関連する問題を解決できます。
- OGG 関連ログ: デフォルトでは、各 Replicat プロセスは dirrpt ディレクトリにログを持ちます。ログ名は processName.rpt です。たとえば、DataHub ライターのログ名は DHWRITER.rpt です。このタイプのログに基づいて、OGG に関連する問題を解決できます。
サンプルデータ
サンプルデータが DataHub に書き込まれると、DataHub プラグインログに次のレコードが生成されます。
2020-12-01 11:29:30.000461 [record_writer-1-thread-1] INFO ShardWriter - Write DataHub success, table: orders, topic: orders_new, shard: 0, recordNum: 1, rt: 3DataHub コンソール] で次のサンプルレコードを表示できます。
Shard ID System Time oid (STRING) num (STRING) pid (STRING) bak (STRING) ctype (STRING) ctime (STRING) cid (STRING) rowid (STRING)
0 December 1, 2020 11:29:30 1 3 2 zh I 2020-12-01 03:29:24.000074 16067933700000 AAAWwyAAGAAABufAAC