分类: DB2/Informix
2008-05-31 17:55:13
ER:复制
本节讨论以下主题:
在计划创建副本时,要考虑以下因素:
清单 24 中的示例在三个节点上定义一个简单的副本(采用 update anywhere 形式)。注意,列出每个参与服务器的行采用以下格式:“database_name@server_group:table_owner.table_name” “SELECT
语句和可选的 WHERE
子句”:
cdr def repl -I -C timestamp -S trans items_rep \ "stores7@g_80s:informix.items" "select * from items" \ "stores7@g_90s:informix.items" "select * from items" \ "stores7@g_00s:informix.items" "select * from items" |
清单 25 给出相同的语句,但是这一次定义的是主/目标副本:
cdr def repl -I -C timestamp -S trans items_rep \ "P stores7@g_80s:informix.items" "select * from items" \ "R stores7@g_90s:informix.items" "select * from items" \ "R stores7@g_00s:informix.items" "select * from items" |
$ cdr define replicate -x usage: cdr define repl [-c server] [-vuiAFIORTm] -C rule(s) [-M master] [-S scope] [-n y/n] [-t] [-a time] [-e intvl] [-f y|n] [-D y/n] repl participant -M --master= |
什么是主副本(master replicate)?主副本可以保证 ER 环境中服务器之间的一致性。它们具有以下好处:
有三种主副本类型:
副本集是几个副本的逻辑集合,可以作为一个单元进行管理。通过使用副本集,可以只用一个命令启动、停止、暂停或继续运行副本集中的所有副本。有两种副本集类型:排他(exclusive)和非排他(non-exclusive)。
排他副本集要求所有副本具有相同的状态和频率设置。属于一个排他副本集的副本不能同时属于其他任何副本集。使用 --exclusive
选项创建排他副本集。
非排他副本集既允许对副本集中的副本进行统一管理,也允许单独管理。这意味着非排他副本集中的副本可以具有不同的状态;非排他副本集本身没有状态。另外,一个副本可以属于多个非排他副本集。
$ cdr define replicateset -x usage: cdr define replicateset [-c server] [-i ] [-e hh:mm] [-a day.hh:mm] [-x ] ReplSetName repl -a time --at=time replicate at specified time -c server --connect=server connect to server -e intvl --every=intvl replicate every intvl minutes -i --immediate continuous replication (default) -X --exclusive Exclusive Replset. |
模板是副本集的一种特殊形式,可以帮助在新的 ER 节点上部署副本,包括自动地创建表和数据同步。在构建模板时,ER 会为每个表创建空的主副本,并包含在副本集中。可以分别列出每个表,也可以只提供要使用的数据库名,这样就会包含这个数据库中的所有表。在完成模板之后,必须使用 cdr realize template
命令进行实例化或实现。实现模板之后,ER 会执行以下操作:
$ cdr define template -x usage: cdr define template TemplateName -C rule(s) -M server [-S scope] [-c server] [-xaAFIORTX] [-D y|n] -d database [-f file]|[Table(s)] -C rule[,rule] --conflict=rule[,rule] conflict resolution rule(s) -S scope --scope=scope scope of conflict resolution (row or trans) -M --master= |
清单 29 中的示例在三个节点上为 stores7 数据库设置一个模板。注意:在运行这个命令之前,需要在基表中添加 CRCOLS 列。
cdr define template stores7_template -C timestamp -S trans -M g_80s -A -R \ -d stores7 call_type catalog cust_calls customer items manufact orders state stock cdr realize template stores7_template -u -S g_80s \ "stores7@g_80s" "stores7@g_90s" "stores7@g_00s" |
本节讨论如何管理副本、副本集和模板,包括修改、列出、启动、停止、暂停、继续运行和删除。管理副本和副本集的大多数命令非常相似,所以本节只讨论副本的管理。
可以对现有的副本进行两种修改:
使用以下命令添加或删除参与服务器:
$ cdr change replicate -x usage: cdr change repl [-c server] [-a | -d] [-v | -u] replicate participant -c server --connect=server connect to server -a --add add participant -d --del remove participant -v --verify verify the existing replicates using master definition -u --autocreate automatically create tables if they do not exists |
使用 cdr modify replicate
命令修改副本属性。有一些限制:不能将冲突解决选项从忽略改为非忽略,也不能将非忽略选项改为忽略。
$ cdr modify replicate -x usage: cdr modify repl [-AORT] -C rule(s) [-i] [-a time] [-e min] [-f y|n] replicate -a time --at=time replicate at specified time -c server --connect=server connect to server -e intvl --every=intvl replicate every intvl minutes -i --immediate continuous replication (default) -A (y/n) --ats aborted transaction spooling -C rule[,rule] --conflict=rule[,rule] conflict resolution rule(s) -O --optimize don't call procedure unless different server -R (y/n) --ris row information spooling -T (y/n) --firetrigger fire triggers when replicating -S scope --scope=scope scope of conflict resolution (row or trans) -f y|n --fullrow y|n Enable/Disable sending of full row for updates -D y|n --ignoredel y|n do not process any deletes on targets -n --name=n mastered replicate name verification |
有三种运行 cdr list replicate
命令的方式。如果省略副本名,那么会产生所有已经定义的副本的详细信息。如果使用 brief
选项,就会产生所有副本的参与服务器列表。如果提供副本名,那么产生副本属性的详细列表。
$ cdr list repl -x usage: cdr list repl [-c server] [brief|full] [replicate(s)] -c server --connect=server connect to server |
根据定义,刚创建的副本是不活跃的。要想启用副本并让 ER 搜索针对这个表的活动的日志,就必须使用 cdr start replicate
。可以有选择地在一个或多个节点上启动一个副本,也可以在副本的所有参与节点上启动它。
$ cdr start repl -x usage: cdr start repl [-c server] [-S server [-e keep|delete|merge]] replicate [TargetServers] -c server --connect=server connect to server -S server --syncdatasource=server server to be used as a data source for sync -e --extratargetrows=[keep|delete|merge] handle extra row during sync TargetServers List of TargetServers to be started. Separate servers in the list by space. |
使用 cdr stop replicate
命令停止副本。这个命令将副本的状态设置为 inactive 并删除这个副本的所有发送队列数据。
$ cdr stop repl -x usage: cdr stop repl [-c server] replicate server(s) -c server --connect=server connect to server |
使用 cdr suspend replicate
命令暂停复制副本的数据。在副本暂停时,ER 捕捉对源数据库的修改并在队列中积累这些修改,但是不将捕捉到的数据发送到目标。如果在环境中引用完整性很重要,就不要使用这个命令,因为 ER 无法支持它。而是应该暂停服务器。
$ cdr suspend repl -x usage: cdr suspend repl [-c server] replicate(s) -c server --connect=server connect to server |
使用 cdr resume replicate
命令继续运行暂停的副本。
$ cdr resume repl -x usage: cdr resume repl [-c server] replicate(s) -c server --connect=server connect to server |
使用 cdr delete replicate
命令从 ER 环境中删除一个副本。ER 会从这个服务器和参与服务器列表中的所有其他节点上删除这个副本的所有引用。根据这个副本的发送队列中的数据量的不同,删除操作可能需要一些时间才能完成。
$ cdr delete repl -x usage: cdr delete repl [-c server] replicate(s) -c server --connect=server connect to server |