数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle的同步复制研究


发布日期:2024年06月12日
 
Oracle的同步复制研究

数据库支持高级复制功能

您可以用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;

添加或修改两边数据库的记录

上一篇:详解Oracle10g中MERGE功能的增强

下一篇:切换ORACLE数据库归档非归档模式