环境:
主站点 os: windown7 db:Release 10.2.0.1.0 – Production
复制站点os:Linux oel5 2.6.32-200.13.1.el5 db:Release 10.2.0.1.0 – Production
配置主站点:
1,建立复制管理用户并授权
CREATE USER repadmin IDENTIFIED BY repadmin;
BEGIN DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => 'repadmin'); END;/
GRANT COMMENT ANY TABLE TO repadmin; GRANT LOCK ANY TABLE TO repadmin; GRANT SELECT ANY DICTIONARY TO repadmin;2,注册传播用户并授权,这里使用管理用户repadmin,也可以分别建立用户
BEGIN DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username => 'repadmin'); END; /3,注册接收用户,这里使用了管理用户repadmin
BEGIN DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP ( username => 'repadmin', privilege_type => 'receiver', list_of_gnames => NULL); END; /4,建立物化视图站点复制管理员的代理用户,出于简单考虑,这里也使用repadmin 用户
BEGIN DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP ( username => 'repadmin', privilege_type => 'proxy_snapadmin', list_of_gnames => NULL); END; /配置复制站点:
1,建立物化视图管理员,并授权
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,建立传播者,并授权,这里使用mvadmin 用户
BEGIN
DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username => 'mvadmin'); END; /3,注册接受者
BEGIN DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP ( username => 'mvadmin', privilege_type => 'receiver', list_of_gnames => NULL); END; /4,建立PUBLIC 数据库链
在复制端的tnsnames.ora中添加如下内容,用来建立到主站点的连接:
WIN7 =
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.35)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = newdb) ) )alter database rename global_name to oel.mdu;
CREATE PUBLIC DATABASE LINK newdb.mdu USING ‘win7';
5,建立到主站点上代理物化视图管理员的数据库链
以物化视图管理员身份连接到物化视图站点 CONNECT mvadmin/mvadminCREATE DATABASE LINK newdb.mdu CONNECT TO repadmin IDENTIFIED BY repadmin;
建立主体组
配置复制用户(在主站点和物化视图站点都要做):
conn /as sysdba
CREATE USER tester IDENTIFIED BY tester;
ALTER USER tester DEFAULT TABLESPACE users QUOTA UNLIMITED ON users; ALTER USER tester TEMPORARY TABLESPACE temp; GRANT CREATE SESSION, CREATE TABLE, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TRIGGER, CREATE VIEW, CREATE SYNONYM, ALTER SESSION, CREATE MATERIALIZED VIEW, ALTER ANY MATERIALIZED VIEW, CREATE DATABASE LINK TO tester;在主站点登陆复制用户并建测试表:
CONNECT tester/tester
create table t1(id int primary key,name varchar(10));
insert into t1 values(1,'one');
commit;
建立物化视图日志表,FAST 刷新方式必须要求建立物化视图日志,COMPLETE 则不需要
connect tester/tester
CREATE MATERIALIZED VIEW LOG ON tester.t1;以复制管理员身份登陆主站点
CONNECT repadmin/repadmin
建立名为rep_test 的复制组
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPGROUP ( gname => 'rep_test'); END; /将复制对象增加到复制组中,主键所用的索引自动复制,其他索引需要明确添加到复制组中
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => 'rep_test', type => 'TABLE', oname => 't1', sname => 'tester', use_existing_object => TRUE, copy_rows => FALSE); END; /生成复制支持
BEGIN DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT ( sname => 'tester', oname => 't1', type => 'TABLE', min_communication => TRUE); END; /开始复制
BEGIN
DBMS_REPCAT.RESUME_MASTER_ACTIVITY ( gname => 'rep_test'); END; /commit;
在物化视图站点建立复制用户到主站点代理刷新者的数据库链
connect tester/tester
CREATE DATABASE LINK newdb.mdu CONNECT TO repadmin IDENTIFIED BY repadmin;
以物化视图管理员身份登陆物化视图站点
CONNECT mvadmin/mvadmin
创建物化视图(对于只读物化视图,省略FOR UPDATE 语句)
CREATE MATERIALIZED VIEW tester.t1mv REFRESH FAST WITH PRIMARY KEY AS SELECT * FROM tester.t1@newdb.mdu;建立物化视图组(物化视图组必须和复制站点上的复制组名称相同)
BEGIN DBMS_REPCAT.CREATE_MVIEW_REPGROUP ( gname => 'rep_test', master => 'newdb.mdu', propagation_mode => 'ASYNCHRONOUS'); END; /将物化视图添加到物化视图组
BEGIN
DBMS_REPCAT.CREATE_MVIEW_REPOBJECT ( gname => 'rep_test', sname => 'tester', oname => 't1mv', type => 'SNAPSHOT', min_communication => TRUE); END; /创建刷新组
BEGIN DBMS_REFRESH.MAKE ( name => 'mvadmin.rep_refresh', list => '', next_date => SYSDATE, interval => 'SYSDATE + 1/24', implicit_destroy => FALSE, rollback_seg => '', push_deferred_rpc => TRUE, refresh_after_errors => FALSE); END; /将物化视图添加到刷新组
BEGIN DBMS_REFRESH.ADD ( name => 'mvadmin.rep_refresh', list => 'tester.t1mv', lax => TRUE); END; /commit;