科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Oracle 数据库复制方法逐步精细(4)

Oracle 数据库复制方法逐步精细(4)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

日益增长的分布式应用需求要求实现更好分布式的软件环境,不断推动着分布式技术的进步。Oracle数据复制是实现分布式数据环境的一种技术,通过在不同的物理站点拷贝数据来建立分布式数据环境。

作者:changelive 来源:赛迪网技术社区 2007年9月5日

关键字: 复制 数据库 ORACLE

  • 评论
  • 分享微博
  • 分享邮件

5.建立复制管理员mvadmin的数据库连接:

create database link ORACLSH connect to proxy_bjoracle 
identified by proxy_bjoralce 
Connect to ... Identified by ...子句指明用什么用户连接远程数据库

6.建立复制调度数据库连接作业:

begin 
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; 
/

7.授予SHORACL用户(对应SHORACL方案)相应的权限建立实体化视图:

disconnect; 
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;

8.建立复制方案的数据库连接:

disconnect; 
connect SHORACL/SHORACL@BJ; 
create database link ORACLSH connect to ORACL identified 
by ORACL;

复制方案的数据库连接和复制管理员的数据库连接要和system用户间里的对应公共数据库连接使用相同的名字,在调度连接时将使用公共数据库连接中指定的数据库全局名或者连接字符串。

9.建立实体化视图:

disconnect; 
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;

@后面是数据库连接名。如果该表没有主键则使用rowid来刷新。

create materialized view SHORACL. CREDIT_CARD refresh 
fast with rowid as select * from ORACL. CREDIT_CARD@ORACLSH;

10.为多个视图建立刷新组:

begin 
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;

11.向刷新组中添加复制对象:

begin 
dbms_refresh.add (name => ’mvadmin.sh_refresh’,
list => ’SHORACL.CREDIT_CARD ’,lax => true); 
end; 
/

三.检查复制进程:

1.查看sys.dba_jobs视图是否生成了足够的作业。

经过以上的步骤应该有三个作业分别是清除作业、调度作业和刷新作业,查看视图的what字段是否有下面的内容:

a) declare rc binary_integer; begin rc := sys.dbms_defer_sys. 
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"’);

如果排除其它系统作业本例中杭州和武汉的数据库复制建立之后将会有7个作业(如果为每个复制分别建立刷新组的话),清除作业始终只有一个。每个复制对应一个调度作业,每个刷新组对应一个刷新作业。

2.查看job_queue_processes参数,确保该参数不为零(数据库的默认值是零),如果该参数为零,除非每次手工执行刷新,否则系统不会自动刷新复制数据。

3.确保复制执行之后,观察sys.dba_jobs视图的failures字段。如果复制在刷新过程中除错,Oracle会自动在1分钟之后再次尝试刷新,失败之后再在2分钟、4分钟、8分钟..之后尝试刷新,直到失败次数达到16次或者间隔时间超过作业设置的间隔时间,该作业将被标记为中断,Oracle不再执行该作业。要重新执行改作业使用dbms_job包的run过程:

begin 
dbms_job.run(job_no); 
end; 
/

job_no 是sys.dba_jobs 的Job字段的值,作业号。在重新执行因出错而中断的作业前,需要手工找到出错点,并更正。

总结

本文只是使用了Oracle高级复制中最简单的功能,Oracle的高级复制还提供可更新视图和复杂的只读实体化视图复制,当然并不是我们都要去用高级复杂强大的功能,在具体应用的时候,还要根据系统功能和性能需求,选择适当的复制技术。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章