数据库的复制技术,提供了一种机制,使对某一个站点上数据的修改操作能够传递到其他站点,从而保证站点间数据的一致性。
复制:将数据库中的数据拷贝到另外一个或多个不同的物理站点上,从而保持源数据库与目标数据库中指定数据的一致性。
复制的方法
1. 同步复制
复制数据在任何时间在任何复制节点均保持一致。如果复制环境中的任何一个节点的复制数据发生了更新操作,这种变化会立刻反映到其他所有的复制节点。这种技术适用于那些对于实时性要求较高的商业应用中。
2. 异步复制
所有复制节点的数据在一定时间内是不同步的。如果复制环境中的其中的一个节点的复制数据发生了更新操作,这种改变将在不同的事务中被传播和应用到其他所有复制节点。这些不同的事务间可以间隔几秒,几分种,几小时,也可以是几天之后。复制节点之间的数据临时是不同步的,但传播最终将保证所有复制节点间的数据一致。
复制的对象
DM6支持以下对象的复制:
站点:将数据服务器看做一个站点,对其下所有数据库中的表对象进行复制;
数据库:仅对某一个数据库中的表对象进行复制;
模式:仅对某一个数据库中的某一个模式中的表对象进行复制;
表:仅对某一个表对象进行复制;
复制方式
DM6支持如下的复制方式:
一对一单向复制:单一数据对象到单一数据对象的复制过程。
例如:数据库服务器A中的对象向数据库服务器B中的对象进行复制的过程;
一对多单向复制:单一数据对象到多个数据对象的复制过程。
例如:数据库服务器A中的对象同时向数据库服务器B、C、D(甚至更多数据库服务器)中的对象进行复制的过程;
多对一单向复制:多个数据对象到单一数据对象的复制过程。
例如:数据库服务器A、B、C(甚至更多数据库服务器)中的对象同时向数据库服务器Z中的对象进行的复制过程;
级联复制:多个复制过程之间形成不交叉的复制链路的复制过程。
例如:数据库服务器A中的对象向数据库服务器B中的对象进行复制,数据库服务器B中的对象又向数据库服务器C中的对象进行复制,数据库服务器C中的对象又向数据库服务器D中的对象进行复制,依次链接下去,形成一个复制的链路。
多主多从复制:多个服务器数据对象向多个服务器对象进行复制的过程。
例如:数据库服务器A中的对象同时向数据库服务器X、Y、Z中的对象进行复制;数据库服务器B中对象同时向数据库服务器X、Z中的对象进行复制;数据库服务器C中对象同时向数据库服务器Y、Z中的对象进行复制的过程。该过程有多个复制的起点,同时存在多个复制的终点,形成多个主服务器(复制的起点)和多个从服务器(复制的终点)的复制过程。
环形复制:一种特殊的级联复制。最终形成的复制链路是一个环形的复制过程。
例如:数据库服务器A中的对象向数据库服务器B中的对象进行复制,数据库服务器B中对象又向数据库服务器A中的对象进行复制,这样就形成了一个最小的环形复制链路。
对称复制:在数据库服务器A、B之间进行复制的过程,是一种最小的环形复制过程。
约束条件
1. 只复制包含CLUSTER PK约束的表数据。
2. 复制关系的主表和从表必须分布在不同的服务器上。
3. 从服务器的PAGE SIZE必须大于等于主服务器的PAGE SIZE
DM6复制实现
下面通过实例介绍一对一表级同步复制的实现。
约定:
SERVER1:数据库服务器1,IP为223.254.102.27;
SERVER2:数据库服务器2,IP为223.254.100.63;
1.参数配置
在启动数据库服务器前,先修改服务器SERVER1上设置dm.ini参数,使REPLICATE_MODE = 1,然后启动主、从数据库服务器。
2.对象建立
复制表对象的建立:
以SYSDBA/SYSDBA登录SERVER1执行:
CREATE TABLE TABLE01_S1 (C1 INT CLUSTER PRIMARY KEY,C2 VARCHAR(100)); |
以SYSDBA/SYSDBA登录SERVER2执行:
CREATE TABLE TABLE01_S2 (C1 INT CLUSTER PRIMARY KEY,C2 VARCHAR(100)); |
建立同步复制关系
以SYSDBA/SYSDBA登录SERVER1执行:
CALL SP_CREATE_REPLICATE_LOGIN('223.254.100.63',12345,'SYSDBA','SYSDBA'); CALL SP_CREATE_TABLE_REPLICATE('SYSTEM.SYSDBA.TABLE01_S1','SYSTEM.SYSDBA.TABLE01_S2','223.254.100.63','SYNC'); |
通过调用以上两个函数,来建立主数据库服务器对象SYSTEM.SYSDBA.TABLE01_S1向从数据库服务器对象SYSTEM.SYSDBA.TABLE01_S2进行复制的关系,只有在建立该复制关系后,在主数据库服务器对象上的操作才会被复制到从数据库服务器的对象上。
系统函数SP_CREATE_REPLICATE_LOGIN,用来建立复制过程中登录从服务器的登录信息。其参数分别表示:
s_server: 从服务器名或IP地址;
s_port: 从服务器端口号;
s_login: 从服务器登录名;
s_password: 从服务器登录口令;
系统函数SP_CREATE_TABLE_REPLICATE,用来建立主数据库服务器表对象SYSTEM.SYSDBA.TABLE01_S1向从数据库服务器SYSTEM.SYSDBA.TABLE01_S2进行复制的关系。建立此关系后,在主服务器表对象SYSTEM.SYSDBA.TABLE01_S1才会复制到从服务器表对象SYSTEM.SYSDBA.TABLE01_S2中。其参数分别表示:
m_db_sch_tab: 主服务器表对象名;
s_db_sch_tab: 从服务器表对象名;
s_server: 从服务器名或IP地址;
type: 复制类型(同步复制、异步复制);
3.复制操作
插入操作:
SYSDBA/SYSDBA登录SERVER1执行:
INSERT INTO TABLE01_S1 VALUES (1,'INSERT ONE ROW'); SELECT * FROM TABLE01_S1; |
预期结果:1, INSERT ONE ROW
SYSDBA/SYSDBA登录SERVER2执行:
SELECT * FROM TABLE01_S2; |
预期结果:1, INSERT ONE ROW
更新操作:
SYSDBA/SYSDBA登录SERVER1执行:
UPDATE TABLE01_S1 SET C2='UPDATE ONE COL'; SELECT * FROM TABLE01_S1; |
预期结果:1, UPDATE ONE COL
SYSDBA/SYSDBA登录SERVER2执行:
SELECT * FROM TABLE01_S2; |
预期结果:1, UPDATE ONE COL
删除操作:
SYSDBA/SYSDBA登录SERVER1执行:
DELETE FROM TABLE01_S1; SELECT * FROM TABLE01_S1; |
预期结果:空;
SYSDBA/SYSDBA登录SERVER2执行:
SELECT * FROM TABLE01_S2; |
预期结果:空;
新闻热点
疑难解答