Oracle 11 GR 2同期データがKAFKAに入る
Oracle 11 G R 2同期データがKAFKAに入る
ダウンロード
最新版
http://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html
古いバージョン
https://edelivery.oracle.com/osdc/faces/SoftwareDelivery
Oracleでは対応バージョンの関係がありますので、ダウンロードをご確認ください。
私が使っているのは全部12バージョンです。12バージョンはDDLの機能をサポートするのがいいです。
ソース端子Oracle設定
1インストールディレクトリを作成する
ディレクトリの作成は自分で決めます。要求はありません。
2 Oracleデータベースの設定
ここではデフォルトのOracleデータベースは正常に使用されています。Oracleデータベースのインストールは含まれていません。
2.1アーカイブモードを起動する
OGGは補助ログなどに基づいてリアルタイムで転送するため、関連ログを開いてトランザクション内容を確保し、次のコマンドでこの状態を確認する必要がある。
2.3コピーユーザの作成
実際には現在のユーザーを使ってコピーしてもいいです。状況に応じて自分で考えて、単独のユーザーを使う目的は管理しやすく、業務に影響はありません。
2.5.1グローバル変数の設定 PORT:サービス傍受ポートを指定します。ここでは7839を例にとって、デフォルトポートは7809 です。 DYNAMICPORTLIST:ダイナミックポート:最大256個の利用可能なポートのダイナミックリストが作成できます。指定されたポートが利用できない場合、管理プロセスはリストから利用可能なポートを選択します。ソースとターゲットセグメントのCollector、Replicat、GGSCIプロセス通信もこれらのポートを使用します。 COMMENT:コメント行は、代わりにーを使ってもいいです。 AUTOSTTART:管理プロセスの起動時に自動的に起動するプロセスを指定します。 AUTORESTART:自動再起動パラメータ設定:ここでは3分ごとにすべてのEXTRACTプロセスを再起動しようとするという設定で、全部で5回試みます。 PURGEOLDEXTRACT S:定期的にtrilファイルを整理する設定:ここに設定して3日間を超えるtrilファイルを削除することを示します。 LAGREPORT、LAGINFO、LAGCRITICAL: は、データ遅延を定義する警報機構を設定しています。ここではMGRプロセスが1時間ごとにEXTRACTをチェックする遅延状況を設定しています。30分を超えると、遅延を情報としてエラーログに記録し、45分以上遅延したら、警告としてエラーログに書き込みます。 2.5.3設定抽出プロセス
注:
1 OGG-01755問題を解決する:
注:12以降の新しいバージョンはこのステップをスキップできます。実行する必要はありません。
3ターゲット端子(kafka)配置
3.1関連ディレクトリを作成する
//app/ogg/kafka/gsci:error while loading shared libries:libjvm.so:cannot open shared oject file:No such file or directory
rootアカウントに切り替え
3.3コンフィギュレーションマネージャmgr
ダウンロード
最新版
http://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html
古いバージョン
https://edelivery.oracle.com/osdc/faces/SoftwareDelivery
Oracleでは対応バージョンの関係がありますので、ダウンロードをご確認ください。
私が使っているのは全部12バージョンです。12バージョンはDDLの機能をサポートするのがいいです。
ソース端子Oracle設定
1インストールディレクトリを作成する
ディレクトリの作成は自分で決めます。要求はありません。
mkdir -p /app/ogg/oracle
mkdir -p /app/ogg/oracle/trails
unzip V975837-01.zip # , ,
ls
OGG 12は自動的にインストールできますので、以下に応答ファイルを作成します。cd fbo_ggs_Linux_x64_shiphome/Disk1/response/
vi oggcore.rsp
INSTALL_OPTION=ORA11g # 11G 12C
SOFTWARE_LOCATION=/app/ogg/oracle #
su - oracle
./runInstaller -silent -nowait -responseFile /usr/MyWorkSpace/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp
注:1私は同じマシンにインストールしてテストを行いますので、環境変数が設定されていません。衝突を減らすために。2 Oracleデータベースの設定
ここではデフォルトのOracleデータベースは正常に使用されています。Oracleデータベースのインストールは含まれていません。
2.1アーカイブモードを起動する
su - oracle
sqlplus / as sysdba
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 447400
Next log sequence to archive 447404
Current log sequence 447404
shutdown immediate #
startup mount # ,
alter database archivelog; #
alter database open; #
2.2 Oracleオープンログ関連OGGは補助ログなどに基づいてリアルタイムで転送するため、関連ログを開いてトランザクション内容を確保し、次のコマンドでこの状態を確認する必要がある。
sqlplus OGG/OGG as sysdba
select force_logging, supplemental_log_data_min from v$database;
#
alter database force logging;
alter database add supplemental log data;
alter database add supplemental log data (primary key) columns;
alter database add supplemental log data (unique) columns;
-- , :
alter database add supplemental log data (primary key,unique,foreign key) columns;
@marker_setup.sql;
@ddl_setup.sql;
@role_setup.sql;
GRANT GGS_GGSUSER_ROLE TO OGG
@ddl_enable.sql;
# , oracle
cd /data2/app/oracle/product/11.4.0/db_1/rdbms/admin
sqlplus / as sysdba
@dbmspool.sql
@ddl_pin OGG
注:上記のスクリプトを実行する時、まず他のDDL文がないことを保証し、次にOGGのインストールディレクトリに入って実行することを保証します。そうでなければ、実行時にカードが死ぬことがあります。2.3コピーユーザの作成
実際には現在のユーザーを使ってコピーしてもいいです。状況に応じて自分で考えて、単独のユーザーを使う目的は管理しやすく、業務に影響はありません。
--
CREATE TABLESPACE OGG
DATAFILE
'/data2/app/oracle/datafile/OGG'SIZE 512M AUTOEXTEND ON NEXT 512M MAXSIZE UNLIMITED
SEGMENT SPACE MANAGEMENT AUTO;
--
CREATE TEMPORARY TABLESPACE OGGTEMP
TEMPFILE
'/data2/app/oracle/datafile/OGGTEMP' SIZE 512M AUTOEXTEND ON NEXT 512M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;
--
create user OGG
identified by OGG
default tablespace OGG
temporary tablespace OGGTEMP;
-- , DBA
grant dba to ogg;
grant create table,create sequence to goldengate;
2.4初期化OGGsu - oracle
/app/ogg/oracle/ggsci
GGSCI (dataalydb) 1> create subdirs
Creating subdirectories under current directory /app/ogg/oracle
Parameter files /app/ogg/oracle/dirprm: already exists
Report files /app/ogg/oracle/dirrpt: created
Checkpoint files /app/ogg/oracle/dirchk: created
Process status files /app/ogg/oracle/dirpcs: created
SQL script files /app/ogg/oracle/dirsql: created
Database definitions files /app/ogg/oracle/dirdef: created
Extract data files /app/ogg/oracle/dirdat: created
Temporary files /app/ogg/oracle/dirtmp: created
Stdout files /app/ogg/oracle/dirout: created
2.5 OGGソースの設定プロセス2.5.1グローバル変数の設定
GGSCI (dataalydb) 3> dblogin userid OGG password OGG;
Successfully logged into database.
GGSCI (dataalydb) 4> edit param ./globals
oggschema ogg
2.5.2プロファイルマネージャmgrGGSCI (dataalydb) 5> edit param mgr
PORT 7809
PURGEOLDEXTRACTS /app/ogg/oracle/trails/w1*, USECHECKPOINTS, MINKEEPFILES 10
AUTORESTART ER *, RETRIES 3, WAITMINUTES 5
PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 5, FREQUENCYMINUTES 30
PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 5, FREQUENCYMINUTES 30
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
MANAGERプロセスパラメータ構成説明:REGISTER EXTRACT EXTND DATABASE
add extract extnd,INTEGRATED TRANLOG,begin now
add exttrail ./dirdat/nd,extract extnd,megabytes 100
-- Megabytes: , 100M。
edit params extnd
EXTRACT extnd
SETENV (NLS_LANG = "SIMPLIFIED CHINESE_CHINA.AL32UTF8")
SETENV (ORACLE_HOME = "/data2/app/oracle/product/11.4.0/db_1")
SETENV (ORACLE_SID = "dataaly")
USERID OGG, PASSWORD OGG
EXTTRAIL ./dirdat/nd
DISCARDFILE ./dirdat/extnd.dsc,APPEND,MEGABYTES 5
TRANLOGOPTIONS ALTARCHIVEDLOGFORMAT %t_%s_%r.dbf
DDL INCLUDE ALL
DDLOPTIONS ADDTRANDATA
GETUPDATEBEFORES
FETCHOPTIONS, USESNAPSHOT, NOUSELATESTVERSION, MISSINGROW REPORT
STATOPTIONS REPORTFETCH
WARNLONGTRANS 1H, CHECKINTERVAL 5M
TABLE DATAALY.*;
SQLPREDICATE「where ename=Gavin」注:
1 OGG-01755問題を解決する:
2020-05-20 20:05:33 ERROR OGG-01755 Cannot register or unregister EXTRACT EXTND because of the following SQL error: OCI Error 26,947. See Extract user privileges in the Oracle GoldenGate for Oracle Installation and Setup Guide.
2 Oracle GoldenGate Capture for Oracleを解決します。extnd.prm:Patch 1703189 is required on your Oracle mining database for trolフォーマットフォーマットRELEASE 12.2 or later.cd /app/ogg/oracle/
sqlplus / as sysdba
@prvtlmpg.plb
# OGG
OGG
3 OCI Errer 26,947はORA-26947で、11.2.2.4バージョンのORACLEデータベースです。OGGを使うにはenable able auを設定する必要があります。goldengate_replicationパラメータはTRUEで、これも11.2.04バージョンのORACLEデータベースに追加されたパラメータです。ORACLEデータベースとOGG結合はますます緊密になりました。alter system set enable_goldengate_replication=true;
2.5.4転送プロセスを追加add extract dpend, exttrailsource ./dirdat/nd, begin now
add rmttrail ./dirdat/nd, extract dpend, megabytes 100
edit params dpend
EXTRACT dpend
SETENV (NLS_LANG = "SIMPLIFIED CHINESE_CHINA.AL32UTF8")
USERID OGG, PASSWORD OGG
DDL INCLUDE ALL
DDLOPTIONS ADDTRANDATA
RMTHOST 10.0.9.19, MGRPORT 9876
RMTTRAIL ./dirdat/nd
DISCARDFILE ./dirdat/dpend.dsc,APPEND,MEGABYTES 5
TABLE DATAALY.*;
2.2.5 defineファイルを配置するGGSCI (dataalydb) 7> edit params dataalydef
defsfile ./dirdef/dataalydef
userid OGG,password OGG
TABLE DATAALY.*;
OGGディレクトリに切り替えたら下記の命令を実行します。cd /app/ogg/oracle/
./defgen paramfile dirprm/dataalydef.prm
作成したファイルは、Ggインストールディレクトリの下でdirdef/dataalydefにコピーされ、このファイルをOGGターゲット端のdirdefディレクトリの下にコピーします。注:12以降の新しいバージョンはこのステップをスキップできます。実行する必要はありません。
3ターゲット端子(kafka)配置
3.1関連ディレクトリを作成する
mkdir -p /app/ogg/kafka/
cp /app/OGG_BigData_Linux_x64_12.3.2.1.1.zip /app/ogg/kafka/
chown -R oracle:oinstall /app/ogg/oracle
unzip OGG_BigData_Linux_x64_12.3.2.1.1.zip
[oracle@dataalydb kafka]$ ls
OGGBD-12.3.2.1-README.txt OGG_BigData_Linux_x64_12.3.2.1.1.tar
OGG_BigData_12.3.2.1.1_Release_Notes.pdf OGG_BigData_Linux_x64_12.3.2.1.zip
tar -xvf OGG_BigData_Linux_x64_12.3.2.1.1.tar
3.2 OGGを初期化するuseradd -u 80 hadoop
chown -R hadoop:hadoop /app/ogg/kafka/
su - hadoop
vi .bash_profile
export JAVA_HOME=/usr/java/jdk1.8.0
export HADOOP_HOME=/app/hadoop-2.9.2
export SPARK_HOME=/app/spark
export ZOOKEEPER_HOME=/app/zookeeper/
export HIVE_HOME=/app/hive/
export SCALA_HOME=/app/scala/
export PATH=$HIVE_HOME/bin:$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$SCALA_HOME/bin:
export CLASSPATH=./:$HIVE_HOME/lib:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$SPARK_HOME/lib:$HADOOP_HOME/share/hadoop/common:$HADOOP_HOME/share/hadoop/yarn
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop/
/app/ogg/kafka/ggsci
GGSCI (dataalydb) 1> create subdirs
Creating subdirectories under current directory /app/ogg/oracle
Parameter files /app/ogg/oracle/dirprm: already exists
Report files /app/ogg/oracle/dirrpt: created
Checkpoint files /app/ogg/oracle/dirchk: created
Process status files /app/ogg/oracle/dirpcs: created
SQL script files /app/ogg/oracle/dirsql: created
Database definitions files /app/ogg/oracle/dirdef: created
Extract data files /app/ogg/oracle/dirdat: created
Temporary files /app/ogg/oracle/dirtmp: created
Stdout files /app/ogg/oracle/dirout: created
エラーを解決する//app/ogg/kafka/gsci:error while loading shared libries:libjvm.so:cannot open shared oject file:No such file or directory
rootアカウントに切り替え
find / -name libjvm.so
/usr/java/jdk1.8.0/jre/lib/amd64/server/libjvm.so
/data2/app/oracle/product/11.4.0/db_1/jdk/jre/lib/amd64/server/libjvm.so
基本的にJDKをインストールしたら必ずlibjvm.soがあります。彼は識別できません。手動で追加するしかないです。libjvm.soがないなら、自分でjdkをインストールしてください。vim /etc/ld.so.conf
/usr/java/jdk1.8.0/jre/lib/amd64/server/
ldconfig
上記の部分を誤報がなければスキップします。3.3コンフィギュレーションマネージャmgr
GGSCI (dataalydb) 5> edit param mgr
PORT 9876
PURGEOLDEXTRACTS ./trails/kfk*, USECHECKPOINTS, MINKEEPFILES 10
AUTORESTART ER *, RETRIES 3, WAITMINUTES 5
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
3.3配置replicateプロセスadd replicat rkafka,exttrail ./dirdat/nd,begin now
GGSCI (dataalydb) 5> edit params rkafka
REPLICAT rkafka
DDL INCLUDE ALL
TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka.props
REPORTCOUNT EVERY 1 MINUTES, RATE
GROUPTRANSOPS 10000
MAP DATAALY.*, TARGET DATAALY.*;
kafka.propsを編集してoggのdirprmディレクトリの下に入れます。gg.handlerlist = kafkahandler
gg.handler.kafkahandler.type=kafka
gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer.properties
#The following resolves the topic name using the short table name
#gg.handler.kafkahandler.topicMappingTemplate=ogg
gg.handler.kafkahandler.topicMappingTemplate=ogg
#The following selects the message key using the concatenated primary keys
#gg.handler.kafkahandler.keyMappingTemplate=${primaryKeys}
#gg.handler.kafkahandler.format=avro_op
gg.handler.kafkahandler.format=json
#gg.handler.kafkahandler.SchemaTopicName=mySchemaTopic
gg.handler.kafkahandler.SchemaTopicName=dataalyogg
gg.handler.kafkahandler.BlockingSend =false
gg.handler.kafkahandler.includeTokens=false
gg.handler.kafkahandler.mode=op
goldengate.userexit.writers=javawriter
javawriter.stats.display=TRUE
javawriter.stats.full=TRUE
gg.log=log4j
gg.log.level=INFO
gg.report.time=30sec
#Sample gg.classpath for Apache Kafka
gg.classpath=dirprm/:/app/kafka/libs/*
#Sample gg.classpath for HDP
#gg.classpath=/etc/kafka/conf:/usr/hdp/current/kafka-broker/libs/*
javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar
customを編集しますkafka_producer.propertiesファイルは、kafka.propsと同じディレクトリにファイルを入れます。#bootstrap.servers=host:port
bootstrap.servers=127.0.0.1:9092
acks=1
#compression.type=gzip
reconnect.backoff.ms=1000
value.serializer=org.apache.kafka.common.serialization.ByteArraySerializer
key.serializer=org.apache.kafka.common.serialization.ByteArraySerializer
# 100KB per partition
batch.size=102400
linger.ms=10000