《利用Oracle高级复制功能实现数据库的同步》由会员分享,可在线阅读,更多相关《利用Oracle高级复制功能实现数据库的同步(7页珍藏版)》请在金锄头文库上搜索。
1、利用 Oracle 高级复制功能实现数据库的同步岀于使用效率的考虑, 客户对数据库有时会有这样的需求:在NC生产环境中的数据库之外,另建立一个备份数据库, 在这个备份数据库中实现与生产环境中数据库的同步,此数据库单独用来进行报表查询。经查询相关资料,ORACLE的高级复制技术提供了解决方案,以下在win2003与WINXP ORACLE 10G中测试通过。一、实现数据库复制的前提条件1 、数据库支持高级复制功能您可以用 system 身份登录数据库,查看 v$option 视图,如果其中 Advanced replication 为TRUE则支持高级复制功能;否则不支持。2、数据库初始化参数要
2、求 、 db_domain= 指明数据库的域名 ( 默认的是 WORLD) 这里可以用您公司的域名。 、 global_names= true它要求数据库链接 (database link) 和被连接的数据库名称一致。 现在全局数据库名: db_name+.+db_domain 、有跟数据库job执行有关的参数job_queue_processes =1job_queue_interval = 60distributed_transactions= 10open_links = 4第一行定义SNP进程的启动个数为 n。系统缺省值为 0,正常定义范围为036,根据任务的多少,可以配置不同的数值。
3、第二行定义系统每隔 N 秒唤醒该进程一次。系统缺省值为 60 秒,正常范围为 1 3600 秒。事实 上,该进程执行完当前任务后, 就进入睡眠状态, 睡眠一段时间后, 由系统的总控负责将其唤醒。 如果修改了以上这几个参数,需要重新启动数据库以使参数生效。、实现数据库同步复制的步骤 假设在 Internet 上我们有两个数据库:一个叫深圳 (shenzhen) ,一个叫北京 (beijing) 具体配置见下表:数据库名 shenzhen beijing数据库域名 数据库 sid 号 shenzhen beijingListener 端口号 15211521服务器 ip 地址 10.1.1.10
4、010.1.1.2001 、确认两台数据库之间可以互相访问,在tnsnames.ora 里设置数据库连接字符串。 、例如:深圳这边的数据库连接字符串是以下的格式beijing =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.200)(PORT = 1521)(CONNECT_DATA =(SERVICE_NAME = beijing)运行 $tnspingbeijing出现以下提示符:Attempting to contact (ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.
5、200)(PORT=1521) OK( n 毫秒)表明深圳数据库可以访问北京数据库。 、在北京那边也同样配置,确认$tn spi ngshe nzhen 是通的。2、改数据库全局名称,建公共的数据库链接。 、用system 身份登录 shenzhen 数据库SQLalterdatabaserenameglobal_;用 system 身份登录 beijing 数据库:SQLalterdatabaserenameglobal_; 、用system 身份登录 shenzhen 数据库SQLcreate public database link using beijing;测试数据库全局名称和公共的
6、数据库链接SQLselect * from global_;返回结果为 就对了。用 system 身份登录 beijing 数据库:SQLcreate public database link using shenzhen;测试数据库全局名称和公共的数据库链接SQLselect * from global_;返回结果为 就对了。3、建立管理数据库复制的用户 repadmin ,并赋权。 、用system 身份登录 shenzhen 数据库tablespace usersSQLcreate user repadmin identified by repadmin default tempo
7、rary tablespace temp;SQLexecute dbms_defer_sys.register_propagator(repadmin);SQLgrant execute any procedure to repadmin;SQLexecute dbms_repcat_admin.grant_admin_any_repgroup(repadmin);SQLgrant comment anytableto repadmin;SQLgrantlockany table torepadmin;、同样用system身份登录beijing数据库,运行以上的命令, 管理数据库复制的用户 r
8、epadmin ,并赋权。说明: repadmin 用户名和密码可以根据用户的需求自由命名。4 、在数据库复制的用户 repadmin 下创建私有的数据库链接。 、用 repadmin 身份登录 shenzhen 数据库SQLcreate database link connect to repadmin identifiedby repadmin;测试这个私有的数据库链接:SQLselect * from global_;返回结果为 就对了。 、用repadmin身份登录beijing数据库SQLcreate database link connect to repadmin ident
9、ified by repadmin;测试这个私有的数据库链接SQLselect * from global_;返回结果为 就对了。5、创建或选择实现数据库复制的用户和对象,给用户赋权,数据库对象必须有主关键字。假设我们用ORACLE里举例用的scott用户,dept表。、用internal 身份登录shenzhen数据库,创建 scott用户并赋权SQLcreateuser scott identifiedby tigerdefaulttablespaceuserstemporarytablespacetemp;SQLgrantconnect,resource to scott;SQLgra
10、ntexecuteon sys.dbms_defertoscott;、用scott身份登录shenzhen 数据库,创建表deptSQLcreatetable dept(deptno number(2) primary key,dname varchar2(14),loc varchar2(13) ); 、如果数据库对象没有主关键字,可以运行以下SQL命令添加:SQLalter table dept add (constraint dept_deptno_pk primary key (deptno); 、在shenzhen数据库scott用户下创建主关键字的序列号,范围避免和beijing
11、的冲突。SQL create sequence dept_no increment by 1 start with 1 maxvalue 44 cycle nocache;( 说明: maxvalue 44 可以根据应用程序及表结构主关键字定义的位数需要而定) 、在shenzhen数据库scott用户下插入初始化数据SQLinsertinto dept values (dept_no.nextval,accounting,newyork);SQLinsertinto dept values (dept_no.nextval,research,dallas);SQLcommit;、在beijin
12、g数据库那边同样运行以上,、在beijing数据库 scott 用户下创建主关键字的序列号,范围避免和shenzhen 的冲突。SQLcreatesequence dept_no increment by 1 start with45 maxvalue 99cyclenocache;、在beijing数据库 scott 用户下插入初始化数据SQLinsertintodept values (dept_no.nextval,sales,chicago);SQLinsertintodept values (dept_no.nextval,operations,boston);SQLcommit;6
13、、创建要复制的组 scott_mg ,加入数据库对象,产生对象的复制支持 、用repadmin 身份登录shenzhen数据库,创建主复制组scott_mgSQL execute dbms_repcat.create_master_repgroup(scott_mg);说明: scott_mg 组名可以根据用户的需求自由命名。 、在复制组scott_mg里加入数据库对象SQLexecute dbms_repcat.create_master_repobject(sname=scott,oname=dept, type=table,use_existing_object=true,gname=scott_mg);参数说明:sname 实现数据库复制的用户名称oname 实现数据库复制的数据库对象名称( 表名长度在 27 个字节内,程序包名长度在 24 个字节内 )type 实现数据库复制的数据库对象类别( 支持的类别:表,索引,同义词,触发器,视图,过程,函数,程序包,程序包体)use_existing_object true 表示用主复制节点已经存在的数据库对象gname 主复制组名 、对数据库对象产生复制支持SQLexecute dbms_repcat.generate_replication_support(scott,de