环境:

主站点 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/mvadmin

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