拓扑园

  • O&M
    • Universal部署
    • PHP+VUE+Laravel相关
  • Oracle性能优化
  • Oracle项目案例
    • Oracle近期项目案例(目录)
    • Oracle实战问题解析(目录)
    • Oracle数据库名变更流程(2种方式)
    • Oracle数据库目录更换流程(使用Oracle的clone工具)
    • Oracle数据库迁移方案(目录)
    • 标准化文档系列
  • Oracle基础知识
    • LLL的Oracle培训(分类)
    • LLL的docker培训(分类)
    • 标准化文档系列--(分类)
    • Oracle核心经典分析(分类)
    • 图灵小队----(分类并包含以下文章)
    • --MySQL8.0/Oracle/Memcached/Redis等安装配置于RHEL/OL6/7/8.X系列-运行环境最优配置
    • --PG安装配置于RHEL/9X系列-运行环境最优配置
    • --自动维护任务详解-开启、关闭信息统计收集(统计信息)
    • --图灵小队—Oracle/PostgreSQL下创建一个用户测试表(自行定义数据行)
    • --图灵小队-Oracle存储过程导出表的明细_UTL_FILE(文章)
    • --图灵小队-Oracle数据库删除/卸载操作指南(文章)
    • --图灵小队-Oracle常用性能查询SQL语句(文章)
    • --图灵小队-Oracle数据库上线前检查(文章)
    • --图灵小队-Oracle常用SQL语句(文章)
    • --图灵小队—Linux/Oracle脚本/MySQL合集(持续更新)
    • --图灵小队-Oracle技巧记录(文章)
    • ADG
    • RAC
    • ASM
    • OGG
    • RMAN
    • EXPDP/IMPDP
    • 工厂数据导入导出系列
  • MySQL
    • MySQL数据库规范
    • MySQL项目案例
    • MySQL安装配置
    • MYSQL集群项目
    • MySQL常见处理
    • MySQL-Sysbench专题
    • MySQL-Percona Toolkit专题
  • Linux
    • Shell编程
    • kubernetes
    • docker
    • Linux
    • PHP
    • Nginx
    • haproxy
    • mail
    • 网站
    • 域名
    • 网址收藏
  • 数据中心
    • 新框架系统集合
    • 工作文档
    • EBS数据文件扩容
    • VMware虚拟化
    • EBS系列
    • 大数据
    • SVN
    • zabbix
    • SAP
    • 备份相关
    • FC交换机
    • SVN
  • K-Studing
    • D8-Python学习
    • Oracle/MySQl等面试题
    • LG-MySQL
    • LG-Docker/K8S
    • LG-PostgreSQL
    • LG-ORACLE_BBED
    • LG-ORACLE
    • LG-Elasticsearch(ES)+ELK
    • Oracle-19C-OCP
    • WERN_ORACLE培训
    • redis数据库
    • Nginx培训学习系列
  • 其他
    • 外研英语4年级下册-听力
    • 影视系列
    • 如何使用iTunes软件通过抓包下载旧版本的ios的app
天高任鸟飞
Oracle/MySQL数据库恢复/数据迁移/生产规范报告技术交流:TEL:18562510581(微信同号);加微信入群
  1. 首页
  2. Oracle
  3. OGG
  4. 正文

Oracle GoldenGate (OGG)12c for oralce 12c/Centos 7.3 之十——初始化数据(转)

2019年6月23日 1045点热度 0人点赞 0条评论

转自(https://czmmiao.iteye.com/blog/1603336)

概述

在进行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:速度较慢(网友的测试结果,笔者未做详细测试),但操作简单、灵活。

http://ju.outofmemory.cn/entry/276004 Oracle GoldenGate 12.2 For Oracle New Feature: 集成

参考至: 《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

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2019年7月26日

admin

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

COPYRIGHT © 2022 拓扑园. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鲁ICP备2021020523号

鲁ICP备2021020523号