免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2069 | 回复: 1
打印 上一主题 下一主题

物化视图复制站点的配置步骤--请各位大虾帮忙改正 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-26 09:12 |只看该作者 |倒序浏览
我按照该步骤配置完毕后,却无法实现每分钟一次的dept表同步。
详细内容如下:

主站点:TEST.US.ORACLE.COM  ---10.11.0.73  LINUX/ORACLE9204
物化视图站点:ORACLE.US.ORACLE.COM  10.11.6.9  WINDOWS2003/ORACLE9201
主机名:testlinux.test
复制用户:scott  ---以系统已存在的用户为例

1. 检查初始化参数
复制对数据库的初始化参数限制不多,主要注意两点。
global_names 为TRUE 以及job_queue_process 大等0。
分别在主站点和物化视图站点执行下面两条sqlplus命令,检查数据库初始化参数是否符合要求。
show parameter global_names
show parameter job

如果初始化参数设置的不满足要求,可以通过下列语句动态修改。
alter system set global_names = true;
alter system set job_queue_processes = 20;
commit;

2. 检查全局数据库名称
两个数据库的db_domain 名称应该相同,只有db_name 不同。
通过下列语句检查主站点和物化视图站点的全局数据库名
select * from global_name;
如果全局数据库名设置不符合规范,可以通过如下语句动态修改。
alter database rename global_name to TEST.US.ORACLE.COM;
alter database rename global_name to ORACLE.US.ORACLE.COM;

3. 修改tnsnames.ora 文件,主站点和物化视图站点的参数文件中都添加下列内容

test73 =
  ( DESCRIPTION =
    ( ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = 10.11.0.73)(PORT = 1521))
     )
    ( CONNECT_DATA =
        (SERVER = DEDICATED)
        (SERVICE_NAME = test)
    )
  )

copy69 =
  ( DESCRIPTION =
    ( ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = 10.11.6.9)(PORT = 1521))
     )
    ( CONNECT_DATA =
        (SERVER = DEDICATED)
        (SERVICE_NAME = oracle)
    )
  )

4. 建立主体站点
--以system 用户连接到主站点
CONN system@test73    也可以直接在主站点机器上操作

--建立复制管理用户repadmin 并授权
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;
--注册传播用户并授权,这里使用了管理用户repadmin,也可以分别建立用户
BEGIN
DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username =>; 'repadmin');
END;
/
--注册接收用户,这里使用了管理用户repadmin
BEGIN
DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
username =>; 'repadmin',
privilege_type =>; 'receiver',
list_of_gnames =>; NULL);
END;
/
--建立物化视图站点复制管理员的代理用户,出于简单考虑,这里也使用repadmin 用户
BEGIN
DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
username =>; 'repadmin',
privilege_type =>; 'proxy_snapadmin',
list_of_gnames =>; NULL);
END;
/
--设置代理刷新用户,并授权,这里仍然使用repadmin 用户
--对于repadmin 而言,不需要create session 权限
--但是这里如果新建用户的话,create session 权限则是必须的
GRANT CREATE SESSION TO repadmin;
GRANT SELECT ANY TABLE TO repadmin;

--设置清除延迟序列的job
--以复制管理员身份登陆到主站点
CONNECT repadmin/repadmin@test73
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PURGE (
next_date =>; SYSDATE,
interval =>; 'SYSDATE + 1/(24*60)',
delay_seconds =>; 0);
END;
/
commit;

--多主站点的设置还需要多个站点间建立数据库链并建立调度机制
--但是对于物化视图复制的主体站点,则这些设置是不需要的

5. 设置物化视图站点
--以system 用户连接到物化视图站点
conn system/manager@copy69
--建立物化视图管理员,并授权
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;

--建立传播者,并授权,这里使用mvadmin 用户,也可以建立单独的用户
BEGIN
DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username =>; 'mvadmin');
END;
/
--建立刷新者,并授权,这里使用mvadmin 用户刷新物化视图
--对于mvadmin 而言,不需要create session 权限
--但是这里如果新建用户的话,create session 权限则是必须的
GRANT CREATE SESSION TO mvadmin;
GRANT ALTER ANY MATERIALIZED VIEW TO mvadmin;

--注册接受者
BEGIN
DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
username =>; 'mvadmin',
privilege_type =>; 'receiver',
list_of_gnames =>; NULL);
END;
/

--建立PUBLIC 数据库链
----dblink名称最好和远程服务器的数据库全局名test.us.oracle.com相同)
CREATE PUBLIC DATABASE LINK test.us.oracle.com using 'test73';
--以物化视图管理员身份连接到物化视图站点
CONNECT mvadmin/mvadmin@copy69
CREATE DATABASE LINK TEST.US.ORACLE.COM CONNECT TO repadmin IDENTIFIED BY
Repadmin using 'test73';
--以上建立到主站点上复制管理员的数据库链
--以传播者身份登陆物化视图站点   //传播者和物化视图管理员同为mvadmin
--在本例中,这个数据库链与上面的数据库链相同,故省略。

--设置清除延迟序列的job
--如果物化视图站点只包括只读物化视图,这一步可以省略
--每分钟更新一次
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PURGE (
next_date =>; SYSDATE,
interval =>; 'SYSDATE + 1/(24*60)',     
delay_seconds =>; 0,
rollback_segment =>; '');
END;
/
commit;
6. 建立主体组
--以复制管理员身份登陆复制站点
CONNECT repadmin/repadmin@test73
--建立名为rep_test 的复制组
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPGROUP (
gname =>; 'rep_test');
END;
/   

