DB2 远程 SQL 复制技术简介
DB2 有两种表表间复制数据技术:SQL 复制 Q 复制。们各有其适合应领域及特点。SQL 复制其发展比较成熟种技术,再加不需其软配合,以支持不同类型数据库 DB2 间数据同步,因此适范围比较广。相比,Q 复制性能优势比较明显。
简单说,DB2 远程 SQL 复制就通过 Capture 程序提出数据源表修改 , 并保存 CD 表 , 再由 Apply 程序读这些修改,进而应目标数据表以完成数据复制。
远程 SQL 复制原理
Apply 程序
监视器程序
以这些组各自独立运行,们间通过存储修改 DB2 复制控制表 (control tables) 记录相互通讯。DB2 复制心个拥有图形化界面管理工具,户以通过进行数据复制关系管理,进行包括数据源注册 (registered tables),订阅集 (subscription sets) 报警条等设置。复制心根据户设置生成相应 SQL 脚本 , 并运行该脚本以复制控制表进行修改。Capture 程序访问复制控制表,读数据源表注册信息,根据注册信息从 DB2 日志文提出数据源表修改,并且修改复制控制表,标明目运行状态。Apply 程序访问复制控制表,得目数据源变动,并修改应目表,再修改复制控制表,标明 Apply 程序运行状况。监视器程序根据 Capture 程序Apply 程序复制控制表修改解当系统运行存问题,再根据户报警设置发出相应警报。更详细复制过程原理,这里就不做详细地介绍,但复制过程细节解越,户就能更顺利地解决复制当出现问题。
于设置个远程 SQL 复制,已经有文章详细讨论过。如果这些过程有任何问题,以看看面参考资料。这里,们只选其少有人关注过话题进行讨论。
1、制定复制计划
个式生产环境,部署数据复制需先制定复制计划。开始整个复制系统部署,首先完成这个步骤,这样有助于帮助规划人员或 DBA 更有效率全面部署复制系统。根据复制数据量规模表数量,能需考虑面问题,然根据答案确定合适复制计划:
计算 Capture Apply 程序需存数量,以决定否需设置 memory_limit 参数。
指定 CD UOW 表所表空间名字。通常,给 CD 表单独表空间个好设计。
CD UOW 表空间需少始化空间?这个问题跟系统数据变动量密切相关。
Capture 控制表 Apply 控制表所表空间什么?通常们应该有个单独表空间。
避免数据积累太,制定剪裁计划。如除少天 IBMSNAP_APPLYTRACE IBMSNAP_APPLYTRAIL 数据
根据系统同步数据量,决定否启自动同步,否需修改 ASNLOAD 户出口程序。如果启动自动同步,需 Apply 程序运行目录留出足够空间容纳 export 文。
规划 Apply, Capture 程序运行位置密码文位置,给日志文能溢出文保留足够空间。
户使复制心设置数据复制关系时候,系统需生成些新象,比如目表,CD 表,索引以及所表空间等等。于这些象,系统有个默认值,比如 CD 表名字以 CD 加源表名代替。如果户自己设定个不同命名规范,每次操作就都需修改这些名字。数据复制概文就让户更执行数据复制操作。户以通过修改概文符合自己习惯或命名规范。DB2 提供面三个层次概文:
于面概文,户以指定们所涉及象缺省值,包括们命名规则,些属性值等等。当进行相应操作时,这些值作缺省值出现,户以接受,以修改们。于这三种概文,户以通过以方式调出们修改窗口:
打开 DB2 Replication Center
SQL 数据复制系统,些控制表数据不断累积,们尺寸不断变。如果不能及时清理这些数据,就能系统性能甚至常运行造成影响。这里主想讨论 CD 表,UOW 表,IBMSNAP_APPLYTRACE 表 IBMSNAP_APPLYTRAIL 表。
CD 表 UOW 表记录着所有源表数据变动,们增长快。Capture 程序责定期清理其无数据,但这决于 IBMSNAP_PRUNE_SET 表 SYNCHPOINT 列。常清理过程比较个数据源所应所有订阅集,其最个同步点 (SYNCHPOINT),清除这以数据。因确保清除掉数据已经完全发布所有订阅集。因这点,户停某个订阅集或设置 Apply 程序运行频率时候非常心,如果时间过长,就能致 CD 表 UOW 表数据积累过,影响系统运行效率。SQL 数据复制系统避免这种,设置个保留极限(retention limit),如果表数据超过这个极限(缺省 1 周),Capture 程序就超过期限数据除。这时如果订阅集被重新激活,就需个全刷新。
另,控制表 IBMSNAP_APPLYTRACE IBMSNAP_APPLYTRAIL 里保存着 Apply 程序执行时候些历史记录,如果有些订阅集复制失败,这两个表就被填入相应容。户应该编程序自动清理这两个表,否则们逐渐变,直填满整个表空间,那就影响 SQL 复制系统常功能。另种更简单,户以某个订阅集定义个 After-SQL 除这两个表某个时间以数据。
这章介绍 SQL 复制常些命令,以及哪里能查询运行日志。于 SQL 复制系统三个组,都各自应两个命令,个启动命令,另个当组运行时候操作组运行方式命令。
asncap capture_server=db capture_schema=ASN capture_path=/ db2/asn/capture/logs
pwdfile=asnpwd.aut startmode=warmns
asnccmd capture_server=db capture_schema=ASN reinit
asnapply apply_qual=DB_QUAL control_server=db apply_path=/db2/asn/apply/logs
pwdfile= asnpwd.aut
asnacmd apply_qual=DB_QUAL control_server=db status
asnmon monitor_server=db monitor_qual=DB_MON monitor_interval=120
另还有两个命令,以组合起修复源表目表不致记录:asntdiff asntrep
asntdiff DB=apply_db schema=asn where="set_name = 'my_set' and
target_table = 'table_name'" diff=diff_table
asntrep DB=apply_db SCHEMA=asn WHERE="set_name = 'my_set' and
target_table = 'table_name'" diff=diff_table
面命令行调时候,个密码文 asnpwd.aut。这个文里存储着 Capture 或 Apply 程序数据库名字应链接户名密码。DB2 提供个命令行工具生成编辑这个文:asnpwd
asnpwd INIT ENCRYPT PASSWORD
asnpwd ADD ALIAS db ID dbuser PASSWORD dbpasswd using /db2/asn/capture/logs/asnpwd.aut
这三个组启动时候都有各自参数指定们运行工作目录:capture_path,apply_path monitor_path。户以这些目录们日志文。们记录信息以帮助户判断系统否运行常。另控制表 IBMSNAP_APPLYTRACE IBMSNAP_APPLYTRAIL 记录着 Apply 程序运行时产生误。
述命令日志信息以帮助户判断系统能存问题。户以面 SQL 判断目否存有问题表复制:
db2 "select b.TARGET_OWNER,b.TARGET_TABLE, a.APPLY_QUAL,a.SET_NAME,
a.activate, a.status, a.lastsuccess from ASN.IBMSNAP_SUBS_SET a,
asn.ibmsnap_subs_membr b where a.apply_qual=b.apply_qual and
a.set_name=b.set_name and b.TARGET_TABLE='%table%' and
b.TARGET_OWNER='%owner%' and a.status != 0 with ur "
如果面 SQL 返回结果,说明这些复制关系存问题。需采措施进行检查排除。
面些实际应经常遇误,当使章所介绍目某个表复制出现误,就以采面进行检查排除误。
通常们通过 Capture 程序日志诊断各种 Capture 误。Capture 日志位于 Capture Path 目录,文名类似于:db2inst1.DBNAME.ASN.CAP.log
问题 1:
2010-03-05-10.50.07.456459 <registration::initDecodeInfo>
ASN0071E CAPTURE "ASN" : "WorkerThread". The data type attribute
of the column "ID" in the CD table "CD"."STAFF" is not compatible
with the data type attribute of the corresponding source column.
2010-03-05-10.50.07.456629 <registration::initDecodeInfo>
ASN0189I CAPTURE "ASN" : "WorkerThread". The Capture 程序 is
terminating because an error occurred for registered table "TEST1. STAFF"
and the registration is configured to stop on error.
分析:
重新注册该数据源表,生成确 CD 表。然启动 Capture。
问题 2:
2010-02-03-05.27.30.585586 <callUpdateReuseInfo> ASN0144E
CAPTURE "ASN" : "WorkerThread". The program detected that the
source database "SDB" has been restored or rolled forward.
A cold start is recommended to restore consistency.
分析:
因数据库通过 restore 方式重建。所以如果使 warmns 模式启动 Capture 程序,得提示,Capture 程序需次 cold 启动。
以使 cold 方式启动 Capture 程序。但需所有 apply set 进行完全刷新。
以再次使 warmns 模式启动 Capture 程序。就成功。这只个 warning,并不求必须使 cold 模式启动。
问题 3:
2010-02-03-11.10.12.050721 <logrd8::readTheLog> ASN8041D
"Capture" : "ASN" : "WorkerThread" : db2LogRead API is sending
us backwards in the DB2 Log: First LSN is "0000:0000:00ac:d1db:43ba"
while Next Start LSN is "0000:0000:0000:0000:0000"
2010-02-03-11.10.12.050815 <logrd::readTheLog> ASN0005E
CAPTURE "ASN" : "WorkerThread". The Capture program encountered
an error when reading the DB2 log.
The log sequence number is "0000:0000:00AC:D1DB:43BA", the SQLCODE
is "-2656", and the reason code is "".
分析:
运行 db2flsn(SQLLOGCTL.LFH) 获 Capture 程序所需日志文。拷贝所需日志文active log 目录。例如,
db2flsn 00ACD1DB43BA
Given LSN is contained in log page 10645 in log file S0003020.LOG.
问题 4:
2009-02-24-05.00.16.067538 <Asnenv:setEnvIpcQRcvHdl> ASN0596I
"Capture" : "ASN" : "Initial" The program could not create an IPC
queue with keys "[NOT SET]" for path "/db2/tmpdir/db2inst1/db2inst1.SDB.ASN.CAP.IPC".
OSSE reason is "Invalid parameter".
2009-02-24-05.00.16.067589 <Asnenv:setEnvIpcQRcvHdl> ASN0507E
"Capture" : "ASN" : "Initial" : The program could not create the
replication communications message queue.
分析:
通过日志解析们能得出误 IPC queue 相关。有能 tmpdir 路径不确。
检查 tmpdir 路径。其相关 IPC queue 问题。能需们清除旧 IPC 信息。们以使 ipcrm – m/q/s。
通常们通过查看 Apply 程序日志Apply Trace 文诊断各种 Apply 误。Apply 程序日志相说比较简单,但提炼最重误提示。Apply Trace 文信息比较详尽,们以看各种具体参数,包括数据源表目表应信息。问题 2 描述,给出段比较详细 Apply Trace 文例子。Apply 程序日志位于 Apply Path 目录,文名类似于:db2inst1.DBNAME.apply_qual. APP.log。Apply Trace 文位于相同目录,文名类似于:apply_qual.TRC。
问题 1:
2010-02-07-20.54.05.980738 <CPPSET(45/20)> ASN1003E APPLY
"MY_APPLY_Q1" : "WorkerThread". The Apply program could not
connect to the server "SDB".
分析:
检测目数据库源数据库连通性。能网络问题,能户名密码问题,还能 catalog 问题。症药即。
问题 2:
2010-03-12-03.15.46.981797 <CPWPLAN(5E/03)> ASN1016I APPLY
"MY_APPLY_Q1" : "WorkerThread". Refresh copying has been disabled.
The error code is "5E1603".
WPLAN: Set is skipped. apperrc is 5E1603.
SAT: ASNLOAD = N, EFFECT_MEMBERS = 0
SAT: FULL_REFRESH = N
SAT: SET_INSERTED = 0
SAT: SET_DELETED = 0
SAT: SET_UPDATED = 0
SAT: SET_REWORKED = 0
SAT: SET_REJECTED_TRXS = 0
SAT: STATUS = -1
SAT: LASTRUN = 2010-03-12-00.33.46.156139
SAT: LASTSUCCESS is null
SAT: SYNCHPOINT is null
SAT: SYNCHTIME is null
SAT: SOURCE_ALIAS is SDB
SAT: SOURCE_SERVER is SDB
SAT: SOURCE_OWNER is TEST1
SAT: SOURCE_TABLE is STAFF
SAT: TARGET_ALIAS is TDB
SAT: TARGET_SERVER is TDB
SAT: TARGET_OWNER is TEST2
SAT: TARGET_TABLE is STAFF
SAT: SQLSTATE is null
SAT: SQLERRM is null
SAT: SQLCODE is null
SAT: SQLERRP is null
SAT: APPERRM is ASN1016I APPLY "MY_APPLY_Q1" : "WorkerThread".
Refresh copying has been disabled. The error code is "5E1603".
分析:
通常由于需进行完全刷新时候,数据源表“目标表完全刷新”标志未选而造成。
通过 Apply Trace 文具体信息,相应目标表进行手工完全刷新即。
问题 3:
2010-03-03-01.13.22.362826 <CPAPS(BC/03)> ASN1001E APPLY
"MY_APPLY_Q1" : "WorkerThread". The Apply program encountered an
SQL error. The ERRCODE is "BC0103". The SQLSTATE is "57011".
The SQLCODE is "-964". The SQLERRM is "". The SQLERRP is "SQLRI03B".
The server name is "". The table name is ""ASN".IBMSNAP_PRUNE_SET".
*** SQL ERROR ***: SQL0964C The transaction log for the database is full. SQLSTATE=57011
分析:
结合 Apply 程序日志 Trace 文。们不难看出误原因transaction log 满原因。
如果其作业造成transaction log 满,们以等待作业提交或回滚。如果 replication 就造成问题作业,而且没有办法立刻扩充 transaction log,使针目表完全刷新,应该不选择。
总说,出现 SQLSTATE 57011 误时候,们考察重点放 file system full ,检查数据库相关目录:活动日志目录、表空间、实例目录等等,解决问题。
问题 4:
SAT: APPERRM is ASN1022E "MY_APPLY_Q1" : "WorkerThread": "".
The Apply program cannot write to the work file "/db2rep/MY_APPLY_Q1/MY_APPLY_Q1.000"
because of a system error with ERRNO "28". The error code is "932203".
…
SAT: APPERRM is ASN1024E "MY_APPLY_Q1" : "WorkerThread": "".
The Apply program cannot close the work file
"/db2rep/MY_APPLY_Q1/MY_APPLY_Q1.000" because of a system
error with ERRNO "28". The error code is "932404".
分析:
Apply Trace 文,们以溢出文存,同时看 system error 28,这个误表示当设备空间不足。因此,们需检查 Apply 程序工作目录否满。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论