IBM® Informix® Dynamic Server(IDS)一直以来都是一种具备强大复制技术的数据库。企业复制(Enterprise Replication,ER)和高可用性数据复制(High-Availability Data Replication,HDR)多年来为客户提供了可靠的服务。在较新的 IDS 版本 11.1 以及目前的 11.5 中,又添加了一些新的技术:远程独立(Remote Standalone)备用服务器和共享磁盘(Shared-Disk)备用服务器。本文将通过使用这些技术来简要了解各种技术的特征和细节。
企业复制(ER)
ER 是什么?
数据库可以为您存储重要的业务数据,并且业务人员意识到将数据存储到至少两个不同的位置是一项非常明智的策略。如果您可以告诉数据库将需要的数据自动复制到另一个服务器,岂不是很好?是的,从 Version 7 开始,IDS 已经具备了这种能力。这通过企业复制(ER)技术来实现,这种技术灵活且功能强大。
要使用 ER 技术,首先确定需要复制数据的服务器。这将创建一个用来传输数据的网络拓扑结构 — 包括根、叶、非根和非叶节点。每个 ER 节点 可能是一个单个服务器或一个服务器集群,本文后面将介绍到。所有这些互相连接的节点统称为一个 ER 域(domain)。域并不定义传输哪些数据,而仅仅定义数据传输时经过的路径或路线。
接下来,要确定希望复制哪些数据。这是通过一个涉及服务器、数据库、表和列的 SQL 查询定义的。这个查询充当一个过滤器,它的输出决定要复制哪些数据,是一种非常灵活的工具。如果您想要复制整个表,那么查询应为 SELECT * FROM ...
。如果仅需要复制表的前三列,应使用查询 SELECT column1, column2, column3 FROM ...
。或者,如果只希望复制表的某些行,那么只需要在查询中使用 WHERE
子句。ER 可以使用非常粗糙或非常精细的过滤器复制数据。要实现更好的复制,ER 要求表定义一个主键。
编写了查询之后,确定哪些节点需要参与到数据复制中。假设您要求节点 A、B 和 C 将相同的数据放到 Employee 表,则 A、B 和 C 节点就是参与节点。可以对 ER 进行配置,因此如果在任何服务器上修改了数据,那么也将更新其他参与节点。这种情况称为 update anywhere 场景。如果您只希望从 A 开始更新,然后进一步更新 B 和 C,但是不再回到 A,该怎么办呢?ER 也针对这些 primary-target 场景提供了灵活性。对于数据修改发生在多个参与节点的情况,那么服务器 B 中修改的行可能与服务器 C 中的修改发生冲突。ER 允许您定义规则来自动处理这种冲突。这些规则包括比较时间戳、返回一个存储过程和忽略冲突。
现在了解了查询、参与节点和场景知识后,将利用这些信息实现复制(replicate)。将一个复制看作一个可以控制查询数据流的水龙头。可以将水龙头拧开或关闭,并且您可以使用任意数量的水龙头。可以将复制划分到一些集合中,这样便于用户控制多个复制。同样,可以使用模板快速创建针对多个表的复制。所有这些工作都可以通过服务器实用工具 cdr
来完成。
创建并启动了一个复制后,如何实际地移动数据?首先,复制是异步进行的。这意味着数据从一个节点提交之后会延迟一段时间才呈现在另一个节点。当然,只有提交的数据才会被复制。ER 首先读取逻辑日志,检验日志记录是否需要复制,最后将这些信息发送给相应的参与节点。
一个简单示例
让我们创建一个简单的 ER 示例。我们将使用 update-anywhere 方式在服务器 1 和服务器 2 之间复制 “db1” 数据库的 employees 表(以下步骤假设使用了 informix 帐户)。
步骤 1:准备 SQLHOSTS 文件
每个服务器的文件应该包含针对两个服务器的一个条目及两组定义。每个组表示一个 ER 节点:
grp1 group - - i=1 |
步骤 2:准备 ER 磁盘空间
针对每个服务器执行以下步骤:
CDR_QDATA_SBSPACES sbs1 |
touch /ids/chunks/sbs1_chunk1 |
步骤 3:将节点添加到一个新的 ER 域
在 server1 上,执行以下命令:
本文转自IBM Developerworks中国
请点击此处查看全文