ER:复制
本节讨论以下主题:
- 正本界说
- 主正本
- 正本集
- 模板
- 管理
正本界说
在计划创建正本时,要思索以下因素:
- 运用非缓冲的数据库日记记载
- 启用行级锁来失失更好的方针并发性
- 决定复制典范楷模 —— update anywhere 或主/方针
- 决定抵触处置规矩 —— 疏忽、老是、时辰戳、存储进程
- 运用抵触处置办法在表中添加 CRCOLS
- 决定复制的数据的规模 —— 行或事宜
- 思索其他复制选项,比喻 ATS、RIS、fullrow、疏忽删除、频率、浮点格式
- 确保表中存在主键
清单 24 中的示例在三个节点上界说一个简略的正本(采用 update anywhere 办法)。看重,列出每个到场效劳器的行采用以下格式:“database_name@server_group:table_owner.table_name” “SELECT
语句和可选的 WHERE
子句”:
清单 24. update anywhere 正本的示例
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 给出相反的语句,然则这一次界说的是主/方针正本:
清单 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"
清单 26. cdr define replicate 的语法
$ 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=<node> define master replicate -t --empty Empty mastered replicate -n --name=y|n mastered replicate name verification -v --verify verify the existing replicates using master definition -u --autocreate automatically create tables if they do not exists -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 --ats aborted transaction spooling -C rule[,rule] --conflict=rule[,rule] conflict resolution rule(s) -F --floatcanon transfer floating point in canonical form (deprecated) -I --floatieee transfer floating point in IEEE form (recommended) -O --optimize don't call procedure unless different server -R --ris row information spooling -T --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 -m <primary repl> --mirrors <primary repl> Define a shadow replicate -D y|n --ignoredel y|n do not process any deletes on targets
主正本
什么是主正本(master replicate)?主正本可以保证 ER 情况中效劳器之间的分比喻性。它们具有以下好处:
- 查抄统统到场效劳器的表形式能否与主正本界说婚配,从而确保数据完备性
- 如果表在方针节点上不存在,就自动创建表
- 答应更动复制的表上的操纵
有三种主正本典范楷模:
- Normal —— 列名不必婚配,然则形式必需婚配
- Strict —— 统统到场效劳器的表必需具有相反的列名和形式性质
- Empty —— 指定一个到场效劳器作为主正本的底子,然则不在正本中包含这个到场效劳器
正本集
正本集是几个正本的逻辑集合,可以作为一个单位停止管理。经过议定运用正本集,可以只用一个命令启动、中缀、停息或连续运转正本会合的统统正本。有两种正本集典范楷模:排他(exclusive)和非排他(non-exclusive)。
排他正本集要求统统正本具有相反的形态和频率设置。属于一个排他正本集的正本不能同时属于其他任何正本集。运用 --exclusive
选项创建排他正本集。
非排他正本集既答应对正本会合的正本停止一致管理,也答应单独管理。这意味着非排他正本会合的正本可以具有分比喻的形态;非排他正本集自身没有形态。另外,一个正本可以属于多个非排他正本集。
清单 27. cdr define replicateset 的语法
$ 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 会实行以下操纵:
- 如果数据库在方针节点上不存在,就自动创建数据库
- 如果表在方针节点上不存在,就自动创建表
- 表同步/填充
清单 28. cdr define template 的语法
$ 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=<node> define master replicate -c server --connect=server connect to server -A --ats aborted transaction spooling -F --floatcanon transfer floating point in canonical form (deprecated) -I --floatieee transfer floating point in IEEE form (recommended) -O --optimize don't call procedure unless different server -R --ris row information spooling -T --firetrigger fire triggers when replicating -D y|n --ignoredel y|n do not process any deletes on targets -X --exclusive Exclusive template. -d --database=<name> database to be used to obtain the table info -a --all include all tables in template -f --file=<name> file to obtain the list of table participants
清单 29 中的示例在三个节点上为 stores7 数据库设置一个模板。看重:在运转这个命令之前,须要在基表中添加 CRCOLS 列。
清单 29. 为 stores7 数据库创建模板
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"
管理
本节讨论如何管理正本、正本集和模板,包含点窜、列出、启动、中缀、停息、连续运转和删除。管理正本和正本集的年夜多半命令特殊非常雷同,以是本节只讨论正本的管理。
点窜 ER 正本
可以对现有的正本停止两种点窜:
- 添加或删除到场效劳器
- 点窜正本属性
运用以下命令添加或删除到场效劳器:
清单 30. cdr change replicate 的语法
$ 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
命令点窜正本属性。有一些限制:不能将抵触处置选项从疏忽改为非疏忽,也不能将非疏忽选项改为疏忽。
清单 31. 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
列出 ER 正本
有三种运转 cdr list replicate
命令的体式款式。如果省略正本名,那么会爆发统统曾经界说的正本的具体信息。如果运用 brief
选项,就会爆发统统正本的到场效劳器列表。如果供应正本名,那么爆发正本属性的具体列表。
清单 32. cdr list replicate 的语法
$ cdr list repl -x usage: cdr list repl [-c server] [brief|full] [replicate(s)] -c server --connect=server connect to server
启动 ER 正本
根据界说,刚创建的正本是不活跃的。要想启用正本并让 ER 搜刮针对这个表的活动的日记,就必需运用 cdr start replicate
。可以有选择地在一个或多个节点上启动一个正本,也可以在正本的统统到场节点上启动它。
清单 33. 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.
中缀 ER 正本
运用 cdr stop replicate
命令中缀正本。这个命令将正本的形态设置为 inactive 并删除这个正本的统统发送行列数据。
清单 34. cdr stop replicate 的语法
$ cdr stop repl -x usage: cdr stop repl [-c server] replicate server(s) -c server --connect=server connect to server
停息 ER 正本
运用 cdr suspend replicate
命令停息复制正本的数据。在正本停息时,ER 捕获对源数据库的点窜并内行列中蕴蓄这些点窜,然则不将捕获到的数据发送到方针。如果在情况中引用完备性很严正,就不要运用这个命令,因为 ER 无法支持它。而是应该停息效劳器。
清单 35. cdr suspend replicate 的语法
$ cdr suspend repl -x usage: cdr suspend repl [-c server] replicate(s) -c server --connect=server connect to server
连续运转 ER 正本
运用 cdr resume replicate
命令连续运转停息的正本。
清单 36. cdr resume replicate 的语法
$ cdr resume repl -x usage: cdr resume repl [-c server] replicate(s) -c server --connect=server connect to server
删除 ER 正本
运用 cdr delete replicate
命令从 ER 情况中删除一个正本。ER 会从这个效劳器和到场效劳器列表中的统统其他节点上删除这个正本的统统引用。根据这个正本的发送行列中的数据量的分比喻,删除操纵年夜约须要一些时辰才华完成。
清单 37. cdr delete replicate 的语法
$ cdr delete repl -x usage: cdr delete repl [-c server] replicate(s) -c server --connect=server connect to server
版权声明: 原创作品,答应转载,转载时请务必以超链接办法标明文章 原始情由 、作者信息和本声明。否则将清查纪律责任。