--将复制对象增加到复制组中
--主键所用的索引自动复制,其他索引需要明确添加到复制组中
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPOBJECT (
gname =>; 'rep_test',
type =>; 'TABLE',
oname =>; 'dept',
sname =>; 'scott',
use_existing_object =>; TRUE,
copy_rows =>; FALSE);
END;
/

也可更改上面的oname =>; 'dept', sname =>; 'scott',从而达到增加要复制的表的目的。

---注意下面中dept为表dept
---该表的索引名称 ind_dept_name 实际对应的dept的索引名,为pk_dept,可以查的。
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPOBJECT (
gname =>; 'rep_test',
type =>; 'INDEX',
oname =>; 'pk_dept',   
sname =>; 'scott',
use_existing_object =>; TRUE,
copy_rows =>; FALSE);
END;
/
--生成复制支持
BEGIN
DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT (
sname =>; 'scott',
oname =>; 'dept',
type =>; 'TABLE',
min_communication =>; TRUE);
END;
/
--如改oname的值为emp,则将emp也列入可复制名单

--开始复制
BEGIN
DBMS_REPCAT.RESUME_MASTER_ACTIVITY (
gname =>; 'rep_test');
END;
/
commit;


7. 建立物化视图
--以复制用户连接到主站点
conn scott/tiger@test73

--建立物化视图日志表,FAST 刷新方式必须要求建立物化视图日志,COMPLETE 则不需要
CREATE MATERIALIZED VIEW LOG ON scott.dept;    --对表dept有无安全方面的影响?
--如果被复制用户(及要复制的表)不存在则建立,并授予相应权限
--本例中,用户已存在,此步骤省略


CONNECT system@copy69
--实际存在的用户,也可以删除重建
CREATE USER scott IDENTIFIED BY tiger;
ALTER USER scottt DEFAULT TABLESPACE users QUOTA UNLIMITED ON users;
ALTER USER scott TEMPORARY TABLESPACE temp;

--另建新的用户,
CREATE USER scotttest IDENTIFIED BY scotttest;
ALTER USER scotttest DEFAULT TABLESPACE users QUOTA UNLIMITED ON users;
ALTER USER scotttest 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 scott;  或者增加一个用户 to scotttest,前面代码一样
*/

--建立复制用户到主站点代理刷新者的数据库链
CONNECT scott/tiger@copy69
CREATE DATABASE LINK TEST.US.ORACLE.COM CONNECT TO repadmin IDENTIFIED BY repadmin
using 'test73';


--建立物化视图组
--以物化视图管理员身份登陆物化视图站点
CONNECT mvadmin/mvadmin@copy69


--物化视图组必须和复制站点上的复制组名称相同
BEGIN
DBMS_REPCAT.CREATE_MVIEW_REPGROUP (
gname =>; 'rep_test',
master =>; 'TEST.US.ORACLE.COM',
propagation_mode =>; 'ASYNCHRONOUS');
END;
/

出错处理:

删除 rep_test
1) 删除mview_repgroup
SQL>; begin dbms_repcat.DROP_MVIEW_REPGROUP('rep_test');
end;
/
2)删除master_repgroup   --没有则不删除
BEGIN
DBMS_REPCAT.drop_MASTER_REPGROUP (
gname =>; 'rep_test');
END;
/   

--创建刷新组
--对于只包含只读物化视图的站点,不需要此步骤
BEGIN
DBMS_REFRESH.MAKE (
name =>; 'mvadmin.rep_refresh',
list =>; '',
next_date =>; SYSDATE,
interval =>; 'SYSDATE + 1/(24*60)',
implicit_destroy =>; FALSE,
rollback_seg =>; '',
push_deferred_rpc =>; TRUE,
refresh_after_errors =>; FALSE);
END;
/

更改刷新时间间隔
begin
dbms_refresh.change(name =>; 'mvadmin.rep_refresh',interval=>;'SYSDATE + 1/(24*60)');
end;
/

--创建物化视图  如要删除该视图 语句如下:drop materialized view scott.dept
--对于只读物化视图,省略FOR UPDATE 语句
--注意DBLINK应为TEST.US.ORACLE.COM
CREATE MATERIALIZED VIEW scott.dept
REFRESH FAST WITH PRIMARY KEY FOR UPDATE
AS SELECT * FROM scott.dept@TEST.US.ORACLE.COM;
――TEST.US.ORACLE.COM为创建的dblink

--将物化视图添加到物化视图组
--对于只读物化视图,此步骤可以省略
BEGIN
DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
gname =>; 'rep_test',
sname =>; 'scott',
oname =>; 'dept',
type =>; 'SNAPSHOT',
min_communication =>; TRUE);
END;
/

BEGIN
DBMS_REPCAT.CREATE_MVIEW_REPOBJECT (
gname =>; 'rep_test',
sname =>; 'scott',
oname =>; 'pk_dept',
type =>; 'INDEX',
min_communication =>; TRUE);
END;
/
上述步骤可以不做


--将物化视图添加到刷新组
BEGIN
DBMS_REFRESH.ADD (
name =>; 'mvadmin.rep_refresh',
list =>; 'scott.dept',
lax =>; TRUE);
END;
/
commit;

做完后,我更新主站点上的dept表,而物化视图站点的dept内容却没改变。
不知道哪个地方错了,还请大侠们指点一二,不胜感激。

论坛徽章:
0
2 [报告]
发表于 2005-08-26 09:49 |只看该作者

物化视图复制站点的配置步骤--请各位大虾帮忙改正

顶一下,别沉了,很着急。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP