`

GlodenGate的数据初始化(原创)

 
阅读更多

概述

在进行GoldeGate数据同步之前,我们往往需要对数据进行初始化,以获得数据同步的基础点。由于选择数据同步的方法不同,数据初始化的源库既可以是正在进行读写操作的数据库,也可以是对外只读的数据库。数据同步的方法主要有以下几种:

Loading data with a database utility,由数据库工具进行目标端数据的初始化,在oracle平台下,常见的有RMAN,exp/imp和expdp/impdp,该方法无法使用多个GoldenGate进程进行并行数据同步
Loading data from file to Replicat,抽取进程将数据抽取到文件中,再从文件中复制数据到目标数据库,可用于ETL处理。这种方式速度最慢。
Loading data from file to database utility,抽取进程以ASCII格式写入到抽取文件中,再通过数据库工具进行批量导入,导入所需的控制文件由复制进程生成和管理。
Loading data with an Oracle GoldenGate direct load,抽取进程直接通过TCP/IP协议将数据传输给复制进程进行处理,不在需要Collector进程和中间文件。
Loading data with a direct bulk load to SQL*Loader,抽取进程以ASCII格式写入到抽取文件中,再通过SQL*Loader进行批量导入,导入所需的控制文件由复制进程生成和管理。 官方文档中声称这种方式是Oracle数据库之间初始化数据最快的,个人认为,如果是进行全库的初始化,rman速度会更快,如果只是针对个别表或者对 象,该方式应该是最快的。这种方式原理和前面提到的Loading data from file to database utility类似。
Loading data with Teradata load utilities, 用于两个teradata数据库之间进行数据同步,同步的工具为multiLoad

数据同步前的前提

禁用DDL同步

目标表应满足的条件,注意:仅为建议,能提高同步速度和避免错误,非必须:
数据:确认目标表为空,否则可能导致与以存在数据行发生冲突或报错。
约束:禁用外键约束和检查约束。外键约束容易引起报错,检查约束会减慢同步速度,可以在数据同步成功后重新激活约束
索引:删除目标表的索引,索引并非插入操作所必须的,且会明显的降低导入速度。可以在数据初始化同步成功后另外建立索引

注意:主键索引是db2 for z/OS平台所必须的,故不应删除该平台数据库的主键索引
在源端和目标端配置manager进程

在目标端参数文件中加入HANDLECOLLISIONS参数来解决数据冲突,但需要有主键或唯一索引,如果没有主键或唯一索引,则需在table和map参数中使用keycols选项
利用RMAN
初始化数据

架构图

RMAN和exp/imp都是利用数据库自带工具copy源端的数据库,然后再建立目标端建立数 据库。在copy数据库的过程中GoldenGate启动一组抽取进程来获取在copy过程中源端数据库的数据变化,copy完成后启动目标端的 replicat进程吧copy数据库过程中的交易再在目标端执行一遍。初始化过程完成后,extract和replicat进程持续运行来保证目标端和 源端数据一致。

RMAN在线初始化是使用RMAN工具备份源端的数据库,然后在目标端恢复数据库到一个SCN, 从这个SCN以后启动REPLICAT进程,所以这种方法不需要冲突处理,在备份和恢复过程中需要启动Extract进场组来获取在backup和 recover过程中的数据变化,目标端恢复完成后启动replicat进程。此后Extract和Replicat持续运行,保证源端和目标端数据一 致。

查看数据库所有事务的开始时间,直到其大于Extract进程的启动时间再开始备份数据库,因为 GoldenGate只获取Extract启动以后的交易变化,在Extract启动之前开始而在Extract启动后完成的交易GoldenGate将 会忽略这些交易,这些被忽略的交数据就会丢失,所以应等数据库所有的交易都在extract启动之后开始时才能开始备份数据。可以通过如下SQL查看交易 开始时间

SQL>select min(start_time) from v$transaction
MIN(START_TIME)
------------------------------------------------------------
07/22/12 10:18:53

关于GoldenGate的安装与配置可以查看笔者的如下文章
http://czmmiao.iteye.com/admin/blogs/1554857

源端GoldenGate配置如下

GGSCI (rac1) 43> view params mgr
port 7500
GGSCI (rac1) 44> view params eora
extract eora
userid ogg,password ogg
exttrail ./dirdat/et
rmthost 192.168.1.112, mgrport 7500
rmttrail ./dirdat/rt
table hr.*;
GGSCI (rac1) 46> info exttrail *
       Extract Trail: ./dirdat/et
             Extract: EORA
               Seqno: 2
                 RBA: 1038
           File Size: 100M
       Extract Trail: ./dirdat/rt
             Extract: EORA
               Seqno: 2
                 RBA: 69000
           File Size: 100M
GGSCI (rac1) 47> info rmttrail *
       Extract Trail: ./dirdat/et
             Extract: EORA
               Seqno: 2
                 RBA: 1038
           File Size: 100M
       Extract Trail: ./dirdat/rt
             Extract: EORA
               Seqno: 2
                 RBA: 69120
           File Size: 100M

用如下匿名包向hr用户下的testgg的每20s插入数据

SQL> grant dba to hr; 
Grant succeeded.

SQL> conn hr/hr;   
Connected.
SQL> create table testgg(id int);
Table created.
SQL> begin
  2     for i in 1..100000 loop
  3       insert into testgg values(i);
  4       commit;
  5       dbms_lock.sleep(20);
  6     end loop;
  7  end;
  8  /

启动extract进程

GGSCI (rac1) 42> start eora
Sending START request to MANAGER ...
EXTRACT EORA starting

GGSCI (rac1) 45> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                          
EXTRACT     RUNNING     EORA        00:00:00      00:00:00   

备份源端数据库, 注意,一定要在抽取进程启动后进行数据备份

RMAN> run{
2> backup database format '/home/oracle/full_%U.dbf';
3> sql 'alter system archive log current';
4> backup archivelog all format '/home/oracle/arch_%U.dbf';
5> }

将备份文件拷贝到目标端

$scp full_0*  192.168.1.112:/home/oracle/
$scp arch_0*  192.168.1.112:/home/oracle

恢复目标端数据库,这里涉及到了RMAN的异机恢复,不清楚的读者可以参考笔者的如下文章
http://czmmiao.iteye.com/blog/1602553

目标端GoldenGate配置
GGSCI (rac2) 15> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                          
REPLICAT    STOPPED     PORA        00:00:00      00:00:03   
GGSCI (rac2) 16> view params mgr
port 7500
GGSCI (rac2) 17> view params pora
replicat pora
setenv(ORACLE_SID=orcl)
userid ogg, password ogg
assumetargetdefs

handlecollisions
discardfile ./dirrpt/pora.dsc, purge
map hr.*, target hr.*;

GGSCI (rac2) 147> view params ./GLOBALS

checkpointtable ogg.checkczm

GGSCI (rac2) 149> add checkpointtable ogg.checkczm

Successfully created checkpoint table ggs.checkczm.

GGSCI (rac2) 161> add replicat pora ,exttrail ./dirdat/rt, checkpointtable ogg.checkczm

REPLICAT added.

恢复控制文件

SQL>startup nomount;

RMAN> restore controlfile from '/home/oracle/full_02ngko20_1_1.dbf';
Starting restore at 21-JUL-12

......省略若干行......
output filename=/u01/app/oradata/orcl/control03.ctl
Finished restore at 21-JUL-12

RMAN> sql 'alter database mount';
sql statement: alter database mount
released channel: ORA_DISK_1

RMAN> run{            
2> allocate channel c1 type disk;
3>  allocate channel c2 type disk;
4> restore database;
5> recover database;
6> }
allocated channel: c1
channel c1: sid=156 devtype=DISK
......省略若干行......
channel c1: restore complete, elapsed time: 00:01:15
Finished restore at 21-JUL-12
Starting recover at 21-JUL-12
starting media recovery
......省略若干行......
released channel: c2
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 07/21/2012 09:02:32
RMAN-06054: media recovery requesting unknown log: thread 1 seq 4 lowscn 480661

由于没有指定SCN,故报错RMAN-06054,这里可以忽略

SQL> alter database open resetlogs

查看数据库启动时的SCN,并从这个SCN之后启动Replicat进程

SQL> select checkpoint_change#,file# from v$datafile_header;
CHECKPOINT_CHANGE#      FILE#
------------------ ----------
            480661          1
            480661          2
            480661          3
            480661          4
            480661          5

GGSCI (rac2) 162> start pora,aftercsn 480661
Sending START request to MANAGER ...

REPLICAT PORA starting

验证数据一致性
源端

SQL> select count(*) from testgg
  COUNT(*)
----------
       141

目标端

SQL> select count(*) from testgg
  COUNT(*)
----------
       141

这种方法可以使用传输表空间或者基于备份的传输表空间来实现,这样就不需要对整个目标端数据库进行同步了,只需要同步所需的数据。

利用exp/imp 初始化数据

使用exp/imp(当然expdp/impdp同理)进行数据初始化的架构图和GoldeGate配置方法和使用RMAN是一致的,这里不再赘述,这里读者需要注意以下几个步骤

导出前,查看源端获得当前的scn号
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
    4
92124

确认Extract进程已经启动

GGSCI (rac1) 45> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                          
EXTRACT     RUNNING     EORA        00:00:00      00:00:00   

导出数据

$ exp system/oracle file=/home/oracle/hr_table.dmp triggers=n flashback_scn=480494 owner=hr
Export: Release 10.2.0.1.0 - Production on Sun Jul 22 11:16:15 2012
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

......省略若干行......
. exporting statistics
Export terminated successfully without warnings.

复制到目标端

$scp hr_table.dmp   192.168.1.112:/home/oracle/

确认复制进程未启动

GGSCI (rac2) 15> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                          
REPLICAT    STOPPED     PORA        00:00:00      00:00:03 

导入数据
$ imp system/oracle file=hr_table.dmp fromuser=hr touser=hr
Import: Release 10.2.0.1.0 - Production on Sun Jul 22 11:22:04 2012
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

......省略若干行......
 "END secure_dml;"
About to enable constraints...
Import terminated successfully with warnings.

有报错,但和本次数据导入无关,忽略

注意:如果数据量较大,则会造成大事务,且导入执行很长时间。如果imp操作被中断,这个中断将导致这个大事物的回滚,回滚会占用更多时间影响启动复制进程的时间,这是读者在日常工作中注意的问题

启动pora进程
GGSCI (rac2) 89> start pora,aftercsn 492124
Sending START request to MANAGER ...
REPLICAT PORA starting
GGSCI (rac2) 90> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                          
REPLICAT    RUNNING     PORA        00:00:00      00:00:00   
GGSCI (rac2) 91> send replicat pora,report
Sending REPORT request to REPLICAT PORA ...
Request processed.

验证数据一致性
源端

SQL> select count(*) from testgg
  COUNT(*)
----------
       1013

目标端

SQL> select count(*) from testgg
  COUNT(*)
----------
       1013

如果只是是某些表由于各种原因造成两边数据不一致,需要重新进行同步,则可以在map参数中增加filter选项解决,如

map hr.testgg, target hr.testgg, filter ( @GETENV ("TRANSACTION", "CSN") >  492124) ;

利用GoldenGate初始化导入数据

架构图

GoldenGate Initial Load直接初始化是GoldenGate Initial Load Extract进程获取的源端记录直接传输给目标端的Initial Load Replicat进程,这个过程由MGR进程动态的启动,不需要Collect进程和文件。

在Initial Load过程中,需要启动Extract和Replicat进程来获取Initial Load过程中的数据变化,然后部署到目标端,从而保证结果的一致。这种方式不支持LOB和LONG类型的数据。GoldenGate会根据MGR进程中的DYNAMICPORTLIST配置的端口列表来为Replicat进程动态的分配端口。

Extract进程和Replicat进程和前文所述的配置一致,这里不再赘述,下面介绍Initial Load进程的配置

源端

GGSCI (rac1) 60> view params extinit
extract extinit
userid ogg, password ogg
rmthost 192.168.1.112, mgrport 7500
rmttask replicat, group porarini
table hr.*;
GGSCI (rac1) 58> add extract extinit,sourceistable
EXTRACT added.
GGSCI (rac1) 59> info extract *,tasks
EXTRACT    EXTINIT   Initialized   2012-07-22 17:21   Status STOPPED
Checkpoint Lag       Not Available
Log Read Checkpoint  Not Available
                     First Record         Record 0
Task                 SOURCEISTABLE
GGSCI (rac1) 61> start extinit
Sending START request to MANAGER ...
EXTRACT EXTINIT starting
GGSCI (rac1) 62> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                          
EXTRACT     RUNNING     EORA        00:00:00      00:00:03   

目标端
GGSCI (rac2) 115> info all
Program     Status      Group       Lag at Chkpt  Time Since Chkpt
MANAGER     RUNNING                                          
REPLICAT    RUNNING     PORA        00:00:00      00:00:05   
GGSCI (rac2) 116> view params poraini
replicat poraini
assumetargetdefs
userid ogg, password ogg
discardfile ./dirrpt/poraini.dsc, purge
map hr.*, target hr.*;
GGSCI (rac2) 117> add replicat poraini, specialrun

三种方式的比较
RMAN:速度快,如果是对整个目标库进行数据同步,效果较为理想。如果针对所需数据进行同步,使用传输表空间的话,会造成生产端表空间read only的情况,如果是基于备份的传输表空间,则会造成存储空间的浪费

exp/imp:速度相对较快,同步方式也较为灵活,适用于同步意外终止的故障处理或者针对个别表进行初始化数据同步

Initial Load:速度较慢(网友的测试结果,笔者未做详细测试),但操作简单、灵活。


参考至: 《GoldenGate Windows and UNIX Administrator’s Guide》
              《叱咤风云:GoldenGate企业级运维实战》戴冠平著

              http://space.itpub.net/25264937/viewspace-716068

              http://andrewliu.blog.51cto.com/3272341/668289

              http://hi.baidu.com/oracle88/blog/item/c2c62408d1782024b0351d61.html
               http://blog.csdn.net/tianlesoftware/article/details/6976551
               http://blog.csdn.net/tianlesoftware/article/details/6982908

本文原创,转载请注明出处、作者

如有错误,欢迎指正

邮箱:czmcj@163.com

0
11
分享到:
评论

相关推荐

    数据初始化设置,及代码

    "数据初始化设置及代码" 在软件开发中,数据初始化是非常重要的一步。它不仅关系到软件的可移植性,还影响到软件的可靠性和效率。下面我们将对数据初始化的重要性和相关的知识点进行详细的介绍。 一、软件可移植性...

    quartz-job初始化数据表.zip

    "quartz-job初始化数据表.zip" 文件显然包含了用于设置Quartz作业调度系统的数据库表结构。 这个压缩包可能包含了一系列SQL脚本,用于在数据库中创建必要的表,这些表包括但不限于: 1. **QRTZ_JOB_DETAILS**:此...

    TIA博途_数据的保持型与初始化的具体方法和相关问题汇总.rar

    本资料“TIA博途_数据的保持型与初始化的具体方法和相关问题汇总”显然是关于在TIA博途中如何处理数据的保持性与初始化的深入探讨。以下将详细解析这两个关键概念及其在实际应用中的处理方法。 数据的保持性在PLC...

    8.3 详情页面数据初始化|uni-app 项目实战(详情页功能模块)|uni-app & uniCloud 从零入门开发《IT技术资讯类跨端应用》项目实战

    8.3_详情页面数据初始化|uni-app_项目实战(详情页功能模块)|uni-app_&_uniCloud_从零入门开发《IT

    ICM20602数据读取及初始化配置

    通过正确理解和使用自检、初始化配置和数据读取等关键功能,开发者可以充分发挥ICM20602的潜力,实现各种高精度的运动追踪和姿态检测应用。对于需要使用ICM20602的项目,理解并掌握这些知识点至关重要。

    C++类成员和数据成员初始化总结

    在C++编程中,类成员和数据成员的初始化是一个至关重要的概念,因为它直接影响到对象的创建和使用。这里我们将深入探讨这些知识点。 首先,当创建一个C++类的对象时,对象的构造过程遵循一定的顺序。这包括两步:1)...

    Java EE数据初始化应用中的设计模式解决方案.pdf

    Java EE 数据初始化应用中的设计模式解决方案是一种基于设计模式的数据初始化方法,旨在解决 Java EE 应用数据初始化时的先后顺序及依赖关系问题。该方法首先将要初始化的数据看做一个复杂对象,通过建造者模式的...

    C++全局变量初始化的一点总结

    零初始化的变量通常存放在BSS段,而常量初始化的变量则位于数据段,这两个阶段的初始化在程序启动时自动完成。 动态初始化则涉及运行时的动作,比如需要函数调用或类构造函数的初始化。这些变量的初始化在main函数...

    PCI设备BAR空间的初始化

    1. **数据传输的基础**:在PCI设备能够通过PCI总线进行数据传输之前,必须正确初始化其BAR寄存器。这是因为BAR寄存器用于指定设备的内存或I/O空间的基地址,从而决定了设备如何被访问。 2. **地址映射的关键**:PCI...

    AgileEAS.NET SOA中间件数据初始化工具使用教程 V5.01

    这个工具不仅简化了数据准备的过程,还能保证数据的一致性和准确性,尤其在复杂的企业级应用中,数据初始化工具能够大大提升工作效率。 **数据初始化过程** 1. **环境准备**:首先,确保你的系统已经安装了...

    学习java静态数据初始化.doc

    Java 静态数据初始化详解 在 Java 中,静态数据初始化是指在类加载过程中对静态变量的初始化。静态变量是在类加载时被初始化的,而不是在实例创建时。静态变量的初始化顺序是按照它们在类中的定义顺序进行的。 在 ...

    LS-DYNA3D中的应力初始化_lsdyna_应力初始化_

    利用实验数据进行应力初始化可以提高模拟的准确性,这通常需要与应变测量结合,如应变计或声发射传感器的数据。 8. **后处理与验证**:完成模拟后,通过后处理工具可视化和分析应力分布,对比实验结果或其他计算...

    linux USB驱动初始化流程及数据收发流程

    USB驱动初始化流程及数据收发流程对于理解USB通信机制至关重要,无论是作为USB主机(host)还是设备(device),都需要经过一系列步骤来建立有效的通信链路。 首先,我们来看USB驱动的初始化过程: 1. **USB Host ...

    日历表初始化数据.md

    2021年至2082年日历表

    系统初始化完成确认书

    2. **数据库初始化**:创建数据库结构,导入或生成必要的初始数据。 3. **权限设置**:根据用户的职责划分不同的权限等级,确保数据的安全性。 4. **系统配置**:根据客户需求调整系统的各项参数,如界面语言、时间...

    ST7701S_IPS.zip

    这份资料包括了ST7701的数据手册(datasheet)和初始化代码,对于理解和使用该芯片至关重要。 首先,**ST7701数据手册(datasheet)**是理解芯片功能和技术规格的关键文档。它包含了以下关键信息: 1. **芯片特性*...

    初始化省市区--sebs.sql

    初始化省市区--sebs.sql

    第二篇金蝶k3供应链系统初始化.pptx

    在本课程中,我们将学习如何对新帐套进行初始化设置,掌握供应链系统初始化流程及操作、系统参数的设置、基础资料的设置和初始数据录入等知识点。 一、初始化的概念 初始化是指完成手工与电脑系统的工作交接、...

    解决数码视讯Q5使用USB_Burning_Tool刷机时 提示 初始化DDR/读取初始化结果/USB错误

    解决数码视讯Q5使用USB_Burning_Tool刷机时 提示 初始化DDR/读取初始化结果/USB错误

    C# 网口通讯Udp的初始化以及数据的收发

    C# 网口通讯Udp的初始化以及数据的收发 C# 网口通讯Udp的初始化以及数据的收发

Global site tag (gtag.js) - Google Analytics