作者·2012-01-18 20:30
·

对 DB2 远程 SQL 复制应用中的常见错误分析及处理

字数 9787阅读 5735评论 0赞 0

DB2 远程 SQL 复制技术简介

  DB2 有两种间复制数据技术:SQL 复制 Q 复制。们各有其适合领域及特点。SQL 复制发展比较成熟种技术,再加不需配合,以支持不同类型数据库 DB2 数据同步,因此适范围比较广。相比,Q 复制性能优势比较明显。

  简单说,DB2 远程 SQL 复制就通过 Capture 程序提数据源表修改 , 并保存 CD 表 , 再由 Apply 程序读这些修改,进而应目标数据表以完成数据复制。

  远程 SQL 复制原理

  总体说, DB2 复制服务系统分四个组

  DB2 复制心 (Replication Center)

  Capture 程序(有时需 triggers)

  Apply 程序

  监视器程序

  以这些组各自独立运行,间通过存储修改 DB2 复制控制表 (control tables) 记录相互通讯。DB2 复制个拥有图形化界面管理工具,以通过进行数据复制关系管理,进行包括数据源注册 (registered tables),订阅集 (subscription sets) 报警条设置。复制心根据设置生成相应 SQL 脚本 , 并运行该脚本以复制控制表进行修改。Capture 程序访问复制控制表,读数据源表注册信息,根据注册信息从 DB2 日志文出数据源表修改,并且修改复制控制表,标明目运行状态。Apply 程序访问复制控制表,得数据源变动,并修改应,再修改复制控制表,标明 Apply 程序运行状况。监视器程序根据 Capture 程序Apply 程序复制控制表修改解当系统运行问题,再根据报警设置发出相应警报。更详细复制过程原理,这里就不做详细地介绍,但复制过程细节户就能更顺利地解决复制当出现问题。

远程 SQL 复制设置

  设置个远程 SQL 复制,已经有文章详细讨论过。如果这些过程有任何问题,以看参考资料。这里,们只选少有人关注过话题进行讨论。

  1、制定复制计划

  生产环境,部署数据复制需先制定复制计划。开始整个复制系统部署首先完成这个步骤,这样有助于帮助规划人员或 DBA 更有效率全面部署复制系统。根据复制数据量规模数量,能需考虑问题,然根据答案确定合适复制计划:

  计算 Capture  Apply 程序需存数量,以决定否需设置 memory_limit 参数。

  系统有哪些表哪些列需被复制?

  指定 CD  UOW 表所表空间名字。通常,给 CD 表单独表空间个好设计。

  CD  UOW 表空间需始化空间?这个问题跟系统数据变动量密切相关。

   CD 表表制定个命名规范。管理创造方便。

  Capture 控制表 Apply 控制表所表空间什么?通常应该有个单独表空间。

  系统订阅集少,其定义个命名规范

  避免数据积累制定剪裁计划。如少天 IBMSNAP_APPLYTRACE IBMSNAP_APPLYTRAIL 数据

  根据系统同步数据量,决定否启自动同步,否需修改 ASNLOAD 户出口程序。如果启动自动同步,需 Apply 程序运行目录留出足够空间容纳 export 文

  规划 Apply, Capture 程序运行位置密码文位置,给日志文溢出文保留足够空间。

  2、设置数据复制

  使复制心设置数据复制关系时候,系统需生成些新象,比如目表,CD 表,索引以及所表空间等等。于这些象,系统个默认值,比如 CD 表名字以 CD 加源表名代替。如果户自己设定个不同命名规范,每次操作就都需修改这些名字。数据复制户更执行数据复制操作。以通过修改概符合自己习惯或命名规范。DB2 提供面三个层次

  控制表概

  数据源概

  目标象概

  以指定们所涉及缺省值,包括命名规则,些属性值等等。当进行相应操作时,这些值缺省值出现,以接受,以修改们。于这三种概以通过以方式调出修改窗口:

  打开 DB2 Replication Center

  左视图展开 SQL Replication

  鼠标右键点击 Definitions,出现三个管理概

  选择其个,弹出管理窗口进行设置。

  3、控制表数据清理

   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 复制常些命令,以及哪里能查询运行日志。于 SQL 复制系统三个组,都各自应两个命令,启动命令,另当组运行时候操作组运行方式命令。

  Capture 程序:asncap  asnccmd

 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 

  Apply 程序:asnapply  asnacmd

 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  asnmcmd

 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  Apply 常见误分析及解决

  实际经常误,当使章所介绍个表复制出现误,就以采进行检查排除误。

Capture 常见误 :

  通常们通过 Capture 程序日志诊断各种 Capture 误。Capture 日志位于 Capture Path 目录,文名类似于:db2inst1.DBNAME.ASN.CAP.log

  问题 1:

  源于 Capture 日志:

 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 表数据源表列属性不致。

  解决

  重新注册该数据源表,生成 CD 表。然启动 Capture。

  问题 2:

  源于 Capture 日志:

 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:

  源于 Capture 日志:

 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 "". 

  分析:

  启动 Capture 程序所需日志文无法读

  解决

  运行 db2flsn(SQLLOGCTL.LFH) 获 Capture 程序所需日志文。拷贝所需日志文active log 目录。例如,

 db2flsn 00ACD1DB43BA 
 Given LSN is contained in log page 10645 in log file S0003020.LOG. 

  问题 4:

  源于 Capture 日志:

 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 程序日志Apply Trace 文诊断各种 Apply 误。Apply 程序日志相说比较简单,但提炼最重误提示。Apply Trace 文信息比较详尽,以看各种具体参数,包括数据源表应信息。问题 2 描述,给出段比较详细 Apply Trace 文例子。Apply 程序日志位于 Apply Path 目录,文名类似于:db2inst1.DBNAME.apply_qual. APP.log。Apply Trace 文位于相同目录,文名类似于:apply_qual.TRC。

  问题 1:

  源于 Apply 程序日志:

 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". 

  分析:

  Apply 程序不能连接源数据库。

  解决

  检测目数据库源数据库连通性。网络问题,户名密码问题,还 catalog 问题。药即

  问题 2:

  源于 Apply 程序日志:

 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". 

  检查 Apply Trace 文

 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:

  源于 Apply 程序日志:

 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". 

  Apply Trace 文

 *** 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:

  源于 Apply Trace 文

 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 条评论

Ctrl+Enter 发表

作者其他文章

X社区推广