我的编程空间,编程开发者的网络收藏夹
学习永远不晚

DB2 SQL Replication 配置方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

DB2 SQL Replication 配置方法

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

 

以下为脚本内容:(蓝色字体为变量,可根据实际情况设定)

# identify databases involved.  
# ('Control' and 'Target' are usually the same)
SET SERVER CAPTURE TO DB TESTDB ID db2inst1 PASSWORD "pwd";
SET SERVER CONTROL TO DB TESTDB ID db2inst1 PASSWORD "pwd";
SET SERVER TARGET TO DB TESTDB ID 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;

# Identify source table(s).
# 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" SIZE 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

<---自动生成目标表TRGEMPLOYEE

  3 record(s) selected.

3.   显示表空间

$ db2 list tablespaces | more


 Tablespace ID                        = 5
 Name                              = TSTRG00  

<--自动生成目标表空间TSTRG00
 Type                               = Database managed space
 Contents                            = All permanent data. Large table space.
 State                              = 0x0000
 Detailed explanation:
    Normal  

4.   显示源库与目标库信息

$ db2 "select APPLY_QUAL, SET_NAME,SOURCE_SERVER,TARGET_SERVER, STATUS from ASN.IBMSNAP_SUBS_SET"


APPLY_QUAL      SET_NAME        SOURCE_SERVER    TARGET_SERVER    STATUS
------------------ ------------------ ------------------ ------------------ ------
MYQUAL1        SET00          TESTDB         TESTDB         0

  1 record(s) selected.

5.   显示源表与目标表信息

$ db2 "select APPLY_QUAL, SET_NAME, substr(SOURCE_TABLE, 1,20) as SOURCE_TABLE, substr(TARGET_TABLE, 1,20) as TARGET_TABLE, MEMBER_STATE from  ASN.IBMSNAP_SUBS_MEMBR" 


APPLY_QUAL      SET_NAME        SOURCE_TABLE      TARGET_TABLE      MEMBER_STATE
------------------ ------------------ -------------------- -------------------- ------------
MYQUAL1        SET00          EMPLOYEE         TRGEMPLOYEE       L           
 
1 record(s) selected.

6.   查看目标表内容

$ db2 "select * from TRGEMPLOYEE"


ID       GIVENNAME           
----------- ---------------
      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分钟后查看,已经被复制过来了

  3 record(s) selected.
(在1分钟的复制过程中可查看CDEMPLOYEE表,此表显示第一次创建源表后的增量信息,注意在replication停止后此CD表会清空,直到下一次启用replication后再重新写入)

 

9.   可通过以下方法查看源表与目标表的区别

$ asntdiff db=testdb where="target_table = 'TRGEMPLOYEE' and apply_qual = 'MYQUAL1' and set_name = 'SET00'"

 

2017-09-08-02.51.52.188642 ASN0600I  "AsnTDiff" : "" : "Initial" : Program "asntdiff 9.7.11 (Build 9.7.0.11 Level s150922, PTF IP23944)" is starting.

2017-09-08-02.51.52.259454 ASN4012I  "AsnTDiff" : "ASN" : "Initial" : The program is comparing tables using the list of parameters following this message.

 TDIFF   TABLE = "ASN"."ASNTDIFF" ;

 MAXIMUM COUNT = 100000 ;

 

  CONNECT TO TESTDB ;

 

  SELECT "GIVENNAME" AS "GIVENNAME",    "ID" AS "ID" FROM "DB2INST1"."EMPLOYEE"  ORDER BY 2 ;

 

  CONNECT TO TESTDB ;

 

  SELECT "GIVENNAME",    "ID" FROM "DB2INST1"."TRGEMPLOYEE"  ORDER BY 2 ;

 

  CREATE TABLE "ASN"."ASNTDIFF" (

    "DIFF "         CHAR(4),

    "ID"               INTEGER

  ) ;

 

2017-09-08-02.51.52.788416 ASN4006I  "AsnTDiff" : "ASN" : "Initial" : Between the source table and the target table, there are "5" common rows, "0" rows that are unique to the source table, and "0" rows that are unique to the target table.

