《实现Oracle数据库复制数据库 电脑资料》由会员分享,可在线阅读,更多相关《实现Oracle数据库复制数据库 电脑资料(11页珍藏版)》请在金锄头文库上搜索。
1、实现Oracle数据库复制数据库 电脑资料 我们经常希望把各地的数据入库后进行统一的应用, 我们经常希望把各地的数据入库后进行统一的应用。现在可以用复制技术来解决这个问题。但实现数据库复制也是要有一些条件的。 首先,数据库要具备高级复制功能(用system身份数据库,查看v$option视图,如果其中Advanced replication为TRUE,则支持高级复制功能;否则不支持)。 如果具备高级复制功能,数据库要进行一些参数初始化。 db_domain = test. 指明数据库的域名(默认的是WORLD),这里可以用您公司的域名;global_names = true 它要求数据库链接(
2、database link)和被连接的数据库名称一致,现在全局数据库名:db_name+”.”+db_domain ; 跟数据库job执行有关的参数: job_queue_processes = 1; job_queue_interval = 60; distributed_transactions = 10; open_links = 4 第一行定义SNP进程的启动个数为n。系统缺省值为0,正常定义范围为036,根据任务的多少,可以配置不同的数值。第二行定义系统每隔N秒唤醒该进程一次。系统缺省值为60秒,正常范围为13600秒。事实上,该进程执行完当前任务后,就进入睡眠状态,睡眠一段时间后,
3、由系统的总控负责将其唤醒。如果修改了以上这几个参数,需要重新启动数据库以使参数生效。 做完了初步的准备,我们来实现数据库同步复制。 假设在Inte.上有两个数据库:一个叫中国(China),一个叫日本(Japan)。 具体配置如下: 数据库名:China、Japan 数据库域名 test. 数据库sid号 China、Japan Listener端口号 1521 服务器ip地址 10.1.0.100 10.1.0.200 确认两个数据库之间可以互相访问,在tnsnames.ora里设置数据库连接字符串。 中国这边的数据库连接字符串是以下的格式: Japan = (DESCRIPTION = (
4、ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.200)(PORT = 1521) ) (CONNECT_DATA = (SERVICE_NAME = Japan) ) ) 运行$tnsping Japan,出现以下提示符: Attempting to contact (ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.200)(PORT=1521) OK(n毫秒) 表明中国数据库可以访问日本数据库。在日本那边也同样配置,确认$tnsping China 是通的。 改数据库全局名称,建公共的数据库链接。 用s
5、ystem身份China数据库 SQLalter database rename global_name to China.test.; 用system身份Japan数据库: SQLalter database rename global_name to Japan.test.; 用system身份China数据库。 SQLcreate public database link Japan.test. using Japan; 测试数据库全局名称和公共的数据库链接。 SQLselect * from global_nameJapan.test.; 返回结果为Japan.test.就对了。 用s
6、ystem身份Japan数据库: SQLcreate public database link China.test. using China; 测试数据库全局名称和公共的数据库链接。 SQLselect * from global_nameChina.test.; 返回结果为China.test.就对了。 建立管理数据库复制的用户repadmin,并赋权, 用system身份China数据库: SQLcreate user repadmin identified by repadmin default tablespace users temporary tablespace temp; S
7、QLexecute dbms_defer_sys.register_propagator(repadmin); SQLgrantexecute any procedure to repadmin; SQLexecute dbms_repcat_admin.grant_admin_any_repgroup(repadmin); SQLgrant ment any table to repadmin; SQLgrant lock any table to repadmin; 同样用system身份Japan数据库,运行以上的命令,管理数据库复制的用户repadmin,并赋权。 在数据库复制的用户r
8、epadmin下创建私有的数据库链接。 用repadmin身份China数据库。 SQLcreate database link Japan.test. connect to repadmin identified 在Japan数据库那边同样运行以上,。 在Japan数据库scott用户下创建主关键字的序列号,范围避免和China的冲突。 SQL create sequence dept_no increment by 1 start with 45 maxvalue 99 cycle nocache; 在Japan数据库scott用户下插入初始化数据。 SQLinsert into dept
9、 values (dept_no.nextval,sales,chicago); SQLinsert into dept values (dept_no.nextval,operations,boston); SQLmit; 创建要复制的组scott_mg,加入数据库对象,产生对象的复制支持。 用repadmin身份China数据库,创建主复制组scott_mg: SQL execute dbms_repcat.create_master_repgroup(scott_mg); 在复制组scott_mg里加入数据库对象: SQLexecute dbms_repcat.create_master
10、_repobject(sname=scott,oname=dept, type=table,use_existing_object=true,gname=scott_mg); 参数说明: sname 实现数据库复制的用户名称; oname 实现数据库复制的数据库对象名称; type 实现数据库复制的数据库对象类别; use_existing_object true表示用主复制节点已经存在的数据库对象; gname 主复制组名; 对数据库对象产生复制支持: SQLexecute dbms_repcat.generate_replication_support(scott,dept,table);
11、 确认复制的组和对象已经加入数据库的数据字典: SQLselect gname, master, status from dba_repgroup; SQLselect * from dba_repobject; 创建主复制节点: 用repadmin身份China数据库,创建主复制节点: SQLexecute dbms_repcat.add_master_database (gname=scott_mg,master=Japan.test., use_existing_objects=true, copy_rows=false, propagation_mode = asynchronous); 参数说明: gname 主复制组名; master 加入主复制节点的另一个数据库; use_existing_object true表示用主复制节点已经存在的数据库对象; copy_rows false表示第一次开始复制时不用和主复制节点保持一致; propagation_mode 异步地执行; 确认复制的任务队列已经加入数据库的数据字典: SQLselect * from user_jobs; 使同步组的状态由停顿(quiesced )改为正常(normal): 用repa 原文转自:.ltesting. 内容仅供参考