数据库支持高级复制功能
您可以用system身份登录数据库查看v$option视图如果其中Advanced replication为TRUE则支持高级复制功能否则不支持
数据库初始化参数要求
①db_domain =
指明数据库的域名(默认的是WORLD)这里可以用您公司的域名
②global_names = true
它要求数据库链接(database link)和被连接的数据库名称一致
现在全局数据库名db_name++db_domain
③有跟数据库job执行有关的参数
job_queue_processes = 定义SNP进程的启动个数为n系统缺省值为正常定义范围为~根据任务的多少可以配置不同的数值
job_queue_interval = 定义系统每隔N秒唤醒该进程一次系统缺省值为秒正常范围为~秒事实上该进程执行完当前任务后就进入睡眠状态睡眠一段时间后由系统的总控负责将其唤醒
distributed_transactions =
open_links =
如果修改了以上这几个参数需要重新启动数据库以使参数生效
数据库名 ying orcl
数据库域名
数据库sid号ying orcl
Listener端口号
服务器ip地址
改数据库全局名称建公共的数据库链接
①用system身份登录ying数据库
alter database rename global_name to
用system身份登录orcl数据库
alter database rename global_name to
②用system身份登录ying数据库
create public database link using ying;
select * from globacn
用system身份登录orcl数据库
create public database link using orcl
select * from globacn
建立管理数据库复制的用户repadmin并赋权
①用system身份登录ying数据库
create user repadmin identified by repadmin default tablespace users temporary tablespace temp
begin
dbms_defer_sysregister_propagator(repadmin);
end;
grant execute any procedure to repadmin;
begin
dbms_repcat_admingrant_admin_any_repgroup(repadmin);
end;
grant comment any table to repadmin;
grant lock any table to repadmin;
②同样用system身份登录orcl数据库运行以上的命令管理数据库复制的用户repadmin并赋权
create user repadmin identified by repadmin default tablespace users temporary tablespace temp
begin
dbms_defer_sysregister_propagator(repadmin);
end;
grant execute any procedure to repadmin;
begin
dbms_repcat_admingrant_admin_any_repgroup(repadmin);
end;
grant comment any table to repadmin;
grant lock any table to repadmin;
*********************************************************************
说明repadmin用户名和密码可以根据用户的需求自由命名
*********************************************************************
在数据库复制的用户repadmin下创建私有的数据库链接
①用repadmin身份登录ying数据库
create database link connect to repadmin identified by repadmin;
select * from globacn; 测试
②用repadmin身份登录orcl数据库
create database link connect to repadmin identified by repadmin;
select * from globacn; 测试
创建或选择实现数据库复制的用户和对象给用户赋权数据库对象必须有主关键字
假设我们用ORACLE里举例用的water用户t_file_all表
①用internal身份登录ying数据库创建water用户并赋权
SQL>create user water identified by water default tablespace water temporary tablespace water;
SQL>grant connect resource to water;
SQL>grant execute on sysdbms_defer to water;
②用water身份登录ying数据库创建表t_file_all
③如果数据库对象没有主关键字可以运行以下SQL命令添加
alter table t_file_all add (constraint t_file_all_key primary key (t_file_all_id));
④在ying数据库water用户下创建主关键字的序列号范围避免和orcl的沖突
⑤在ying数据库water用户下插入初始化数据
⑥在orcl数据库那边同样运行以上①②③
⑦在orcl数据库water用户下创建主关键字的序列号范围避免和water的沖突
⑧在beijing数据库scott用户下插入初始化数据
创建要复制的组water_t_file_all加入数据库对象产生对象的复制支持
①用repadmin身份登录ying数据库创建主复制组water_t_file_all
begin
dbms_repcatcreate_master_repgroup(water_t_file_all);
end;
②在复制组scott_mg里加入数据库对象
begin
dbms_repcatcreate_master_repobject
(sname=>wateroname=>t_file_all
type=>tableuse_existing_object=>true
gname=>water_t_file_all
);
end;
*******************************
参数说明
sname 实现数据库复制的用户名称
oname 实现数据库复制的数据库对象名称
(表名长度在个字节内程序包名长度在个字节内)
type 实现数据库复制的数据库对象类别
(支持的类别表索引同义词触发器视图过程函数程序包程序包体)
use_existing_object true表示用主复制节点已经存在的数据库对象
gname 主复制组名
*******************************
③对数据库对象产生复制支持
begin
dbms_repcatgenerate_replication_support(watert_file_alltable);
end;
(说明产生支持water用户下t_file_all表复制的数据库触发器和程序包)
④确认复制的组和对象已经加入数据库的数据字典
select gname master status from dba_repgroup 测试
select * from dba_repobject 测试
创建主复制节点
①用repadmin身份登录ying数据库创建主复制节点
begin
dbms_repcatadd_master_database
(gname=>water_t_file_all
master=>
use_existing_objects=>true
copy_rows=>false
propagation_mode => asynchronous);
end;
**********************************************
参数说明
gname 主复制组名
master 加入主复制节点的另一个数据库
use_existing_object true表示用主复制节点已经存在的数据库对象
copy_rows false表示第一次开始复制时不用和主复制节点保持一致
propagation_mode 异步地执行
***********************************************
select * from user_jobs; 测试是否在复制任务中
使同步组的状态由停顿(quiesced )改为正常(normal)
①用repadmin身份登录ying数据库运行以下命令
begin
dbms_repcatresume_master_activity(water_t_file_allfalse);
end;
不行用该命令
begin
dbms_repcatresume_master_activity(water_t_file_alltrue);
end;
测试同步是否正常(status为normal)
select gname master status from dba_repgroup
创建复制数据库的时间表我们假设用固定的时间表分钟复制一次
①用repadmin身份登录ying数据库运行以下命令
begin
dbms_defer_sysschedule_push (
destination =>
interval => sysdate + /(*) 每隔分钟
next_date => sysdate);
end;
/
begin
dbms_defer_sysschedule_purge (
next_date => sysdate
interval => sysdate + /(*)
delay_seconds =>
rollback_segment => );
end;
②用repadmin身份登录orcl数据库运行以下命令
begin
dbms_defer_sysschedule_push (
destination =>
interval => sysdate + /(*) 每隔分钟
next_date => sysdate);
end;
/
begin
dbms_defer_sysschedule_purge (
next_date => sysdate
interval => sysdate + /(*) 每隔分钟
delay_seconds =>
rollback_segment => );
end;
添加或修改两边数据库的记录跟