空间站

北极心空

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks

公告

本博客主要是在本人收集网上一些精彩技术文章,有时可能因疏忽转载的时候没有说明转载出处和作者,如果您认为哪篇文章侵犯了你的版权,请通知本人: EMAIL:luwei-80@163.com 欢迎您光临本博客!

常用链接

留言簿(15)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

扩展您的架构

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

将此页作为电子邮件发送

将此页作为电子邮件发送



级别: 中级

Sean Byrd (sabyrd@us.ibm.com), Americas Techworks SME, IBM

2006 年 7 月 10 日

即将发布的 Q Replication 将支持一种新的目标表,即 Consistent Change Data (CCD) 表。探索 Q Replication 用户之所以需要这些表的原因,并考虑在使用 CCD 表作为目标的情况下,可能出现的一些新的复制架构。学习如何定义和使用 CCD 表,这需要对 Q Replication 的安装和配置有基本的了解。另外,还看看在使用 CCD 表作为目标的情况下有哪些限制。

简介

Consistent Change Data (CCD) 表一直是 SQL Replication 中一种流行的目标表。通过支持 CCD 表作为另一种目标选项,对于熟悉 Q Replication 的人来说,他们就可以利用这种新功能了。这时您可能要问,“为什么我应该在我的复制架构中考虑 CCD 表?” CCD 表通过关联的跟踪机制暴露数据,以便准确地描绘源表的事务历史。换句话说,CCD 允许重现源表的历史。让我们看看用到 CCD 的三个例子。





回页首


使用 CCD

历史表 —— 在任何系统中,都会有一些关键的表需要能够恢复或重建。通过将关键的源表复制到一个 CCD 目标表,就可以逐个事务地从头开始重建这个表。更棒的是,如果表中输入了坏的数据,CCD 记录还允许您查看哪些行受到影响,让您很容易改变主意,或者正确地更新所需的值。

扇出场景登台(Fan out scenario staging)表 —— 传统上,CCD 目标表用于帮助创建扇出架构,将一个源复制到多个目标。这意味着之前 SQL Replication 不能接受的一些高吞吐量的工作负载现在可以被复制到多个目标了。

不受支持的数据库登台表 —— 对于将数据放到 Q Replication 受支持的结构之外的数据库中这一任务而言,CCD 目标表也是一种理想的方法。有了最新的修复包(用于 Oracle 和 Sybase 的修复包版本为 9;用于 Microsoft SQL Server 和 Informix 的修复包版本为 10),DB2® 之外的数据库可以作为 Q Replication 的目标数据库,不过仍然有很多目标数据库不可用。虽然 CCD 目标表不能自动将数据复制到不受支持的目标数据库中,但是它通过用户应用程序暴露数据。所以,只需简单地从 IBMSNAP_OPERATION 列选择数据到一个动作变量,然后结合对源列的值的选择,使用一个用于 insert、update 和 delete 的 case 语句,便可以将事务复制到任何您想在其上编程的数据源。





回页首


实现 CCD

