- 浏览: 4368872 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (634)
- Oracle日常管理 (142)
- Oracle体系架构 (45)
- Oracle Tuning (52)
- Oracle故障诊断 (35)
- RAC/DG/OGG (64)
- Oracle11g New Features (48)
- DataWarehouse (15)
- SQL, PL/SQL (14)
- DB2日常管理 (9)
- Weblogic (11)
- Shell (19)
- AIX (12)
- Linux/Unix高可用性 (11)
- Linux/Unix日常管理 (66)
- Linux桌面应用 (37)
- Windows (2)
- 生活和工作 (13)
- 私人记事 (0)
- Python (9)
- CBO (15)
- Cognos (2)
- ORACLE 12c New Feature (2)
- PL/SQL (2)
- SQL (1)
- C++ (2)
- Hadoop大数据 (5)
- 机器学习 (3)
- 非技术 (1)
最新评论
-
di1984HIT:
xuexilee!!!
Oracle 11g R2 RAC高可用连接特性 – SCAN详解 -
aneyes123:
谢谢非常有用那
PL/SQL的存储过程和函数(原创) -
jcjcjc:
写的很详细
Oracle中Hint深入理解(原创) -
di1984HIT:
学习了,学习了
Linux NTP配置详解 (Network Time Protocol) -
avalonzst:
大写的赞..
AIX内存概述(原创)
概述
在进行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.
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
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
发表评论
-
Duplicate a Database Using RMAN in Oracle Database 11g Release 2
2016-11-03 15:38 934Duplicate a Database Using RMA ... -
grid control 安装总结 (三)之EMD upload error: uploadXMLFiles skipped或忘记OMS密码
2014-11-17 17:16 2766[oracle@anbob agent10g]$ bin/e ... -
Grid Control服务端看不到Agent相关信息,同时OMS状态为unknown处理
2014-11-17 17:14 2142一次Grid Control的agent是启动的,但是在GC ... -
给11gR2 RAC添加LISTENER监听器并静态注册
2014-10-22 17:52 3146之前有同学想要给11gR2的RAC添加LISTENER监听器 ... -
HOW TO REMOVE CRS AUTO START AND RESTART FOR A RAC INSTANCE
2014-10-12 20:08 1457Subject: HOW TO REMOVE CRS AU ... -
How To Enable Archive Logging In RAC Environment [ID 1186764.1]
2014-10-12 19:45 1008How To Enable Archive Logging ... -
Oracle 11g RAC使用Manual和Policy Managed方法配置
2014-10-12 17:25 8847软件环境: 操作系统:Red Hat Enterpris ... -
Moving OCR and Voting Disk to Oracle ASM Online
2014-10-12 16:35 2620Prior Oracle 11gR2, it was only ... -
Oracle 11g R2的启动与关闭(原创)
2014-10-10 15:04 27177概述 Oracle 11gR2 中对CRSD资源进行了重新 ... -
重新配置与卸载11gR2 Grid Infrastructure
2014-10-10 08:24 2285概述Oracle 11g R2 Grid Infrastru ... -
Data Guard Broker Properties
2014-10-07 16:15 959Data Guard Broker Properties ... -
Data Guard - Snapshot Standby Database配置
2014-10-07 07:39 928概述一般情况下,物理standby数据库处于mount状态 ... -
Active Data Guard
2014-10-06 19:27 865Oracle Active Data Guard is a ... -
Data Guard Broker系列之六:Fast-Start Failover
2014-10-06 18:29 3060Fast-Start Failover 基本概念 Fa ... -
Data Guard Broker系列之五:数据库角色转换
2014-10-06 18:28 1220数据库转换的基本概 ... -
Data Guard Broker系列之四:数据库管理
2014-10-06 18:27 1188数据库状态管理 数据 ... -
Data Guard Broker系列之三:Data Guard Broker配置管理
2014-10-06 16:56 1255配置data guard broker配置文件基本参数 ... -
Data Guard Broker系列之二:Data Guard Broker配置实战
2014-10-05 16:16 1568配置之前DG环境状态 测试的DG环境安装在同一个机器上, ... -
Data Guard broker系列之一:Data Guard Broker基础
2014-10-05 16:13 2264Data Guard broker概览 Data ... -
Dataguard切换保护模式(从MAXIMUM PERFORMANCE 到 maximize availability)
2014-10-05 14:52 12341. 首先查看主库当前保护模式(主库操作)SQL> s ...
相关推荐
主要介绍了微信小程序首页数据初始化失败的解决方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
关于sqlserver数据库 部署OGG环境,初始化数据,从sqlserver 数据库到oracle数据库同步数据
8.3_详情页面数据初始化|uni-app_项目实战(详情页功能模块)|uni-app_&_uniCloud_从零入门开发《IT
ICM20602数据读取及初始化配置,SPI通信,自检,初始化配置,读取数据,有需要的可以拿去使用。
数据初始化,选择备份点,初始化,备份,恢复等等ddddd
quartz-job数据库初始化表一些表结构整理
数据初始化用例源代码,有助于初学者练习。
混沌映射sin映射初始化种群,与标准pso求解sphere函数,精度更好
关于MSA 2050 数据存储初始化操作手册
数据开发-数据初始化方案
matlab初始化数组
初始化省市区--sebs.sql
解决数码视讯Q5使用USB_Burning_Tool刷机时 提示 初始化DDR/读取初始化结果/USB错误
注意:本文所说的全局变量指的是 variables with static storage,措词来自 c++ 的语言标准文档。 什么时候初始化 ... static initialization: 静态初始化指的是用常量来对变量进行初始化,主要包括 zero init
比赛工程2,初始化上行至10层;电梯PLC;好像是六部十层;;比赛工程2,初始化上行至10层;电梯PLC;好像是六部十层;;比赛工程2,初始化上行至10层;电梯PLC;好像是六部十层;;比赛工程2,初始化上行至10层;电梯PLC...
C++类成员和数据成员初始化总结 C++为类中提供类成员的初始化列表 类对象的构造顺序是这样的: 1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员 2.进入构造函数后在构造函数中执行一般计算 1.类...
C# 网口通讯Udp的初始化以及数据的收发 C# 网口通讯Udp的初始化以及数据的收发
主要介绍了C#中结构(struct)的部分初始化和完全初始化,通过实例分析了结构初始化中常见的错误及技巧,有助于加深对C#结构(struct)的认识,需要的朋友可以参考下
板初始化程序板初始化程序板初始化程序板初始化程序板初始化程序板初始化程序板初始化程序板初始化程序板初始化程序板初始化程序板初始化程序板初始化程序板初始化程序
vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue初始化模板vue...