风影子
作者风影子·2012-07-18 14:46
数据库管理员·深圳

Goldengate动手实验之二sqlserver与sqlserver的单向复制

字数 2958阅读 7754评论 1赞 0
      前段时间研究了下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

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论1 条评论

sun642514265sun642514265数据库管理员北京弘基时代
2013-07-01 16:12
根据你写的配置 ,两个数据库不能实现同步啊  而且extract和replicat进程都是stoped状态啊?
Ctrl+Enter 发表

作者其他文章

相关问题

相关资料

X社区推广