电脑软硬件应用网
当前位置: 电脑软硬件应用网 > 设计学院 > 网络编程 > 数据库 > 正文
数据库基础:Oracle 复制方法逐步精细
数据库基础:Oracle 复制方法逐步精细
2009-6-30 20:20:59  文/changeli…   出处:赛迪网   

7. 如果添加的表没有主键需要设置可以代替主键的列或者列的集合:


begin

dbms_repcat.set_columns(

sname => ’SHORACL’,

oname => ’ CREDIT_CARD ’,

column_list => ’ CREDIT_CARD_ID’);

end;

/


8. 在主体组中的数据对象可以被复制之前,必须为他们生成复制支持。该方法为复制创建必要的触发器、包或者存储过程:


begin

dbms_repcat.generate_replication_support(

sname=>’SHORACL’,

oname=>’ CREDIT_CARD’,

type=>’TABLE’,

min_communication=>TRUE);

end;

/

9. 为快速刷新创建实体化视图日志:


create materialized view log on SHORACL. CREDIT_CARD;


如果是没有主键的表示用一下语句:


create materialized view log on SHORACL. CREDIT_CARD with

rowid excluding new values;


10.启动复制:

begin

dbms_repcat.resume_master_activity(

name=>’sh_rep’);

end;

/

二.设置实体化视图站点:


1.创建复制管理员并授予相应的权限:


disconnect;

connect system/passwd@BJ;

create user mvadmin identified by

mvadmin;

begin

dbms_repcat_admin.

grant_admin_any_schema(username=> ’mvadmin’);

end;

/

grant comment any table to mvadmin;

grant lock any table to mvadmin;

grant select any dictionary to mvadmin;

2.注册传播方:


begin

dbms_defer_sys.register_propagator(

username => ’mvadmin’);

end;

/

3.公共数据库连接。需要每个复制需要创建三个数据库连接。公共数据库连接指定数据库的全局名称:

 

create public database link ORACLSH using ’Oracle.shanghai.

com’;

Using子句后跟的是全局数据库名或者是连接字符串。

 

create public database link ORACLSH using ’(description=

(address=(protocol=tcp)(host=127.0.0.1)(port=1521))

(connect_data=(service_name=oracl)))’

4.建立清除延迟事务队列调度作业:


disconnect;

connect mvadmin/mvadmin@BJ;

begin

dbms_defer_sys.schedule_purge(

next_date => sysdate,

interval => ’/*1:hr*/ sysdate + 1’,

delay_seconds => 0,

rollback_segment => ’’);

end;


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的高级复制还提供可更新视图和复杂的只读实体化视图复制,当然并不是我们都要去用高级复杂强大的功能,在具体应用的时候,还要根据系统功能和性能需求,选择适当的复制技术。

上一页  [1] [2] 

  • 上一篇文章:

  • 下一篇文章:
  • 最新热点 最新推荐 相关文章
    MySQL转换Oracle的七大注意事项
    如何把文本数据导入Oracle中
    oracle中如何取消密码管理停止密码验…
    Mysql数据库名和表名在不同系统下的…
    mysql全文搜索:sql的写法
    了解Oracle启动模式的三个阶段
    Oracle同义词的定义给数据库管理的好…
    解答SQL不许在视图定义ORDER BY子句…
    ORACLE普遍错误代码地说明与处理
    数据库海量数据查询与优化
    关于45IT | About 45IT | 联系方式 | 版权声明 | 网站导航 |

    Copyright © 2003-2011 45IT. All Rights Reserved 浙ICP备09049068号