接下来我们看看如何创建 CCD 目标表。本节假设您已经知道如何配置 Q Replication —— 因此着重讲解队列映射和队列订阅的创建。以前,当选择一种目标表类型时(如果使用 Replication Center's Create Queue Subscription 向导的话,就在这个向导中的第 5 步),您有两个选择 —— 表或存储过程。现在您可以选择 CCD Table,但是必须指定您想要哪种类型的 CCD。如果使用的是 ASNCLP,那么语法如下:


清单 1. ASNCLP CCD 语法
                        >>-CREATE QSUB--+------------+--+-------------------------+----->
                        '-SUBTYPE--U-'  '-USING REPLQMAP--mapname-'
                        ...
                        trg-clause
                        >--+-------------------------------+---------------------------->
                        '-TYPE--+-USERTABLE-----------+-'
                        +-STOREDPROC----------+
                        +-NICKNAME------------+
                        '-CCD--| ccd-clause |-'
                        ...
                        ccd-clause
                        |--+--------------------+--+-------------------+---------------->
                        '-CONDENSED--+-ON--+-'  '-COMPLETE--+-ON--+-'
                        '-OFF-'                '-OFF-'
                        

要创建一个 CCD,必须指定两个新属性 —— condensed(压缩的)和 complete(完整的)。表 1 展示了这些属性如何影响目标表的创建:


表 1. 完整的还是压缩的?

complete 目标表创建好之后,其中填充有源表中的所有行。 目标表创建好之后为空。
condensed 目标表只包含行中最近被更改的值。 目标表包含所有行的所有历史值。

创建 CCD 目标表只要做这些就可以了。那么,有了 CCD 表之后,如何使用它呢?让我们将这些值与之前介绍的那些用法联系起来。


表 2. 最佳匹配
complete condensed 用法
这种配置将支持扇出到多个目标。
这是标准的历史表。每个源行和目标的记录使得表和事务可以被重建。还可以根据这种版本的 CCD 表创建新的用户拷贝。
这种版本的 CCD 表用于扇出场景的登台表,在该场景中,远程已经存在用户数据的一个拷贝。由于缺少源行,因此不能从这种类型的 CCD 表创建新的用户拷贝。
这种 CCD 表用于作为只需要访问被更改的数据的应用程序的登台表。






回页首


表格式

接下来我们看看 CCD 表与源表有什么不同。CCD 表与源表的不同在于多了几个附加的列:


表 3. CCD 列
列名 描述 数据类型
IBMSNAP_INTENTSEQ 这是一个序号,惟一地标识一次更改。 CHAR(10) FOR BIT DATA
IBMSNAP_OPERATION 该列表明对一个记录的操作的类型:
I -- Insert
U -- Update
D -- Delete
CHAR(1)
IBMSNAP_COMMITSEQ 这是一个序号,描述事务的提交顺序。 CHAR(10) FOR BIT DATA
IBMSNAP_LOGMARKER 这是数据被提交的时间。 TIMESTAMP


这些列附件在行的后面,因此该 CCD 表可用于创建其他拷贝,更新其他拷贝,或者使应用程序可以访问事务历史。如果启用了数据库审计功能,那么 CCD 表中还可能提供以下几列:


表 4. 审计列
列名 描述 数据类型
IBMSNAP_AUTHID 与事务相关联的授权 ID。这一列同时可用于 DB2 for Linux®、UNIX® 和 Windows® 以及 z/OS®。对于 z/OS,这是主授权 ID。 CHAR(128)
IBMSNAP_AUTHTKN 与事务相关联的授权标志。这一列仅用于 DB2 z/OS,它是相关 ID。对于 DB2 Linux、UNIX 和 Windows,这一列的值为 NULL。 CHAR(12)
IBMSNAP_PLANID 与事务相关联的计划名称。这一列仅用于 DB2 z/OS。对于 DB2 for Linux、UNIX 和 Windows,这一列的值为 NULL。 CHAR(128)
IBMSNAP_UOWID 这个工作单元的日志记录中的工作单元标识符。这一列同时可用于 DB2 for Linux、UNIX 和 Windows 以及 DB2 z/OS。 CHAR(10)


如果手动创建 CCD 目标表,则语法应该像下面这个例子一样。注意,<user data columns> 的数据类型应该与源表中相应的列的数据类型一致。


例 2. CCD 目标表的 DDL
                        CREATE TABLE CCD (
                        IBMSNAP_INTENTSEQ CHAR(10) FOR BIT DATA NOT NULL,
                        IBMSNAP_OPERATION CHAR(1) NOT NULL,
                        IBMSNAP_COMMITSEQ CHAR(10) FOR BIT DATA NOT NULL,
                        IBMSNAP_LOGMARKER TIMESTAMP NOT NULL,
                        IBMSNAP_AUTHID CHAR(128),
                        IBMSNAP_AUTHTKN CHAR(12),
                        IBMSNAP_PLANID CHAR(128),
                        IBMSNAP_UOWID CHAR(10) FOR BIT DATA,
                        <user data columns>
                        );
                        





回页首


限制

幸运的是,您只需清楚三个限制,另外再注意一点:

  1. CCD 目标表只在单向架构中有效。
  2. CCD 目标表不能是别名。
  3. CCD 表中必须有惟一性约束 —— 可以通过主键或者源表或 CCD 表上的惟一索引实现。

另外一个您可能失察的地方是 delete 的行为。如果您在使用一个压缩 CCD 表,那么在处理 delete 操作时,现有的行将被更新,而 IBMQREP_OPERATION 列将被设为 ‘D’。如果这一行不存在,那么该行将被忽略,并且被记录到异常表中。对于非压缩 CCD 表,所有事务都生成新的行。delete 会生成一个新行,其中仍然使用当前各列的值,但是 IBMQREP_OPERATION 列被设为 'D'。

 





回页首


结束语

关于这个话题就讲到这里了。希望本文提供的信息能帮助您利用扩展的架构,并将数据暴露给更多的用户。



参考资料

学习
posted on 2007-07-19 17:31 芦苇 阅读(432) 评论(0)  编辑  收藏 所属分类: IBM

只有注册用户登录后才能发表评论。


网站导航: