前段时间研究了下goldengate,自己也动手做了些实验,主要进行了三类实验,一是oracle到oracle的单向复制,二是sqlserver到sqlserver的单向复制,三是sqlserver到oracle的单向复制。通过这三个实验,算是对 goldengate有了一个初步的了解。本文是第二个实验, sqlserver与sqlserver的单向复制,这里省去复制相关的验证,我仅是在源数据库做相关DML操作然后看目标端是否同步进行了源数据库的DML操作。
实际上sqlserver到sqlserver的复制相关的资料不多,我想可能是因为sqlserver有自己的复制技术(发布订阅),不太可能用goldengate来进行同步。但我用过sqlserver的发布及订阅,有一个问题就是没有主键的表是不能进行同步的,而有些设计不好的数据库中往往就有很多这种情况。所以还是想着做了这么个实验。最后实验是成功的,但有个地方没弄明白,就是在不允许停机的生产库中,如何初始化,我模拟过这种场景,发现每次都是在rep进程启动后生产库产生的数据才能同步过来,而在恢复数据库后产生的数据到启用rep进程之间的数据都没同步过来,这个还望知道的人指点一下,oracle在启用rep进程的时候可以指定从哪个SCN开始应用, sqlserver不知道如何实现。
实际操作的时候没有注意整理文档,直接用记事本记录的,记得有点杂乱,得再找个时间好好整理一下,但关键内容都在。
配置ODBC(系统DSN),需要注意的是64位操作系统需要运行C:WindowsSysWOW64odbcad32.exe进行配置
exec sp_dboption 'cddb', 'trunc. log on chkpt.'
exec sp_dboption 'cddb', 'trunc. log on chkpt.', false
exec sp_dboption 'cddb', 'select intobulkcopy'
exec sp_dboption 'cddb', ' select intobulkcopy ', false
做一次数据库全备
GGSCI> EDIT PARAM mgr
--GoldenGate主进程端口号
PORT 7809
--GoldenGate为进程间通讯动态分配的端口段,注意这里如果分配的端口端少于extract-replicat进程对的话,会导致部分进程因通讯失败而出错。
DYNAMICPORTLIST 7810-7850
-- 指定ExtractReplicat进程的自动重启(每次尝试时间间隔为5秒,最多尝试5次)
AUTORESTART ER *, WAITMINUTES 5, RETRIES 5
GGSCI> START MGR
DBLOGIN SOURCEDB dsn_ggExtdb USERID sa, PASSWORD 123456
ADD TRANDATA dbo.*
INFO TRANDATA dbo.*
增加Capture任务(capdb1)
--新增抽取进程capdb1,基于日志方式,立即生效
GGSCI> ADD EXTRACT capdb1, TRANLOG, BEGIN NOW
INFO EXTRACT capdb1
本地Trail文件的位置指定
GGSCI> ADD EXTTRAIL c:ggdirdatlt, EXTRACT capdb1
配置参数文件
--这里不同的是我们省略了 SOURCEISTABLE 参数并引入一个新参数:TRANLOGOPTIONS MANAGESECONDARYTRUNCATIONPOINT。
--此选项告诉 Extract 进程定期检查和删除 CDC 捕获作业,从而提高性能并减小捕获数据所占用的空间
GGSCI> EDIT PARAM capdb1
参数文件例
EXTRACT capdb1
TRANLOGOPTIONS MANAGESECONDARYTRUNCATIONPOINT
SOURCEDB dsn_ggExtdb, USERID sa, PASSWORD 123456
EXTTRAIL c:ggdirdatlt
DISCARDFILE c:ggDIRRPTcapdb1.DSC, PURGE
TABLE dbo.*;
DataPump的配置
Data Pump的配置(GGSCI中执行)
①增加Data Pump(pumpdb12)任务及本地Trail目录
GGSCI> ADD EXTRACT pumpdb12, EXTTRAILSOURCE c:ggdirdatlt,BEGIN NOW
②指定远程Trail文件保存的目录
GGSCI> ADD RMTTRAIL c:ggdirdatrt, EXTRACT pumpdb12
③配置参数文件
GGSCI> EDIT PARAM pumpdb12
参数文件例
EXTRACT pumpdb12
SOURCEDB dsn_ggExtdb, USERID sa, PASSWORD 123456
RMTHOST 10.125.20.11, MGRPORT 7809
RMTTRAIL c:ggdirdatrt
DISCARDFILE c:ggDIRRPTpumpdb12.DSC, PURGE
TABLE dbo.*;
①启动Capture(在源端)
GGSCI> START capdb1
②启动Data Pump(在源端)
GGSCI> START pumpdb12
目标库操作
恢复数据库
EDIT PARAMS ./GLOBALS
CHECKPOINTTABLE dbo.ggschkpt
exit
ggsci
DBLOGIN SOURCEDB dsn_ggRepdb, USERID sa PASSWORD 123456
ADD CHECKPOINTTABLE
增加Replicat(repdb2)任务
GGSCI> ADD REPLICAT repdb2, EXTTRAIL c:ggdirdatrt, BEGIN NOW
编辑参数文件
GGSCI> EDIT PARAM repdb2
参数文件例
REPLICAT repdb2
ASSUMETARGETDEFS
HANDLECOLLISIONS
TARGETDB dsn_ggRepdb, USERID sa, PASSWORD 123456
DISCARDFILE c:ggDIRRPTrepdb2.DSC, PURGE
MAP dbo.*, TARGET dbo.*;
③启动Replicat(在目标端)
GGSCI> START repdb2
补充: 停止复制
①停止Capture(在源端)
②停止Data Pump(在源端)
③停止Replicat(在目标端)
GGSCI> STOP repdb2
GGSCI> STOP pumpdb12
GGSCI> STOP capdb1
添加新评论1 条评论
2013-07-01 16:12