精华内容
下载资源
问答
  • mysql-oracle数据同步

    2018-09-12 14:29:56
    一个mysql数据库数据同步oracle数据库代码,同时修改mysql数据表标识。
  • oracle 数据同步

    2015-01-23 15:31:32
    本文档主要有 数据库同步以及触发器的使用
  • 没错,就是使用LogMiner来实现Oracle数据同步迁移。 实现过程 1.创建目录 在服务器上创建/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR目录来存储数据库的字典信息,如下所示。 mkdir -p /home/oracle

    写在前面

    最近在研究如何实现Oracle数据库之间的数据同步,网上的资料确实比较少。最好用的Oracle数据库同步工具是:GoldenGate ,而GoldenGate是要收费的。那么还有什么好的办法来同步Oracle的数据吗?没错,就是使用LogMiner来实现Oracle数据同步迁移。

    实现过程

    1.创建目录

    在服务器上创建/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR目录来存储数据库的字典信息,如下所示。

    mkdir -p /home/oracle/tools/oracle11g/oradata/orcl/LOGMNR
    

    2.配置LogMiner

    以oracle用户身份登录服务器,并以DBA身份登录Oracle数据库,如下所示。

    sqlplus /nolog
    conn  / as sysdba
    

    接下来,创建字典文件夹配置,如下所示。

    CREATE DIRECTORY utlfile AS '/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR';
    alter system set utl_file_dir='/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR' scope=spfile;  
    

    注意:由于utl_file_dir只存在于文件当中,所以scope是以文件方式"spfile"写入,而不是both。

    3.开启日志追加模式

    alter database add supplemental log data;  
    

    只有开启后才能看到DML操作记录,否则只能看见DML

    4.重启数据库

    SHUTDOWN IMMEDIATE;  
    STARTUP; 
    

    5.创建数据同步用户

    创建数据同步用户,如果已经有可以跳过,直接赋予权限。

    create user SYNC identified by SYNC;  #如果存在用户,则不需要再次创建,直接授权即可
    GRANT CONNECT,RESOURCE,DBA,EXECUTE_CATALOG_ROLE TO SYNC;  
    

    6.创建数据字典

    切换到要同步数据的用户,以DBA身份登录,创建数据字典文件,如下所示。

    conn SYNC/SYNC@orcl as sysdba;  
    EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR');  
    

    创建数据字典的命令也可以通过Java代码来实现,如果使用Java代码实现的话,首先可以通过JDBC连接到Oracle数据库,然后执行如下命令。

    BEGIN
    dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR');  
    END;
    

    7.加入需要分析的日志文件

    此步骤可以在Oracle命令行执行,也可以使用Java代码实现。

    使用SQL语句实现如下所示。

    EXECUTE dbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO01.LOG',options=>dbms_logmnr.NEW);  
    EXECUTE dbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO02.LOG',options=>dbms_logmnr.ADDFILE);  
    EXECUTE dbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO03.LOG',options=>dbms_logmnr.ADDFILE);  
    

    使用Java代码分析时,使用的SQL语句如下所示。

    BEGIN  
    dbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO01.LOG',options=>dbms_logmnr.NEW);  
    dbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO02.LOG',options=>dbms_logmnr.ADDFILE);  
    dbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO03.LOG',options=>dbms_logmnr.ADDFILE);  
    END;  
    

    8.查看正在使用的日志文件

    SELECT group#, sequence#, status, first_change#, first_time FROM V$log ORDER BY first_change#;
    

    status为CURRENT的为当前正在使用的日志文件

    9.使用Lominer分析日志

    EXECUTE dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR/dictionary.ora');  
    

    使用Java代码分析时,使用的SQL语句如下所示。

    BEGIN
    dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR/dictionary.ora'); 
    END;
    

    10.查看分析结果

    SELECT sql_redo, sql_undo, seg_owner FROM v$logmnr_contents WHERE seg_name='EMP' AND seg_owner='SYNC'; 
    

    注意:视图v$logmnr_contents中的分析结果仅在我们运行过程’dbms_logmrn.start_logmnr’这个会话的生命期中存在,如果要查看新的日志,需要再重新加入分析日志文件、使用LogMiner分析。

    11.常见问题

    (1)如果出现“必须声明标识符 ‘SYS.DBMS_LOGMNR’”异常,则需要在创建用户后,为用户赋予EXECUTE_CATALOG_ROLE权限,如下所示。

    GRANT CONNECT,RESOURCE,DBA,EXECUTE_CATALOG_ROLE TO SYNC; 
    

    (2)当在查询v l o g m n r l o g s 时 提 示 “ 表 或 视 图 不 存 在 ” , 是 因 为 没 有 查 询 v logmnr_logs时提示“表或视图不存在”,是因为没有查询v logmnrlogsvlogmnr_logs的权限。此时在查询语句中需要为seg_owner指定相应的用户,例如,我这里使用SYNC用户通过LogMiner进行分析,则需要将seg_owner指定为SYNC用户,如下所示。

    SELECT sql_redo, sql_undo, seg_owner FROM v$logmnr_contents WHERE seg_name='EMP' AND seg_owner='SYNC'; 
    

    写在最后

    如果觉得文章对你有点帮助,请扫描下方二维码或微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习互联网编程技术。公众号回复“oracle”关键字领取Oracle数据库安装包下载链接。

    展开全文
  • yugong 是阿里巴巴推出的去Oracle数据迁移同步工具(全量 增量,目标支持MySQL/DRDS)。2008年左右,阿里巴巴开始尝试MySQL的相关研究,并开发了基于MySQL分库分表技术的相关产品,Cobar/TDDL(目前为阿里云DRDS产品),...
  • 5、特殊字符处理:删除:'\u0000','"',oracle数据回车符:'\r','\n' 6、支持按分区导入 7、支持内存处理数据导入greenplum,导入失败生成csv格式文件,方便排错 8、支持生成csv格式文件导入greenplum。 9、传递不同...
  • 1.前言跨平台、异构数据库之间的数据同步,方案有限,Oracle OGG算比较靠谱的一个:优点:性能好,大数据量速度快,对线上库性能的影响忽略不计;缺点:安装配置、维护有点麻烦,尤其是后期有字段变更时;个人觉得...

    1.前言

    跨平台、异构数据库之间的数据同步,方案有限,Oracle OGG算比较靠谱的一个:

    优点:性能好,大数据量速度快,对线上库性能的影响忽略不计;
    缺点:安装配置、维护有点麻烦,尤其是后期有字段变更时;
    个人觉得适合部署在小范围、大数据量、对性能要求较高的同步需求。

    本案例以Oracle(10.10.10.1) -> mysql(10.10.10.2)说明其部署过程以及注意事项。
    原理说明:
    OGG从源库的redo log或归档日志中提取出相关表的数据变更,生成特定格式的文件,发送至目标库;目标库读取文件,应用到目标表;
    源库有ext\pump进程,目标库有rep进程,这些进程分别完成数据提取、发送文件、应用文件的任务;
    本案例中分别是ext1\pump1\rep1进程,每个进程有其各自的配置文件;
    如果源库已经在线上跑过一段时间了,有了数据量,就需要通过初始化任务来先初始化目标库,然后再通过ext1\pump1\rep1进程增量同步‘
    本案例中分别是initext1\initrep1完成初始化(注:初始化无pump进程)

    此外,源和目标各有1个manager进程负责全局配置。

    盗个图:


    2.安装

    for oracle
    export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/u01/app/oracle/ggs:$ORACLE_HOME/lib
    ./runInstaller
    指定安装路径
    ./ggsci
    create subdirs

    for mysql
    解压
    直接执行./ggsci
    create subdirs

    3.准备

    Oracle数据库归档模式;
    Oracle数据库设置SUPPLEMENTAL LOG和FORCE LOGGING:
      SELECT supplemental_log_data_min, force_logging FROM v$database;
      SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
      SQL> ALTER DATABASE FORCE LOGGING;
    Oracle数据库设置表trandata
    ./ggci
    ggsci > dblogin userid system password mypwd
    ggsci > add trandata myschema.mydb

    mysql设置以下参数:
    binlog_row_image:full(默认)
    log_bin
    log_bin-index
    max_binlog_size
    binlog_format

    mysql库中在mydb中创建checkpoint表:chkpt_mysql_create.sql

    源表和目标表表必须有主键或唯一键;
    目标表清空;
    目标表禁用外键、约束、触发器;
    如果初始数据量较大,临时删除目标表索引,初始化导入后再建

    4.配置文件

    以下文件置于dirprarm目录下
    --源端--
    mgr:
    PORT 7809
    DYNAMICPORTLIST 7810-7820
    ACCESSRULE, PROG *, IPADDR 192.168.*.*, ALLOW
    --AUTOSTART ER *
    --AUTORESTART ER *, RETRIES 3, WAITMINUTES 3
    STARTUPVALIDATIONDELAY 5
    PURGEOLDEXTRACTS /backup/ggs12/dirdat/*, USECHECKPOINTS, MINKEEPHOURS 2
    
    initext1:
    EXTRACT initext1
    SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")
    SETENV (ORACLE_SID = "myora")
    USERID system PASSWORD mypasswprd
    RMTHOST 10.10.10.2, MGRPORT 7809
    RMTTASK REPLICAT, GROUP initrep1
    TABLE schema_name.table_name;
    
    ext1:
    EXTRACT ext1
    SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")
    SETENV (ORACLE_SID = "myora")
    USERID system PASSWORD mypwd
    LOGALLSUPCOLS
    EXTTRAIL /backup/ggs12/dirdat/aa
    TABLE myschema.mytable;
    
    pump:
    EXTRACT pump1
    USERID system PASSWORD mypassword
    RMTHOST 10.10.10.2, MGRPORT 7809
    RMTTRAIL /data1/ggs/dirdat/aa
    TABLE myschema.myname;
    --目标端--
    mgr:
    PORT 7809
    DYNAMICPORTLIST 7810-7820
    #AUTOSTART ER *
    #AUTORESTART ER *, RETRIES 3, WAITMINUTES 3
    STARTUPVALIDATIONDELAY 5
    PURGEOLDEXTRACTS /data1/ggs/dirdat/*, USECHECKPOINTS, MINKEEPHOURS 2
    
    initrep1:
    REPLICAT initrep1
    TARGETDB mydbname@10.10.10.2:3306, USERID root, PASSWORD mypassword
    MAP myschema.mytable, TARGET mydb.mytable, COLMAP(USEDEFAULTS, source_cola = target_cola, source_colb = target_colb);
    
    rep1:
    REPLICAT rep1
    TARGETDB dbcopy@10.10.10.2:3306, USERID root, PASSWORD mypassword
    MAP myschema.mytable, TARGET mydb.mytable, COLMAP(USEDEFAULTS, source_cola = target_cola, source_colb = target_colb);

    5.创建进程

    创建好配置文件后,收到执行以下命令创建进程(自动读取配置)

    --源端--
    ggsci > add extract initext1, sourceistable
    ggsci > add extract ext1, tranlog, begin now
    ggsci > add exttrail /backup/ggs12/dirdat/aa, extract ext1
    ggsci > add ext pump1, exttrailsource /backup/ggs12/dirdat/aa
    ggsci > add rmttrail /data1/ggs/dirdat/aa, ext pump1
    --目标端--
    ggsci > add replicat initrep1, specialrun
    ggsci > add rep rep1, exttrail /data1/ggs/dirdat/aa, checkpointtable mydb.ggs_checkpoint

    6.开始同步

    source:
    ggsci > start ext1
    ggsci > start pump1
    
    target
    rep1设置HANDLECOLLISIONS
    
    source:
    ggsci > start initext1
    
    target:
    ggsci > view report initrep1
    确认initrep1执行完成
    ggsci > start rep1
    ggsci > info rep1
    rep1配置文件删除HANDLECOLLISIONS?配置
    ggsci > send replicat rep1, nohandlecollisions
    
    ggsci > start rep rep1

    7.注意事项

    (1).OGG不能识别复合唯一键,因此有复合键的需要用keycols指定,否则以所有字段作为key;

    (2).调整源或目标表的字段步骤:

    停止ext\pump\rep进程
    修改源和目标库字段

    启动ext\pump\rep进程

    为了防止DBA或运维误操作,在oracle相关表上创建触发器,提醒这是ggs table:

    create or replace trigger tri_ddl_ggstab_permission
    before drop or truncate or alter on database
    begin
        if ORA_DICT_OBJ_NAME in ('TABNAME1','TABNAME2') then
                raise_application_error(-20001,'GGS table, Contact DBA.');
        end if;
    end;

    (3).万事离不开监控,ggs的监控可以通过创建心跳表监控实时同步情况

    说明:

    在源和目标表建心跳表;

    源通过JOB自动更新心跳表;

    目标表定时检查心跳表的时间与当前时间之差;

    目标表中now() - update_time,反应了ggs同步情况;

    目标表中auto_time - update_time,反应了ggs延时情况;

    source:
    create table ggs_monitor(ggs_process varchar2(100), update_time date) tablespace lbdata;
    alter table ggs_monitor add constraint pk_ggsmonitor primary key(ggs_process);
    insert into ggs_monitor(ggs_process,update_time) values ('ext1',sysdate);
    begin
      dbms_scheduler.create_job(job_name        => 'job_ggs_monitor',
                                job_type        => 'PLSQL_BLOCK',
                                job_action      => 'begin update ggs_monitor set update_time=sysdate; commit; end;',
                                start_date      => sysdate,
                                enabled         => true, 
                                repeat_interval => 'Freq=Secondly;Interval=10');
    end; 
    target:
    create table ggs_monitor (
      ggs_process varchar(100) COLLATE utf8_bin DEFAULT NULL,
      update_time datetime DEFAULT NULL,
      auto_tim` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      primary key(ggs_process)
    );
    
    GGS配置注意事项:
    ext1:  TABLE system.ggs_monitor, WHERE (ggs_process = 'ext1');
    
    zabbix
    UserParameter=ggsAvail[*],/etc/zabbix/script/ggsAvail.sh $1
    UserParameter=ggsDelay[*],/etc/zabbix/script/ggsDelay.sh $1
    
    ggsAvail.sh 
    #!/bin/bash
    if [ $# -ne 1 ]; then
        echo "Usage:$0 extname"
        exit
    fi
    
    extname=$1
    rootPath=/etc/zabbix/script
    tmpLog=$rootPath/tmpGgsAvail${extname}.log
    
    mysql -u root -pmypwd <<EOF > ${tmpLog} 2>/dev/null
    select concat('RESULTLINE#',now() - update_time,'#') message from dbadmin.ggs_monitor where ggs_process='${extname}';
    EOF
    sed -i '/RESULTLINE/!d' ${tmpLog}
    resultLine=`cat ${tmpLog} | wc -l`
    if [ $resultLine -ne 1 ]; then
        echo 3600
        exit
    fi
    echo `cat ${tmpLog} | cut -d "#" -f 2`
    exit
    
    ggsDelay.sh 
    #!/bin/bash
    if [ $# -ne 1 ]; then
        echo "Usage:$0 extname"
        exit
    fi
    
    extname=$1
    rootPath=/etc/zabbix/script
    tmpLog=$rootPath/tmpGgsDelay${extname}.log
    
    mysql -u root -pmypwd <<EOF > ${tmpLog} 2>/dev/null
    select concat('RESULTLINE#',auto_time - update_time,'#') message from dbadmin.ggs_monitor where ggs_process='${extname}';
    EOF
    sed -i '/RESULTLINE/!d' ${tmpLog}
    resultLine=`cat ${tmpLog} | wc -l`
    if [ $resultLine -ne 1 ]; then
        echo 3600
        exit
    fi
    echo `cat ${tmpLog} | cut -d "#" -f 2`
    exit

    zabbix监控效果




    展开全文
  • Oracle数据导入工具

    2014-06-12 10:45:01
    使用winfrom 编写的数据导入工具,将Access数据导入到Oracle数据库中,可分类导入,诺是sql数据库,则需要稍微改下配置代码。
  • 摘要:随着数据规模的不断扩大,传统的RDBMS难以满足OLAP的需求,本文将介绍如何将Oracle数据实时同步到阿里云的大数据处理平台当中,并利用大数据工具数据进行分析。一、背景介绍随着数据规模的不断扩大,传统...

    摘要:随着数据规模的不断扩大,传统的RDBMS难以满足OLAP的需求,本文将介绍如何将Oracle的数据实时同步到阿里云的大数据处理平台当中,并利用大数据工具对数据进行分析。

    一、背景介绍

    随着数据规模的不断扩大,传统的RDBMS难以满足OLAP的需求,本文将介绍如何将Oracle的数据实时同步到阿里云的大数据处理平台当中,并利用大数据工具对数据进行分析。

    OGG(Oracle GoldenGate)是一个基于日志的结构化数据备份工具,一般用于Oracle数据库之间的主从备份以及Oracle数据库到其他数据库(DB2, MySQL等)的同步。下面是Oracle官方提供的一个OGG的整体架构图,从图中可以看出OGG的部署分为源端和目标端两部分组成,主要有Manager,Extract,Pump,Collector,Replicat这么一些组件。



    • Manager:在源端和目标端都会有且只有一个Manager进程存在,负责管理其他进程的启停和监控等;
    • Extract:负责从源端数据库表或者事务日志中捕获数据,有初始加载和增量同步两种模式可以配置,初始加载模式是直接将源表数据同步到目标端,而增量同步就是分析源端数据库的日志,将变动的记录传到目标端,本文介绍的是增量同步的模式;
    • Pump:Extract从源端抽取的数据会先写到本地磁盘的Trail文件,Pump进程会负责将Trail文件的数据投递到目标端;
    • Collector:目标端负责接收来自源端的数据,生成Trail文件
    • Replicat:负责读取目标端的Trail文件,转化为相应的DDL和DML语句作用到目标数据库,实现数据同步。

    本文介绍的Oracle数据同步是通过OGG的Datahub插件实现的,该Datahub插件在架构图中处于Replicat的位置,会分析Trail文件,将数据的变化记录写入Datahub中,可以使用流计算对datahub中的数据进行实时分析,也可以将数据归档到MaxCompute中进行离线处理。

    二、安装步骤

    0. 环境要求

    • 源端已安装好Oracle
    • 源端已安装好OGG(建议版本Oracle GoldenGate V12.1.2.1)
    • 目标端已安装好OGG Adapters(建议版本Oracle GoldenGate Application Adapters 12.1.2.1)
    • java 7

    (下面将介绍Oracle/OGG相关安装和配置过程,Oracle的安装将不做介绍,另外需要注意的是:Oracle/OGG相关参数配置以熟悉Oracle/OGG的运维人员配置为准,本示例只是提供一个可运行的样本,Oracle所使用的版本为ORA11g)

    1. 源端OGG安装

    下载OGG安装包解压后有如下目录:

    drwxr-xr-x install
    drwxrwxr-x response
    -rwxr-xr-x runInstaller
    drwxr-xr-x stage

    目前oracle一般采取response安装的方式,在response/oggcore.rsp中配置安装依赖,具体如下:

    oracle.install.responseFileVersion=/oracle/install/rspfmt_ogginstall_response_schema_v12_1_2
    # 需要目前与oracle版本对应
    INSTALL_OPTION=ORA11g
    # goldegate主目录
    SOFTWARE_LOCATION=/home/oracle/u01/ggate
    # 初始不启动manager
    START_MANAGER=false
    # manger端口
    MANAGER_PORT=7839
    # 对应oracle的主目录
    DATABASE_LOCATION=/home/oracle/u01/app/oracle/product/11.2.0/dbhome_1
    # 暂可不配置
    INVENTORY_LOCATION=
    # 分组(目前暂时将oracle和ogg用同一个账号ogg_test,实际可以给ogg单独账号)
    UNIX_GROUP_NAME=oinstall

    执行命令:

    runInstaller -silent -responseFile {YOUR_OGG_INSTALL_FILE_PATH}/response/oggcore.rsp

    本示例中,安装后OGG的目录在/home/oracle/u01/ggate,安装日志在/home/oracle/u01/ggate/cfgtoollogs/oui目录下,当silentInstall{时间}.log文件里出现如下提示,表明安装成功:

    The installation of Oracle GoldenGate Core was successful.

    执行/home/oracle/u01/ggate/ggsci命令,并在提示符下键入命令:CREATE SUBDIRS,从而生成ogg需要的各种目录(dir打头的那些)。
    至此,源端OGG安装完成。

    2. 源端Oracle配置

    以dba分身进入sqlplus: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;
    
    # 增加数据库附加日志及回退
    alter database add supplemental log data;
    alter database add supplemental log data (primary key, unique,foreign key) columns;
    # rollback
    alter database drop supplemental log data (primary key, unique,foreign key) columns;
    alter database drop supplemental log data;
    
    # 全字段模式,注意:在该模式下的delete操作也只有主键值
    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    # 开启数据库强制日志模式
    alter database force logging;
    # 执行marker_setup.sql 脚本
    @marker_setup.sql
    # 执行@ddl_setup.sql
    @ddl_setup.sql
    # 执行role_setup.sql
    @role_setup.sql
    # 给ogg用户赋权
    grant GGS_GGSUSER_ROLE to ogg_test;
    # 执行@ddl_enable.sql,开启DDL trigger
    @ddl_enable.sql
    # 执行优化脚本
    @ddl_pin ogg_test
    # 安装sequence support
    @sequence.sql
    #
    alter table sys.seq$ add supplemental log data (primary key) columns;

    3. OGG源端mgr配置

    以下是通过ggsci对ogg进行配置

    配置mgr
    edit params mgr

    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 7

    启动mgr(运行日志在ggate/dirrpt中)

    start mgr

    查看mgr状态

    info mgr

    查看mgr配置

    view params mgr

    4. OGG源端extract配置

    以下是通过ggsci对ogg进行配置

    配置extract(名字可任取,extract是组名)
    edit params extract

    EXTRACT extract
    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
    DYNAMICRESOLUTION
    TRANLOGOPTIONS CONVERTUCS2CLOBS
    TRANLOGOPTIONS RAWDEVICEOFFSET 0
    DDL &
    INCLUDE MAPPED OBJTYPE 'table' &
    INCLUDE MAPPED OBJTYPE 'index' &
    INCLUDE MAPPED OBJTYPE 'SEQUENCE' &
    EXCLUDE OPTYPE COMMENT
    DDLOPTIONS  NOCROSSRENAME  REPORT
    TABLE     OGG_TEST.*;
    SEQUENCE  OGG_TEST.*;
    
    GETUPDATEBEFORES

    增加extract进程(ext后的名字要跟上面extract对应,本例中extract是组名)
    add ext extract,tranlog, begin now

    删除某废弃进程DP_TEST
    delete ext DP_TEST

    添加抽取进程,每个队列文件大小为200m
    add exttrail ./dirdat/st,ext extract, megabytes 200

    启动抽取进程(运行日志在ggate/dirrpt中)
    start extract extract
    至此,extract配置完成,数据库的一条变更可以在ggate/dirdat目录下的文件中看到

    5. 生成def文件

    源端ggsci起来后执行如下命令,生成defgen文件,并且拷贝到目标端dirdef下
    edit params defgen

    DEFSFILE ./dirdef/ogg_test.def
    USERID ogg_test, PASSWORD ogg_test
    table OGG_TEST.*;

    在shell中执行如下命令,生成ogg_test.def
    ./defgen paramfile ./dirprm/defgen.prm

    6. 目标端OGG安装和配置

    解压adapter包
    将源端中dirdef/ogg_test.def文件拷贝到adapter的dirdef下

    执行ggsci起来后执行如下命令,创建必须目录
    create subdirs

    编辑mgr配置
    edit params mgr

    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 7

    启动mgr
    start mgr

    7. 源端ogg pump配置

    启动ggsci后执行如下操作:

    编辑pump配置
    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 ext pump,exttrailsource ./dirdat/st

    备注:投递进程,每个队文件大小为200m
    add rmttrail ./dirdat/st,ext pump,megabytes 200

    启动pump
    start pump
    启动后,结合上面adapter的配置,可以在目标端的dirdat目录下看到过来的trailfile

    8. Datahub插件安装和配置

    依赖环境:jdk1.7。
    配置好JAVA_HOME, LD_LIBRARY_PATH,可以将环境变量配置到~/.bash_profile中,例如

    export JAVA_HOME=/xxx/xxx/jrexx
    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$JAVA_HOME/lib/amd64:$JAVA_HOME/lib/amd64/server

    修改环境变量后,请重启adapter的mgr进程
    下载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}/datahub-ogg-plugin/conf/configure.xml
    
    goldengate.userexit.nochkpt=false
    goldengate.userexit.timestamp=utc
    
    gg.classpath={YOUR_HOME}/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 schema, 可以被mapping中的oracleSchema覆盖, 两者必须有一个非空-->
            <schema>ogg_test</schema>
        </defaultOracleConfigure>
    
        <defalutDatahubConfigure>
            <!-- datahub endpoint, 必填-->
            <endPoint>YOUR_DATAHUB_ENDPOINT</endPoint>
            <!-- datahub project, 可以被mapping中的datahubProject, 两者必须有一个非空-->
            <project>YOUR_DATAHUB_PROJECT</project>
            <!-- datahub accessId, 可以被mapping中的datahubAccessId覆盖, 两者必须有一个非空-->
            <accessId>YOUR_DATAHUB_ACCESS_ID</accessId>
            <!-- datahub accessKey, 可以被mapping中的datahubAccessKey覆盖, 两者必须有一个非空-->
            <accessKey>YOUR_DATAHUB_ACCESS_KEY</accessKey>
            <!-- 数据变更类型同步到datahub对应的字段,可以被columnMapping中的ctypeColumn覆盖 -->
            <ctypeColumn>optype</ctypeColumn>
            <!-- 数据变更时间同步到datahub对应的字段,可以被columnMapping中的ctimeColumn覆盖 -->
            <ctimeColumn>readtime</ctimeColumn>
            <!-- 数据变更序号同步到datahub对应的字段, 按数据变更先后递增, 不保证连续, 可以被columnMapping中的cidColumn覆盖 -->
            <cidColumn>record_id</cidColumn>
    <!-- 额外增加的常量列,每条record该列值为指定值,格式为c1=xxx,c2=xxx,可以被columnMapping中的constColumnMap覆盖-->
             <constColumnMap></constColumnMap>
        </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>
    
        <!-- 脏数据文件最大size, 单位M, 可选, 默认500-->
        <dirtyDataFileMaxSize>200</dirtyDataFileMaxSize>
    
        <!-- 重试次数, -1:无限重试 0:不重试 n:重试次数, 可选, 默认-1-->
        <retryTimes>0</retryTimes>
    
        <!-- 重试间隔, 单位毫秒, 可选, 默认3000-->
        <retryInterval>4000</retryInterval>
    
        <!-- 点位文件, 可选, 默认datahub_ogg_plugin.chk-->
        <checkPointFileName>datahub_ogg_plugin.chk</checkPointFileName>
    
        <mappings>
            <mapping>
                <!-- oracle schema, 见上描述-->
                <oracleSchema></oracleSchema>
                <!-- oracle table, 必选-->
                <oracleTable>t_person</oracleTable>
                <!-- datahub project, 见上描述-->
                <datahubProject></datahubProject>
                <!-- datahub AccessId, 见上描述-->
                <datahubAccessId></datahubAccessId>
                <!-- datahub AccessKey, 见上描述-->
                <datahubAccessKey></datahubAccessKey>
                <!-- datahub topic, 必选-->
                <datahubTopic>t_person</datahubTopic>
                <ctypeColumn></ctypeColumn>
                <ctimeColumn></ctimeColumn>
                <cidColumn></cidColumn>
                <constColumnMap></constColumnMap>
                <columnMapping>
                    <!--
                    src:oracle字段名称, 必须;
                    dest:datahub field, 必须;
                    destOld:变更前数据落到datahub的field, 可选;
                    isShardColumn: 是否作为shard的hashkey, 可选, 默认为false, 可以被shardId覆盖
                    isDateFormat: timestamp字段是否采用DateFormat格式转换, 默认true. 如果是false, 源端数据必须是long
                    dateFormat: timestamp字段的转换格式, 不填就用默认值
                    -->
                    <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>
    
                <!--指定shard id, 优先生效, 可选-->
                <shardId>1</shardId>
            </mapping>
        </mappings>
    </configue>

    在ggsci下启动datahub writer

    edit params dhwriter

    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.*;

    添加dhwriter
    add extract dhwriter, exttrailsource ./dirdat/st

    启动dhwriter
    start dhwriter

    三、使用场景

    这里会用一个简单的示例来说明数据的使用方法,例如我们在Oracle数据库有一张商品订单表orders(oid int, pid int, num int),该表有三列,分别为订单ID, 商品ID和商品数量。


    将这个表通过OGG Datahub进行增量数据同步之前,我们需要先将源表已有的数据通过DataX同步到MaxCompute中。增量同步的关键步骤如下:
    (1)在Datahub上创建相应的Topic,Topic的schema为(string record_id, string optype, string readtime, bigint oid_before, bigint oid_after, bigint pid_before, bigint pid_after, bigint num_before, bigint num_after);
    (2)OGG Datahub的插件按照上述的安装流程部署配置,其中列的Mapping配置如下:

                <ctypeColumn>optype</ctypeColumn>
                <ctimeColumn>readtime</ctimeColumn>
                <columnMapping>
                    <column src="oid" dest="oid_after" destOld="oid_before" isShardColumn="true"/>
                    <column src="pid" dest="pid_after" destOld="pid_before"/>
                    <column src="num" dest="num_after" destOld="num_before"/>
                </columnMapping>

    其中optype和readtime字段是记录数据库的数据变更类型和时间,optype有"I", "D", "U"三种取值,分别对应为“增”,“删”,“改”三种数据变更操作。
    (3)OGG Datahub插件部署好成功运行后,插件会源源不断的将源表的数据变更记录输送至datahub中,例如我们在源订单表中新增一条记录(1,2,1),datahub里收到的记录如下:

    +--------+------------+------------+------------+------------+------------+------------+------------+------------+
    | record_id | optype     | readtime   | oid_before | oid_after  | pid_before | pid_after  | num_before | num_after  |
    +-------+------------+------------+------------+------------+------------+------------+------------+------------+
    | 14810373343020000 |     I          | 2016-12-06 15:15:28.000141 | NULL       | 1          | NULL       | 2          | NULL       | 1   |       

    修改这条数据,比如把num改为20,datahub则会收到的一条变更数据记录,如下:

    +-------+------------+------------+------------+------------+------------+------------+------------+------------+
    | record_id | optype     | readtime   | oid_before | oid_after  | pid_before | pid_after  | num_before | num_after  |
    +--------+------------+------------+------------+------------+------------+------------+------------+------------+
    | 14810373343080000 |     U          | 2016-12-06 15:15:58.000253 | 1          | 1          | 2          | 2          | 1          | 20         |

    实时计算

    在前一天的离线计算的基础数据上,我们可以写一个StreamCompute流计算的分析程序,很容易地对数据进行实时汇总,例如实时统计当前总的订单数,每种商品的销售量等。处理思路就是对于每一条到来的变更数据,可以拿到变化的数值,实时更新统计变量即可。

    离线处理

    为了便于后续的离线分析,我们也可以将Datahub里的数据归档到MaxCompute中,在MaxCompute中创建相应Schema的表:

    create table orders_log(record_id string, optype string, readtime string, oid_before bigint, oid_after bigint, pid_before bigint, pid_after bigint, num_before bigint, num_after bigint);

    在Datahub上创建MaxCompute的数据归档,上述流入Datahub里的数据将自动同步到MaxCompute当中。建议将同步到MaxCompute中的数据按照时间段进行划分,比如每一天的增量数据都对应一个独立分区。这样当天的数据同步完成后,我们可以处理对应的分区,拿到当天所有的数据变更,而与和前一天的全量数据进行合并后,即可得到当天的全量数据。为了简单起见,先不考虑分区表的情况,以2016-12-06这天的增量数据为例,假设前一天的全量数据在表orders_base里面,datahub同步过来的增量数据在orders_log表中,将orders_base与orders_log做合并操作,可以得到2016-12-06这天的最终全量数据写入表orders_result中。这个过程可以在MaxCompute上用如下这样一条SQL完成。

    INSERT OVERWRITE TABLE orders_result
    SELECT t.oid, t.pid, t.num
    FROM
    (
         SELECT oid, pid, num, '0' x_record_id, 1 AS x_optype
         FROM
         orders_base 
         UNION ALL
         SELECT decode(optype,'D',oid_before,oid_after) AS oid
                  , decode(optype,'D', pid_before,pid_after) AS pid
                  , num_after AS num
                  , record_id x_record_id
                  , decode(optype, 'D', 0, 1) AS x_optype
         FROM
         orders_log
     ) t
    JOIN
     (
         SELECT
         oid
         , pid
         , max(record_id) x_max_modified
         FROM
         (
         SELECT
         oid
         , pid
         , '0' record_id
         FROM
         orders_base UNION ALL SELECT
                          decode(optype,'D',oid_before,oid_after) AS oid
                          , decode(optype,'D', pid_before,pid_after) AS pid
                          , record_id
                          FROM
                          orders_log ) g
         GROUP BY oid , pid
     ) s
    ON
    t.oid = s.oid AND t.pid = s.pid AND t.x_record_id = s.x_max_modified AND t.x_optype <> 0;

    四、常见问题

    Q:目标端报错 OGG-06551 Oracle GoldenGate Collector: Could not translate host name localhost into an Internet address.
    A:目标端机器hostname在/etc/hosts里面重新设置localhost对应的ip

    Q:找不到jvm相关的so包
    A:将jvm的so路径添加到LD_LIBRARY_PATH后,重启mgr

    例如:export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$JAVA_HOME/lib/amd64:$JAVA_HOME/lib/amd64/server

    Q:有了DDL语句,比如增加一列,源端ogg没有问题,但是adapter端的ffwriter和jmswriter进程退出,且报错: 2015-06-11 14:01:10 ERROR OGG-01161 Bad column index (5) specified for table OGG_TEST.T_PERSON, max columns = 5.
    A:由于表结构改变,需要重做def文件,将重做的def文件放入dirdef后重启即可


    作者:冶善

    原文链接

    本文为云栖社区原创内容,未经允许不得转载。


    展开全文
  • oracle 数据比对工具

    千次阅读 2019-09-30 17:05:05
    https://www.devart.com/ 以上网站有oracle 数据比对工具 dbForge Data Compare for Oracle 比较相同表结构,但数据不一样,数据批量操作入库的时候, 用在数据同步,数据差分,数据主从库之间的比较。 ...

    https://www.devart.com/
    以上网站有oracle 数据比对工具 dbForge Data Compare for Oracle

    比较相同表结构,但数据不一样,数据批量操作入库的时候,
    用在数据同步,数据差分,数据主从库之间的比较。
    在这里插入图片描述
    以上网站,有mysql,sqlserver,postgreSQL 数据库管理工具

    在这里插入图片描述

    展开全文
  • 简单配置后将oracle数据同步到elasticsearch数据库中
  • 没错,就是使用LogMiner来实现Oracle数据同步迁移。 实现过程 1.创建目录 在服务器上创建/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR目录来存储数据库的字典信息,如下所示。 mkdir -p /home/oracle/tools/...
  • Oracle数据同步解决方案之databus

    千次阅读 2017-03-24 15:39:19
    目前了解到基于Oracle的开源数据同步项目有yugong、databus、SymmetricDS,之前尝试了yugong,很容易上手。使用时需要注意两点:1、物化视图和回表查询对源库会产生比较大的影响;2、每一个表有一个单独的实例去处理...
  • MySQL 相关的中间件和工具,Cobar/TDDL(目前为阿里云DRDS产品),解决了单机 Oracle 无法满足的扩展性问题,当时也掀起一股去IOE项目的浪潮,愚公这项目因此而诞生,其要解决的目标就是帮助用户完成从 Oracle 数据...
  • 数据同步工具

    2015-01-21 14:35:19
    oracle和sql数据库数据同步
  • DBSync 数据同步工具是一款异构数据库之间数据同步的工具,目前支持的数据库有:access、sqlserver、oracle、 db2、sybase ase 11-15,Mysql,同时,该软件提供的ODBC的同步功能,可以间接实现对FireBird,INTERBASE等...
  • 数据同步一 1. 将oracle系统作为SQL server的链接服务器加入到SQL server中 2. 使用SQL语句通过链接服务器将SQLServer数据写入Oracle中。 比如我们建立了链接服务器MIS,而Oracle中在MIS用户下面建立了表...
  • ORACLE_数据同步

    2019-03-21 01:57:35
    NULL 博文链接:https://zhujiang520.iteye.com/blog/966753
  • GoldenGate将Oracle数据同步到GreenPlum

    千次阅读 2014-02-16 00:45:35
    Oracle 11.2.0.4 RAC 2-Nodes Oracle Linux 5.8 x86_64 目标端 Greenplum Database 4.2.6.1 4-Nodes CentOS 5.7 x86_64 ====================================================== 源端配置 --本例是将OGG安
  • 摘要: 这段时间负责一个老项目开发的数据库管理工作,这个项目中开发库与测试数据库分离,其中有些系统表数据与基础资料数据经常...Oracle 数据实时同步到 MySQL,目前支持的工具还比较少,一款免费的数据同步...
  • yugong解决了单机Oracle无法满足的扩展性问题,当时也掀起一股去IOE项目的浪潮,愚公这项目因此而诞生,其要解决的目标就是帮助用户完成从Oracle数据迁移到MySQL上,完成去IOE的第一步。DBA的小伙伴们赶快来围观! ...
  • 此项目为个人练手项目,封装了JDBC工具 相关Jar包 ojdbc6jar不要随意更换,会有日期转换的问题 commons-lang3-3.1.jar fastjson-1.2.58.jar mysql-connector-java-5.1.18-bin.jar ojdbc6.jar
  • DB Comparer for Oracle是一款卓越的Oracle数据库比较和同步工具,使你可以查看被比较的数据对象之间所有的差别并执行自定产生的脚本同步数据库结构和排除所有或选择的区别。可以能够自动对Oracle数据库模型比较和...
  • DBsync数据同步工具

    2018-08-10 17:38:17
    数据同步工具. 我所用的环境是sqlserver对接sqlserver. 需要一个验证字段...
  • 一款非常强大的跨数据库之间的数据同步工具,支持:Oracle, MySQL, SQL Server, PostgreSQL, IBM DB2, Informix, Teradata, InterSystems Caché, Access, Excel, Visua。
  • 数据同步工具:Canal

    千次阅读 2020-10-28 11:15:50
    大家好,欢迎来到本篇博客,博主是一名刚入大数据行业的小白,利用空闲的...本篇博客主要讲解:数据同步工具:Canal 目标: 了解Canal Canal背景什么是canalCanal原理MySQL主备复制原理canal 工作原理架构 背景 -----.
  • 我这人有个习惯,看到自己认为好的文章,总要认认真真的抄回来... 其中多主复制能进行双向同步复制和异步复制,物化视图用于单向复制,比较原始的,触发器/Job + DBLINK的方式,可同步和定时刷新。 物化视图刷新的方式
  • Oracle 数据实时同步到 Kafka ,目前支持的工具还比较少,一款免费的数据同步工具 Tapdata Cloud是支持的。跟前面分享到的其他数据库同步的操作方式类似。 第一步:配置 Oracle 连接 1. ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,285
精华内容 23,714
关键字:

oracle数据同步工具