设为首页 收藏本站
查看: 800|回复: 0

[经验分享] DB2 SQL Replication 配置方法

[复制链接]

尚未签到

发表于 2018-10-19 11:58:42 | 显示全部楼层 |阅读模式
Replication Server 产品包括 SQL 复制和 Q 复制两种技术。相比于 SQL 复制,Q 复制的数据传输技术借助于 IBM 队列机制,从而提高了数据的传输效率和可靠性,可以达到每秒复制几千个表、几十万行数据 , 在几千英里的距离下端到端的延迟不到 1 秒(从源端 DB2 commit 到目标端 DB2 commit)。Change Data Capture(CDC) 主要采用基于日志的变更数据捕获技术以实现对关键业务系统的实时数据复制,同时不影响业务系统性能。CDC 最大优点在于其对异构数据库的支持和与 IBM 产品的集成,为客户在数据迁移,整合,同步,动态数据仓库等应用中提供了卓越的解决方案。这次分享讲的是SQL replication。以下是本人亲测通过的配置,各位有兴趣的话可以按着步骤做一次。  [测试环境]
  DB2 9.7.0.11
  LINUX 6.5
  Source Table: EMPLOYEE(ID, FAMILYNAME, GIVENNAME)
  Target Table: TRGEMPLOYEE,只复制源表的第1和第3列;不需要预先定义,会自动生成
  数据库名:TESTDB,本例子为源库和目标库是同一数据库
  (如果源与目标不在同一物理主机上,则需要分别在每台物理主机上进行远程的catalog操作)
  [具体过程]
  Step1: 确保TESTDB数据库采用的是归档日志,create employee表并插入两行数据
  1.   创建数据库
  $ db2 "create database testdb on /home/db2inst1/testdb using codeset gbk territory CN pagesize 32 k"
  2.   将数据库改为采用归档日志模式
  $ db2 update db cfg for testdb using LOGARCHMETH1 LOGRETAIN
  3.   连接数据库并查看是否更新为LOGRETAIN(修改后需重启数据库使参数生效)
  $ db2 connect to testdb
  $ db2 get db cfg | grep -i LOGARCHMETH1
  First log archive method                 (LOGARCHMETH1) = LOGRETAIN
  4.   备份数据库(修改归档模式之后需要备份一次数据库)
  $ db2 backup db testdb
  5.   创建表空间,指定表空间名,页大小以及表空间大小
  $ db2 "CREATE LARGE TABLESPACE tbs_test
  PAGESIZE 32768 MANAGED BY DATABASE
  USING (FILE '/home/db2inst1/testdb/tbs_test' 500M )"
  6.   创建源表(注意源表一定要有primary key或者unique index,否则后面操作会失败)
  $ db2 "create table employee(id int NOT NULL, FAMILYNAME char(20), GIVENNAME char(20), PRIMARY KEY (ID) )"
  7.   在源表中插入数据
  $ db2 "insert into employee values(1,'a','aa'),(2,'b','bb')"
  Step2: 连到数据库,并运行以下脚本:
  1.   创建一个脚本(内容包括设置 server、创建control表、创建REGISTRATION、创建预定集、创建预定集成员)
  $ cat> sqlrep.asnclp
  以下为脚本内容:(蓝色字体为变量,可根据实际情况设定)

  #>  # ('Control' and 'Target' are usually the same)
  SET SERVER CAPTURE TO DB TESTDB>db2inst1 PASSWORD "pwd";
  SET SERVER CONTROL TO DB TESTDB>db2inst1 PASSWORD "pwd";
  SET SERVER TARGET TO DB TESTDB>db2inst1 PASSWORD "pwd";
  SET RUN SCRIPT NOW STOP ON SQL ERROR ON;
  # Add meta data tables to hold information about
  # your source and target tables.
  CREATE CONTROL TABLES FOR CAPTURE SERVER;
  CREATE CONTROL TABLES FOR APPLY CONTROL SERVER;

  #>  # Changed data will be 'staged' (stored) in a 'CD' table
  CREATE REGISTRATION (DB2INST1.EMPLOYEE) DIFFERENTIAL REFRESH STAGE CDEMPLOYEE COLS (id, GIVENNAME);
  # A subscription maps a source table to a target table.
  # Subscriptions are grouped in sets.
  # Every subscription must be in a set, so we make a set here:
  CREATE SUBSCRIPTION SET SETNAME SET00 APPLYQUAL MYQUAL1 ACTIVATE YES TIMING INTERVAL 1 START DATE "2008-01-01" TIME "01:00:00.000000";
  # Each subscription is a member of a set.
  # If needed, you can create the target table as we do here:
  SET PROFILE TBSPROFILE FOR OBJECT TARGET TABLESPACE OPTIONS UW USING FILE "/home/db2inst1/sqllib/TSTRG.TS">700 PAGES;
  CREATE MEMBER IN SETNAME SET00 APPLYQUAL MYQUAL1 ACTIVATE YES
  SOURCE EMPLOYEE
  TARGET NAME TRGEMPLOYEE
  DEFINITION IN TSTRG00 CREATE USING PROFILE TBSPROFILE
  TYPE USERCOPY COLS ALL REGISTERED;
  # Now, run the file through the asnclp command
  # and you are ready to replicate data.
  QUIT;
  2.   执行DB2 复制命令执行以上脚本
  $ asnclp -f sqlrep.asnclp
  
  Step3: 启动capture和apply
  1.   启动capture(建议可放至后台,这样不用占用一个窗口)
  $  asncap capture_server=testdb
  (后台运行:$ nohup asncap capture_server=testdb &)
  以下为正常的输出,可通过nohup.out查看,如果你是用后台跑的话
  2017-09-08-01.48.04.703588 ASN0600I  "Capture" : "" : "Initial" : Program "capture 9.7.11 (Build 9.7.0.11 Level s150922, PTF IP23944)" is starting.
  2017-09-08-01.48.06.817804 ASN0100I  CAPTURE "ASN" : "WorkerThread" : The Capture version "capture 9.7.11 (Build 9.7.0.11 Level s150922, PTF IP23944), DB2 v9.7.11" program initialized successfully.
  2017-09-08-01.48.06.817850 ASN0109I  CAPTURE "ASN" : "WorkerThread". The Capture program has successfully initialized and is capturing data changes for "1" registrations. "0" registrations are in a stopped state. "0" registrations are in an inactive state.
  2.   启动apply
  $ asnapply control_server=testdb apply_qual=MYQUAL1
  (后台运行:$ nohup asnapply control_server=testdb apply_qual=MYQUAL1 &)
  以下为正常的输出,可通过nohup.out查看,
  2017-09-08-01.50.33.673457 ASN0600I  "Apply" : "" : "Initial" : Program "apply 9.7.11 (Build 9.7.0.11 Level s150922, PTF IP23944)" is starting.
  2017-09-08-01.50.35.733818 ASN1045I  APPLY "MYQUAL1" : "Initial" : The Apply version "9.7.11" program was started using database "TESTDB".
  
  Step4:观察结果(可新开一窗口查看):
  1.   连接数据库
  $ db2 connect to testdb
  2.   显示此schema下的所有表(因为前面我们把这几个表在db2inst1下建立)
  $ db2 list tables for schema db2inst1
  Table/View                      Schema          Type  Creation time   ------------------------------- --------------- ----- --------------------------
  CDEMPLOYEE                      DB2INST1        T    2017-09-08-00.50.36.243736
  EMPLOYEE                        DB2INST1        T    2017-09-08-00.41.29.577792
  TRGEMPLOYEE                     DB2INST1        T    2017-09-08-00.50.37.243767
    Name                              = TSTRG00
    ----------- ---------------
  1  aa
  2  bb
  2 record(s) selected.
  7.   在源表中插入一行数据
  $ db2 "insert into EMPLOYEE values(3,'c','cc')"
  等1分钟
  8.   查看目标表内容
  $ db2 "select * from TRGEMPLOYEE"
  ID       GIVENNAME
  ----------- --------------------
  1  aa
  2  bb
  3  cc

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-623623-1-1.html 上篇帖子: SQL中取相同字段另一字段最大记录 下篇帖子: SQL0294容器重用报错一例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表