Oracle 11 GR 2同期データがKAFKAに入る

12035 ワード

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インストールディレクトリを作成する
ディレクトリの作成は自分で決めます。要求はありません。
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初期化OGG
su - 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プロファイルマネージャmgr
GGSCI (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プロセスパラメータ構成説明:
  • 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設定抽出プロセス
    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