『壹』 两台oracle10g数据库,如何才能进行数据同步
分布实现Oracle数据库的实时数据复制的步骤是这样的:
在具体的实现之前,首先要做好设计与规划。这就需要细致分析具体的业务情况,设计出一套能够满足业务需要的方案。通常在设计过程中,需要确定出要建立的数据库站点,各站点的类型,需要复制的数据对象,以及同步方式、冲突解决方案等内容。
在设计完成之后,就可具体来实现数据复制,数据复制的实现主要包括以下几步:
(1)创建复制站点;
(2)创建组对象;
(3)配置冲突解决方案。
下面我们举一个例子来说明各步具体需要完成的工作。在这个例子中我们采用多主控站点复制方式,设有两个主控站点和两个共享数据表。两个主控站点分别为:处理站点(cl.world)和解释站点(js.wo rld);两个数据表为测区( survey)和测线( line)。
STEP1 创建复制站点:
(1)首先以SYSTEM身份登陆主站点数据库cl.worldCONNECT system/[email protected];
(2)创建用户—复制管理员,并为该用户授权复制管理员负责复制站点的创建和管理,每个复制站点都必须创建复制管理员以下为引用的内容:
CREATE USER repadmin IDENTIFIED BY repadmin;
BEGIN
DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => ’repadmin’);
END;
(3)为本站点指定传播者(传播者负责将本地最新更新的数据传播到其他站点上):
BEGIN
DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username => ’repadmin’);
END;
(4)为本站点指定接收者(接收者负责接收其他站点上的传播者传送过来的数据):
BEGIN
DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
username => ’repadmin’,
privilege_type => ’receiver’,
list_of_gnames => NULL);
END;
(5)确定清除时间:
为了使传送过来事务队列不致过大,需要将成功加载的事务从事物队列里清除掉,这里设定每小时清除一次:
CONNECT repadmin/[email protected]
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PURGE (
next_date => SYSDATE,
interval => ’SYSDATE + 1/24’,
delay_seconds => 0);
END;
在建立好站点cl.world后,以同样的方法创建站点js. world。
(6)创建各主控站点之间的调度链接:
创建各主控站点之间的调度链接需要先在各主控站点间建立数据库链接,之后为每个数据库链接定义调度时间。
首先,在处理站点上建立与解释站点的数据库链接,这里需要先建立一个公用数据库链接,供其他私有数据库链接来使用。
以下为引用的内容:
CONNECT SYSTEM/[email protected]
CREATE PUBLIC DATABASE LINK js.world USING ’js.world’;
CONNECT repadmin/[email protected]
CREATE DATABASE LINK js.world CONNECT TO repadmin
IDENTIFIED BY repadmin;
同样,在解释站点上建立与处理站点的数据库链接。
以下为引用的内容:
CONNECT SYSTEM/[email protected]
CREATE PUBLIC DATABASE LINK cl.world USING ’cl.world’;
CONNECT repadmin/[email protected]
CREATE DATABASE LINK cl.world CONNECT TO repadmin
IDENTIFIED BY repadmin;
调度链接确定本站点上的事务向其他站点发送的频度,下面的代码为10分钟一次:
以下为引用的内容:
CONNECT repadmin/[email protected]
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PUSH (
destination => ’js.world’,
interval => ’SYSDATE + (1/144)’,
next_date => SYSDATE,
parallelism => 1,
execution_seconds => 1500,
delay_seconds => 1200);
END;
在解释站点上做相同的工作STEP2 创建主控组在复制环境中,Oracle用组来管理复制对象。通过将相关的复制对象放在一个组里,从而方便对大量数据对象的管理。
这里我们假设用户模式integr ation 在处理站点和解释站点都已存在,而且表测区(survey )和测线(line)也已经创建。
(1)创建主控组对象 以下为引用的内容:
CONNECT repadmin/[email protected]
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPGROUP (
gname => ’inte_repg’);
END;
(2)向主控组中添加数据对象,将测区表survey加入到组inte_repg中以下为引用的内容:
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPOBJECT (
gname => ’inte_repg’,
type => ’TABLE’,
oname => ’survey’,
sname => ’integration’,
use_existing_object => TRUE,
_rows => FALSE);
END;
以同样的方法将测线表line加入到组inte_repg中。
(3)在主控组中添加其他参与复制的站点,数据库之间的同步方式在此指定以下为引用的内容:
BEGIN
DBMS_REPCAT.ADD_MASTER_DATABASE (
gname => ’inte_repg’,
master => ’js.world’,
use_existing_objects => TRUE,
_rows => FALSE,
propagation_mode => ’ASYNCHRONOUS’);
END;
(4)如果可能出现冲突,则需要配置冲突解决方案。
(5)为每个对象生成复制支持,以下为引用的内容:
BEGIN
DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT (
sname => ’integration’,
oname => ’survey’,
type => ’TABLE’,
min_communication => TRUE);
END;
测线表line也一样。
(6)重新开始复制以下为引用的内容:
BEGIN
DBMS_REPCAT.RESUME_MASTER_ACTIVITY (
gname => ’inte_repg’);
END;
以同样的方式设置解释站点。设置成功后,数据复制过程就宣告完毕,库中的数据就可进行复制。
『贰』 两个一样的oracle 数据库怎么实现数据定期同步
两个一样的oracle ,定期同步,说白了就是主备用数据库数据同步的问题回;
如果数据库答A和数据库B是建立在两台独立的数据库服务器上,那么采用dblink方式是一种可行的方式,
第一种方式:前提是数据库A和数据库B本地网是24小时互通的同时对数据同步实时性有比较高的要求,那么可以建立DBLINK,在两个库都建触发器,不管当前在哪个库发生数据更新的时候实时同步数据到目标数据库;
第二种方式:如果数据同步的实时性要求不高,则可以通过定制存储过程的方式(给两个库的数据表加时间戳或者更新标志,)定时同步数据;
第三种方式:通过给两个数据库的数据表加更新标志字段,以第一种方式为主以满足实时性的要求,以第二种方式为辅弥补可能存在的触发器执行更新未成功的情况。
以上的方案都是从数据层面所做的处理,对于数据实时同步还是会存在一定的风险,那么双机热备应该说是最好的选择了。
『叁』 如何同步oracle数据结构
一、第一套方案
1、用新的建库脚本创建一套新的数据库,结构和类型都是新的;
2、用数据导入工具,将原数据库的数据导入到新的数控里面;
二、第二套方案
1、用新的建库脚本创建一套新的数据库,结构和类型都是新的;
2、用数据库结构同步工具,将老的数据库结构更新同步到新建的数据库上面;
两套方案肯定都可行,主要在工作量和工作效率上面区别太大,导数据需要工具,可以用Sqlserver提供的DTS,有的结构变动大的需要对应字段关系,太麻烦;
所以我想到用数据库结构同步工具来进行,记得以前就用过这个功能,我们可以在网上轻松找到oracle数据库客户端操作工具PLSQL Developer,这个工具除了对数据库进行日常的维护之外,还提供很多使用的功能,同步两个数据库的结构,就是其中一个,操作步骤如下:
1、打开PLSQL Developer进入新创建的数据库;
打开菜单如下图:
这时,会把不同之处用脚本列出来,只要点击右边的绿色对号,同步即可;
这样,结构一下就都改好了,很方便。