|
使用Oracle数据库高级复制中最简单的功能
( 2008/6/12 10:14 )
这篇论坛文章(赛迪网技术社区)根据一个实例着重讲解了使用Oracle数据库高级复制功能的具体方法及步骤,详细内容请参考下文: 前言 日益增长的分布式应用需求要求实现更好分布式的软件环境,不断推动着分布式技术的进步。Oracle数据复制是实现分布式数据环境的一种技术,通过在不同的物理站点拷贝数据来建立分布式数据环境。它与分布式数据库不同,在分布式数据库中,虽然每个数据对象也对所有的站点可用,但是特定的数据对象只存在于一个特定的站点中。而数据复制实现所有的站点都有相同数据对象的可用拷贝。 在一个典型的分布式商业应用中经常需要把个地区的数据备份到总部的数据库中,一方面可以作为一种备份方式,另一方面也方便总部应用中的综合统计。这是Oracle数据复制中的简单应用,本文将以这样一个例子,讲述如何实现Oracle数据复制。 实际情况是,A公司总部在北京,有三个营业部分别位于上海(ORACLE.SHANGHAI.COM)、杭州(ORACLE.HANGZHOU.COM)和武汉(ORACLE. WUHAN.COM)。三个营业部的软件系统相同,数据库结构也相同。现在需要把三个营业部的数据全部备份到总部的数据库中。 准备工作 在进行复制之前需要准备的东西很多,当然最基础就是网络必须畅通,之后需要收集一些复制环境的基本信息: 1. 需要复制的数据库站点的数量 2. 每个站点的Oracle版本号 3. 每个需要复制的数据库的大小 4. 每个数据库所使用的字符集 5. 每个需要复制的数据所用的方案名 收集完环境信息,可以开始建立总部的集中数据库,集中数据库要求版本高于所有主战点的版本,最好所有的数据库都是用相同的字符集。建好库后为每个主站点的备份数据分别建一个表空间,表空间大于需要复制的数据量,至于预留以后的发展空间视实际情况而定。 为每个主站点的对应复制数据建立方案,如果各个主站点所使用的方案名不同,在集中数据库站点分别建立名称相同的对应方案。否则为各主站点的复制数据分别建立相应的方案名。实际情况是后者,各营业部的数据库都是用Oracle的方案名,这里我们建立三个对应方 案:SHORACL、HZORACL 和WHORACL。所有数据库的版本都是9i。 基本概念 复制之前先解释一下复制中的几个概念: 1.主站点(Mater Site):在复制过程中提供数据源的站点。如上图中的上海数据库站点。 2.实体化视图站点(Materialized View Site):实体化视图复制中的目标站点。如上图中的北京数据库站点。 3.多主体站点复制(Multimaster Replication):复制环境中的站点都是主站点,对复制的数据库对象有相同的管理权限。 4.实体化视图复制(Materialized View Replication): 一个主体站点提供源复制对象,一个实体化视图站点拷贝主站点数据。 5.实体化视图(Materialized View):在实体化视图站点为每个复制表或者视图建立一个对应的表保存相应的数据,该表只能通过Oracle的复制机制进行增删改数据的操作。 6. 快速刷新、完全刷新和强制刷新:复制过程中的三种刷新方式。快速刷新只复制源数据对象的改变部分;完全刷新每次都拷贝一遍源数据对象;强制刷新是数据库的一个折衷方案,如果快速刷新失败则使用完全刷新。 7. 主体组(Master Group):主体站点中被复制的源数据对象的集合。 8. 实体化视图组(Materialized View Site):实体化视图站点中复制对象的集合。 9. 实体化视图日志(Materialized View Log):实体化视图复制中使用快速刷新时记录主体源数据对象操作日志的表。 同步复制和异步复制就不解释了,本例采用每天一次的异步复制。 进行复制 配置好本地服务名分别为:上海站点:SH,杭州站点:HZ,武汉站点:WH,北京站点:BJ,进入没有登录的sqlplus,让我们开始复制! 一.设置主站点 这里以上海主站点设置为例。 1.连接主站点,创建复制管理员并授予相应的权限,复制管理员是管理整个复制环境并创建复制对象的用户。只有数据管理员可以建立主体组和实体化视图组。
create user repadmin identified by repadmin; begin dbms_repcat_admin.grant_admin_any_schema( username=>’repadmin’); end; / grant comment any table to REPADMIN; grant lock any table to REPADMIN;
dbms_defer_sys.register_purpagator(username=>’repadmin’); end;
connect repadmin/repadmin@SH; begin dbms_defer_sys.schedule_purge( next_date=>sysdate,interval=>’sysdate + 1’,delay_seconds=>0); end;
connect system/passwd@SH; create user proxy_bjoracle identified by proxy_bjoracle; begin dbms_repcat_admin.register_user_repgroup( user_name=>’proxy_bjoracle, privilege_type => ’proxy_snapadmin’,list_of_gnames => NULL); end; / grant select_catalog_role to proxy_bjoracle;
connect repadmin/repadmin@SH; begin dbms_repcat.create_master_repgroup(gname=>’sh_rep’); end; / 6. 向主体组中添加复制对象
dbms_repcat.create_master_repobject( gname=>’sh_rep’, type=>’TABLE’, oname=>’ CREDIT_CARD’ sname=>’SHORACL’ use_existing_object=>TRUE, copy_rows=>TRUE); end;
dbms_repcat.create_master_repobject( gname=>’sh_rep’, type=>’INDEX’, oname=>’ INDEX_CREDIT_CARD’ sname=>’SHORACL’ use_existing_object=>TRUE, copy_rows=>FALSE); end; /
dbms_repcat.set_columns( sname => ’SHORACL’, oname => ’ CREDIT_CARD ’, column_list => ’ CREDIT_CARD_ID’); end; /
dbms_repcat.generate_replication_support( sname=>’SHORACL’, oname=>’ CREDIT_CARD’, type=>’TABLE’, min_communication=>TRUE); end; /
rowid excluding new values;
dbms_repcat.resume_master_activity( name=>’sh_rep’); end; /
connect system/passwd@BJ; create user mvadmin identified by mvadmin; begin dbms_repcat_admin. grant_admin_any_schema(username=> ’mvadmin’); end; / grant comment any table to mvadmin; grant lock any table to mvadmin; grant select any dictionary to mvadmin;
dbms_defer_sys.register_propagator( username => ’mvadmin’); end; /
com’;
(address=(protocol=tcp)(host=127.0.0.1)(port=1521)) (connect_data=(service_name=oracl)))’
connect mvadmin/mvadmin@BJ; begin dbms_defer_sys.schedule_purge( next_date => sysdate, interval => ’/*1:hr*/ sysdate + 1’, delay_seconds => 0, rollback_segment => ’’); end;
identified by proxy_bjoralce Connect to ... Identified by ...子句指明用什么用户连接远程数据库
dbms_defer_sys.schedule_push( destination => ’ora92zjk’,interval => ’/*1:hr*/ sysdate + 1’, next_date => sysdate,stop_on_error => false, delay_seconds => 0,parallelism => 0); end; /
connect system/passwd@BJ; grant alter session to crm; grant create cluster to crm; grant create database link to crm; grant create sequence to crm; grant create session to crm; grant create synonym to crm; grant create table to crm; grant create view to crm; grant create procedure to crm; grant create trigger to crm; grant unlimited tablespace to crm; grant create type to crm; grant create any snapshot to crm; grant alter any snapshot to crm;
connect SHORACL/SHORACL@BJ; create database link ORACLSH connect to ORACL identified by ORACL;
connect mvadmin/mvadmin@BJ; create materialized view SHORACL.CREDIT_CARD refresh fast wit h pr imar y key as sele ct * from ORA CL. CREDIT_CARD@ORACLSH;
fast with rowid as select * from ORACL. CREDIT_CARD@ORACLSH;
dbms_refresh.make ( name => ’mvadmin.sh_refresh’,list => ’’, next_date => sysdate,interval => ’sysdate + 1’, implicit_destroy => false,rollback_seg => ’’, push_deferred_rpc => true,refresh_after_errors => false); end;
dbms_refresh.add (name => ’mvadmin.sh_refresh’,list => ’SHORACL.CREDIT_CARD ’,lax => true); end; /
purge( delay_seconds=>0); end; b) declare rc binary_integer; begin rc := sys.dbms_defer_sys. push(destination=>’ORACLSH’, stop_on_error=>FALSE, delay_seconds=>0, parallelism=>0); end; c) dbms_refresh.refresh(’"MVADMIN"."SH_REFRESH"’);
dbms_job.run(job_no); end; /
在重新执行因出错而中断的作业前,需要手工找到出错点,并更正。 总结 本文只是使用了Oracle高级复制中最简单的功能,Oracle的高级复制还提供可更新视图和复杂的只读实体化视图复制,当然并不是我们都要去用高级复杂强大的功能,在具体应用的时候,还要根据系统功能和性能需求,选择适当的复制技术。
|
·技巧实例:如何在.NET中访问MySQL数据库 (9-25) ·有关PB/Sybase开发过程中数据库转移介绍 (9-25) ·SQL Server 2008数据库中如何使用表值参数 (9-25) ·甲骨文推“数据库机器” 首涉电脑硬件销售 (9-25) ·入门级的ORACLE数据库备份与数据库还原 (9-24) 热议文章·高端的口号低端的招标 电信招标有类联通 (9-18) 评:其实我觉得电信可以采用机卡一体机和机卡分离机并举的形式解决终端问题,毕竟世界范围... ·中国移动新一轮TD招标重点发生变化 (9-8) ·联通华盛易主中国电信 新联通组建终端公司华凯 (9-7) ·联通网通合并后名称暂定为联合网络通信公司 (8-27) ·现在部署WiMAX还是等待LTE? (8-26) ·超低报价搅局C网招标:对手指华为不正当竞争 (8-22) ·联通致力于成国际一流宽带通信信息服务运营商 (8-15) ·Intel嵌入式产品研讨会暨ATOM参考设计发布会 (9-28) ·打造下一代移动宽带业务的基石 (9-28) ·联系我们 (9-28) ·消费娱乐终端 (9-28) ·智能医疗终端 (9-28) ·车载信息娱乐 (9-28) |
|||||||||||||||
|