2017-09-08-02.51.52.788515 ASN4011I  "AsnTDiff" : "ASN" : "Initial" : No differences were found between the source and target tables.

 

10.  如果发现源表与目标表出现差异,可使用以下方法修复

$ asntrep db=testdb where="target_table = 'TRGEMPLOYEE' and apply_qual = 'MYQUAL1' and set_name = 'SET00'"

 

Step5:停止capture和apply

1.   停止capture

$ asnccmd capture_server=testdb stop

以下为正常的输出
2017-09-08-01.08.28.738902 ASN0600I  "AsnCcmd" : "" : "Initial" : Program "capcmd 9.7.11 (Build 9.7.0.11 Level s150922, PTF IP23944)" is starting.

2017-09-08-01.08.30.750633 ASN0522I  "AsnCcmd" : "ASN" : "Initial" : The program received the "STOP" command.

2.   停止apply

$ asnacmd apply_qual=MYQUAL1 control_server=testdb stop

以下为正常的输出

2017-09-08-01.08.39.308891 ASN0600I  "AsnAcmd" : "" : "Initial" : Program "applycmd 9.7.11 (Build 9.7.0.11 Level s150922, PTF IP23944)" is starting.

2017-09-08-01.08.41.320192 ASN0522I  "AsnAcmd" : "MYQUAL1" : "Initial" : The program received the "STOP" command.

 

[比较SQL Replication & Q Replication]

SQL Replication

DB2 SQL Replication 配置方法

 Q Replication

DB2 SQL Replication 配置方法

“SQL”复制又称为“DB2 复制”,是为 DB2 开发的两种数据复制类型中的一种,它是通过 SQL 进行的复制。

DB2 复制中的另一种”Q 复制”是通过 WebSphere MQ 队列进行的。在进行 SQL 复制时,Capture 程序读取 DB2 恢复日志以获取对指定源表的更改。该程序将更改保存到分级表中,Apply 程序并行读取更改并应用于目标事务。所以这两种复制很明显,唯一的区别只在于是否通过中间件MQ来实现。


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

DB2 SQL Replication 配置方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

db2导入sql文件的方法是什么

要将 SQL 文件导入到 DB2 数据库中,可以使用以下几种方法:使用命令行工具:可以使用 db2cmd 命令行工具,在命令行中执行以下命令导入 SQL 文件:db2 -tvf your_sql_file.sql使用 Control Cen
db2导入sql文件的方法是什么
2024-04-09

Spark SQL配置及使用的方法是什么

本篇内容介绍了“Spark SQL配置及使用的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!XY个人记SparkSQL是spark
2023-06-21

SQL SERVER 2000安装及配置的方法是什么

SQL Server 2000的安装和配置方法如下:1. 下载SQL Server 2000的安装文件,可以从官方网站或其他可信来源获取。2. 运行安装程序,选择“安装”选项。3. 阅读并接受许可协议。4. 选择安装类型,通常选择“完整安装
2023-08-16

LinuxIP配置方法

导读Linux服务器双网卡双IP和单网卡双IP配置方法一、双网卡双IP。
2023-06-05

idea配置检查XML中SQL语法及书写sql语句智能提示的方法

idea连接了数据库,也可以执行SQL查到数据,但是无法识别sql语句中的表导致没有提示,下面这篇文章主要给大家介绍了关于idea配置检查XML中SQL语法及书写sql语句智能提示的相关资料,需要的朋友可以参考下
2023-03-06

Idea配置tomcat的方法

这篇文章主要讲解了“Idea配置tomcat的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Idea配置tomcat的方法”吧!目录创建一个maven项目项目结构添加框架在pom.xml
2023-06-20

Tomcat NIO的配置方法

本篇内容介绍了“Tomcat NIO的配置方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Tomcat 6.X实现了JCP的Servlet
2023-06-17

log4j的Appenders配置方法

因为是刚开始使用log4j,很多配置方面的东西都不懂,记录下。下面是我用STS(Spring Tool Suite)新建Spring MVC项目的时候,帮我自动生成的一个log4j.xml配置文件。
2023-05-31

vuedevserver及其配置方法

这篇文章主要介绍了vuedevserver及其配置方法,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-12-20

编程热搜

目录