45IT.COM- 电脑学习从此开始!
DIY硬件教程攒机经验装机配置
设计Photoshop网页设计特效
系统注册表DOS系统命令其它
存储主板显卡外设键鼠内存
维修显卡CPU内存打印机
WinXPVistaWin7unix/linux
CPU光驱电源/散热显示器其它
修技主板硬盘键鼠显示器光驱
办公ExcelWordPowerPointWPS
编程数据库CSS脚本PHP
网络局域网QQ服务器
软件网络系统图像安全
页面导航: 首页 > 设计学院 > 网络编程 > 数据库 >

数据库基础:Oracle 复制方法逐步精细(2)

电脑软硬件应用网 45IT.COM 时间:2009-06-30 20:20 作者:changelive

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

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
无法在这个位置找到: baidushare.htm
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
推荐知识