一、环境
操作系统 Microsoft Windows Server 2003 R2 Enterprise Edition Service Pack 2
数据库版本: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
GoldenGate: Oracle GoldenGate Capture for Oracle Version 11.1.1.1.2
注:在安装goldgate之前,需要先安装好Oracle数据库,并且需要安装Microsoft Visual C++ 2005 SP1 Redistributable ,这是Windows环境下Visual C++库的运行组件。Goldgate运行的时候会用到一些库,所以不安装,可能导致“系统无法执行指定的程序”的错误。
Microsoft Visual C++ 2005 SP1 Redistributable下载地址:
链接:https://pan.baidu.com/s/13lPN6HbFM_YCo8Pbfccrgw
提取码:t8l0
GoldenGate软件下载地址:
链接:https://pan.baidu.com/s/12m_CNuxZEdoKEemr4OY67g
提取码:b7zb
二、安装Goldgate软件
1、设置Oracle数据库的环境变量
ORACLE_HOME=E:\app\Administrator\product\11.2.0\dbhome_1
ORACLE_SID=orcl
2、将下载好的GoldenGate软件放到E盘(软件的位置可自行定义),然后解压缩,然后进行E:\goldgate目录,运行ggsci,进入ogg管理控制台。输入命令:create subdirs,让ogg创建其需要用到的目录。
3、把manager进程添加到windows服务。
手动指定服务名:在命令行模式下切换到Ogg目录,用ggsci命令进入GGSCI交互界面。然后输入edit param ./GLOBALS,(注意:./GLOBALS最好使用大写)在弹出的记事本编辑器中,输入以下代码:
MGRSERVNAME GGMGR
保存后退出,回到windows命令提示符,在Ogg根目录用install命令添加服务:install addservice,然后手动命名的服务,这样就添加成功了。当然也可以直接使用默认的服务名GGSMGR----直接在Ogg目录输入install addservice.
注:源端和目标端操作一样。
三、配置Oracle数据库
注:10g要检查回收站功能是否关闭;11g则不必检查。这里咱们用11g,所以不必检查。
在源端库中关闭回收站
SQL>show parameter recyclebin
SQL>alter system set recyclebin=off deferred; ---非立即生效
注意:如果是oracle10.1版本需要使用一下命令。
alter system set "_recyclebin=off";
默认情况归档模式、附加日志、强制日志参数是关闭的。
SQL> select supplemental_log_data_min from v$database;
启动归档模式、附加日志、强制日志。其中开启归档模式需要重启数据库,开启附加日志、强制日志不需要重启数据库。
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database force logging;
SQL> alter database add supplemental log data;
SQL> alter database open;
查看数据库级别的补充日志是否开启:
select supplemental_log_data_min from v$database;
四、创建Goldgate管理用户,并授权
源端和目标端:
--创建表空间
create tablespace OGG_D datafile 'F:\app\Administrator\oradata\dleam75\OGG_D_01.dbf' size 500m autoextend on;
---创建临时表空间
create temporary tablespace OGG_T tempfile 'F:\app\Administrator\oradata\dleam75\OGG_T_01.dbf' size 500m autoextend on;
---创建用户并指定默认表空间
create user ogg identified by oracle default tablespace OGG_D temporary tablespace OGG_T;
源端和目标端授权:
grant connect,resource,unlimited tablespace to ogg;
grant execute on utl_file to ogg;
源端授权:
grant select any dictionary,select any table to ogg;
grant alter any table to ogg;
grant flashback any table to ogg;
grant execute on DBMS_FLASHBACK to ogg;
目标端授权:
grant select any dictionary,select any table to ogg;
grant CREATE SESSION, ALTER SESSION to ogg;
grant alter any table to ogg;
grant flashback any table to ogg;
grant execute on DBMS_FLASHBACK to ogg;
grant insert any table to ogg;
grant delete any table to ogg;
grant update any table to ogg;
源端添加表级trandata
---先通过goldgate用户登录数据库
dblogin userid ogg,password oracle
---给表添加trandata
add trandata ddling.*
五、配置源端的进程组
1、MGR管理进程组
进入E:\goldgate目录下,运行ggsci.exe
GGSCI (DB7) 2> edit param mgr
PORT 7809
DYNAMICPORTLIST 7809-7849
AUTOSTART EXTRACT *
AUTORESTART EXTRACT *, RETRIES 5, WAITMINUTES 2
PURGEOLDEXTRACTS E:\goldgate\dirdat\em*,USECHECKPOINTS, MINKEEPDAYS 5
PORT 7839 ## 通信端口7839, 源端和目标端需要保持一致。
DYNAMICPORTLIST 7840-7939 ##动态端口列表的范围从7840到7939。当制定端口被占用或者出现通信故障,管理进程将会从列表中选择下一个端口尝试连接,避免通信端口的单点故障。
AUTOSTART EXTRACT * ##当MGR进程启动后启动EXTRACT进程
AUTORESTART EXTRACT *, RETRIES 5, WAITMINUTES 2 ##当EXTRACT进程中断后尝试自动重启,每隔2分钟尝试启动一次,尝试5次。
PURGEOLDEXTRACTS /home/oracle/product/ogg_src/dirdat/*, USECHECKPOINTS, MINKEEPDAYS 5 ##定期清理dirdat路径下的本地队列(local trail)。保留期限10天,过期后自动删除。从而控制队列文件的目录不会增长过大。
LAGREPORTHOURS 1 ##每隔一小时检查各进程延时情况,并记录到goldengate report文件。
LAGINFOMINUTES 30 ##进程复制延时超过30分钟,向日志文件记录一条错误日志
LAGCRITICALMINUTES 45 ## 传输延时超过45分钟将写入警告日志
通过start mgr命令启动mgr进程,info all查看进程状态。
2、配置源端的extract进程
extract进程:
在源端用add extract命令创建一个extract进程:
GGSCI (DB7) 5>add extract exteam,tranlog begin now
用add exttrail命令创建本地trail文件,extract组负责写这部分文件,pump进程服务读它
GGSCI (DB7) 6>add exttrail ./dirdat/em,extract exteam
GGSCI (DB7) 7>edit param exteam
EXTRACT exteam
SETENV (ORACLE_SID = orcl)
USERID ogg, PASSWORD oracle
DYNAMICRESOLUTION
EXTTRAIL E:\goldgate\dirdat\em
TABLE ddling.*;
参数解释如下:
dblogin userid ogg, password ogg ##使用ogg用户登录GoldenGate
add extract ext1,tranlog,begin now ##创建主抽取进程
add exttrail /home/oracle/product/ogg_src/dirdat/sr, extract ext1 ##创建源端trail文件并指定路径
edit param ext1
##-----------------
extract ext1
SETENV(ORACLE_SID="orcl") ##设置Oracle数据库实例sid
SETENV(NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8) ##设置goldengate的字符集变量信息,此处值会覆盖操作系统级别的变量。该值需要和数据库字符集匹配一致。
userid ogg, password ogg
REPORTCOUNT EVERY 30 MINUTES, RATE ##每隔30分钟报告一次从程序开始到现在的抽取进程或者复制进程的事物记录数,并汇报进程的统计信息
DISCARDFILE /home/oracle/product/ogg_src/dirrpt/extsr.dsc, APPEND, MEGABYTES 1024 ##将执行失败的记录保存在discard file中,discard file文件记录了GoldenGate进程错误、数据库错误、GoldenGate操作等信息。该文件位于/home/oracle/product/ogg_src/dirrpt/extsr.dsc,大小为1024MB。 文件中已经包含记录的话,再后面继续追加,不删除之前的记录。
DISCARDROLLOVER AT 3:00 ## 为了防止discard file被写满,每天3:00做一次文件过期设定
EXTTRAIL /home/oracle/product/ogg_src/dirdat/sr ##队列文件路径, trail文件存放路径。
DYNAMICRESOLUTION ## 有时候开启OGG进程的时候较慢,可能是因为需要同步的表太多,OGG在开启进程之前会将需要同步的表建立一个记录并且存入到磁盘中,这样就需要耗费大量的时间。使用该参数来解决此问题。
ddl include all ##配置DDL语句也会同步
DBOPTIONS ALLOWUNUSEDCOLUMN ## 用于阻止抽取进程抽取数据时由于表含有unused列而导致进程异常终止(abend)。使用该参数,抽取进程抽取到unused列时也会向日志文件记录一条警告信息。
FETCHOPTIONS NOUSESNAPSHOT ## 默认值为 usesnapshot,表示利用数据库闪回读取数据。Nousesnapshot表示直接从原表读取相关数据。
FETCHOPTIONS FETCHPKUPDATECOLS ##当使用了HANDLECOLLISIONS时,请使用该参数。复制进程出现丢失update记录(missing update)并且更新的是主键,update将转换成insert。由于插入的记录可能不是完整的行,若要保证完整需要加入此参数
table ogg.*; ##需要复制的对象列表
3、配置源端的pump进程
GGSCI (DB7) 8>add extract pump_em,exttrailsource ./dirdat/em
GGSCI (DB7) 9>add rmttrail ./dirdat/em,extract pump_em
GGSCI (DB7) 10>edit param pump_em
EXTRACT pump_em
USERID ogg, PASSWORD oracle
RMTHOST 172.12.9.33, MGRPORT 7809
PASSTHRU
NUMFILES 5000
RMTTRAIL ./dirdat/em
--DYNAMICRESOLUTION
TABLE ddling.*;
edit param dpump1
extract dpump1
userid ogg, password ogg
SETENV(ORACLE_SID="orcl")
SETENV(NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8)
RMTHOST 192.168.66.3, mgrport 7839, COMPRESS ## 目标端主机IP,管理进程端口号,投递前压缩队列文件
PASSTHRU ##表示传输进程直接跟抽取进程交互,而不再和数据库进行交互,减少数据库资源的利用。
ddl include all
RMTTRAIL /home/oracle/product/ogg_trg/dirdat/tr ##目标端保存队列文件的目录
DYNAMICRESOLUTION ##动态解析表名
table ogg.*;
##指定Data Pump进程发送trail文件到目标端的位置(目标端trail文件添加到队列中)
add rmttrail /home/oracle/product/ogg_trg/dirdat/tr, extract dpump1
六、配置目标端的进程组
1、MGR管理进程组
进入E:\goldgate目录下,运行ggsci.exe
GGSCI (easdb) 3> edit param mgr
PORT 7809
DYNAMICPORTLIST 7809-7849
AUTOSTART REPLICAT *
AUTORESTART REPLICAT *, RETRIES 5, WAITMINUTES 2
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
PURGEOLDEXTRACTS E:\goldgate\dirdat\em*,usecheckpoints,minkeepdays 3
PORT 7839 ## 通信端口7839, 源端和目标端需要保持一致。
USERID ogg, PASSWORD ogg ## GoldenGate用户登录数据库的用户名和密码,密码未做加密处理。如果密码需要加密使用:GGSCI (dbtrg) 1> encrypt password pwd ,ENCRYPTKEY default 可以得到加密后的密码字符串,之后配置进程若使用加密过的密码,需要带参数(ENCRYPTKEY default)。例如:USERID ogg, PASSWORD xxx(加密过的密码) ,ENCRYPTKEY default
DYNAMICPORTLIST 7840-7939 ## ##动态端口列表的范围从7840到7939。当制定端口被占用或者出现通信故障,管理进程将会从列表中选择下一个端口尝试连接,避免通信端口的单点故障。
AUTOSTART REPLICAT * ##当MGR进程启动后启动REPLICAT进程
AUTORESTART REPLICAT *, RETRIES 5, WAITMINUTES 2 ## 当REPLICAT进程中断后尝试自动重启,每隔2分钟尝试启动一次,尝试5次。
PURGEOLDEXTRACTS /home/oracle/product/ogg_trg/dirdat/*, USECHECKPOINTS, MINKEEPDAYS 10 ##定期清理dirdat路径下的本地队列(local trail)。保留期限10天,过期后自动删除。从而控制队列文件的目录不会增长过大。
PURGEDDLHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 10 ##删除DDL历史表,最小保存7天,最大保存10天。
PURGEMARKERHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 10 ## 删除MARKER历史表,最小保存7天,最大保存10天。
LAGREPORTHOURS 1 ##每隔一小时检查各进程延时情况,并记录到goldengate report文件。
LAGINFOMINUTES 30 ##进程复制延时超过30分钟,向日志文件记录一条错误日志
LAGCRITICALMINUTES 45 ##传输延时超过45分钟将写入警告日志
GGSCI (easdb) 4> start mgr
Managerstarted.
查看进程状态可发现 MANAGER状态为 RUNNING:
GGSCI (easdb) 5> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
2、配置目标端的replicat进程
先设置GLOBALS参数文件
GGSCI (easdb as ogg@orcl) 4> dblogin userid ogg,password oracle
Successfully logged into database.
GGSCI (easdb as ogg@orcl) 5> add checkpointtable ogg.oggckpt
Successfully created checkpoint table ogg.oggckpt.
GGSCI (easdb as ogg@orcl) 6> edit params ./GLOBALS
配置如下:
CHECKPOINTTABLE ogg.oggckpt
exit //退出,以使全局参数生效
创建完毕后,会在OGG_D表空间创建以下两张表,可用ogg用户登陆查看:
SQL> conn ogg/oracle
Connected.
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
-------------------- --------------------- ----------
OGGCKPT TABLE
OGGCKPT_LOX TABLE
配置replicat进程
GGSCI (easdb as ogg@orcl) 7>add replicat repem,exttrail ./dirdat/em
GGSCI (easdb as ogg@orcl) 8>edit params repem
REPLICAT repem
SETENV (ORACLE_SID=orcl)
USERID ogg, PASSWORD oracle
REPERROR DEFAULT, Discard
ASSUMETARGETDEFS
DISCARDFILE ./dirrpt/repeam.dsc, APPEND, MEGABYTES 2000
dynamicresolution
MAP ddling.*, TARGET ddling.*;
##创建replicat进程
add replicat rep1, exttrail /home/oracle/product/ogg_trg/dirdat/tr, checkpointtable ogg.checkpoints
edit param rep1
#------------------
REPLICAT rep1
SETENV(ORACLE_SID="orcl")
SETENV(NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8)
USERID ogg, PASSWORD ogg
REPORT AT 06:00 ##每天06:00定期生成一个report文件
REPORTCOUNT EVERY 30 MINUTES, RATE ##每隔30分钟报告一次从程序开始到现在的抽取进程或者复制进程的事物记录数,并汇报进程的统计信息
REPORTROLLOVER AT 02:00 ##为了防止report file被写满,每天2:00做一次文件过期设定
REPERROR DEFAULT, ABEND ## 除了特殊指定的REPERROR语句,报告所有复制期间出现的错误,回滚非正常中断的事物和进程。遇到不能处理的错误就自动abend,启动需要人工干预处理
ALLOWNOOPUPDATES ##当源表有排除列情况或者有目标表不存在的列时,当更新这列goldengate默认报错。应用该参数后,即可让goldengate生成一条警告信息而不是报错。
ASSUMETARGETDEFS ##使用ASSUMETARGETDEFS参数时,用MAP语句中指定的生产库源表和灾备端目标表具有相同的列结构。它指示的Oracle GoldenGate不在生产端查找源表的结构定义。
HANDLECOLLISIONS ##用于goldengate自动过滤不能出来的冲突记录,为了严格保证数据一致性
DISCARDFILE /home/oracle/product/ogg_trg/dirrpt/repsa.dsc, APPEND, MEGABYTES 1024 ##将执行失败的记录保存在discard file中,discard file文件记录了GoldenGate进程错误、数据库错误、GoldenGate操作等信息。该文件位于./dirrpt/repsa.dsc,大小为1024MB。 文件中已经包含记录的话,再后面继续追加,不删除之前的记录。
DISCARDROLLOVER AT 02:00 ##为了防止discard file被写满,每天2:00做一次文件过期设定
ddl include all ##设置DDL语句也会同步
ddlerror default ignore retryop ##开启DDL复制后,目标端Replicat进程参数文件中必须配置忽略或者过滤DDLERROR的参数
MAP ogg.*, target ogg.*; ##对应需要复制的对象,默认一一对应传输进程
至此,源端和目标端的所有进程配置完毕,接下来就是启动进程和初始化数据库。
备份数据库准备:
先查看当前数据库的scn,并记录下来
SYS@SIT> select current_scn from v$database;
CURRENT_SCNacle
-----------
22482934597 ---千万记住,在后面启动replicat进程需要用到;
在E盘创建目录dir,并授权
SYS@SIT> create directory MY_DIR as 'E:\dir';
Directory created.
SYS@SIT> grant read,write on directory MY_DIR to system;
创建完毕后,开始备份数据库(以schemsa备份数据库)
expdp system/oracle schemas=ddling directory=MY_DIR dumpfile=ddling.dmp logfile=ddling.log flashback_scn=723538
备份完毕后,文件存放在E:\dir目录下。
目标端同样在E盘创建目录dir,并授权,操作和源端一样。
接下来就可以通过impdp命令还原数据库
impdp system/oracle directory=MY_DIR dumpfile=ddling.dmp logfile=ddling.log
最后进行验证。