1、Oracle 高级复制物化视图复制站点的配置步骤主站点:test.ncl(dbtest)物化视图站点:peixun.ncl(db58)复制用户:lis复制表:test_a准备工作:在站点创建将要被复制的表test_aSQL create table test_a as select * from user_tables;表已创建。创建主键SQL alter table test_a add (constraint pk_name primary key (table_name);表已更改。SQL commit;提交完成。复制开始1. 检查初始化参数:参数global_names 为true;j
2、ob_queue_process 大于0.2. 检查全局数据库名称两个数据库的 db_domain 名称应该相同,只有db_name 不同。可以通过下面语句检查Select * form global_name;如果全局数据库名设置不符合规范,可以通过如下语句动态修改。alter database rename global_name to test.nclalter database rename global_name to peixun.ncl;3. 检查tnsname4. 建立主体站点-以system 用户连接到主站点CONN systemtest -建立复制管理用户repadmin
3、并授权SQL conn system/systemtest已连接。-建立复制管理用户repadmin 并授权SQL CREATE USER repadmin IDENTIFIED BY repadmin;用户已创建SQL BEGIN 2 DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username = repadmin); 3 END; 4 /PL/SQL 过程已成功完成。SQL commit;提交完成。SQL GRANT COMMENT ANY TABLE TO repadmin;授权成功。SQL GRANT LOCK ANY TABLE TO rep
4、admin;授权成功。SQL GRANT SELECT ANY DICTIONARY TO repadmin;授权成功。-注册传播用户并授权,这里使用了管理用户repadmin,也可以分别建立用户SQL BEGIN 2 DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username = repadmin); 3 END; 4 /PL/SQL 过程已成功完成。-注册接收用户,这里使用了管理用户repadminSQL BEGIN 2 DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP ( 3 username = repadmin, 4 pr
5、ivilege_type = receiver, 5 list_of_gnames = NULL); 6 END; 7 /PL/SQL 过程已成功完成。-建立物化视图站点复制管理员的代理用户,出于简单考虑,这里也使用repadmin 用户SQL BEGIN 2 DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP ( 3 username = repadmin, 4 privilege_type = proxy_snapadmin, 5 list_of_gnames = NULL); 6 END; 7 /PL/SQL 过程已成功完成。SQL commit;提交完成。
6、-设置代理刷新用户,并授权,这里仍然使用repadmin 用户-对于repadmin 而言,不需要create session 权限-但是这里如果新建用户的话,create session 权限则是必须的SQL GRANT CREATE SESSION TO repadmin;授权成功。SQL GRANT SELECT ANY TABLE TO repadmin;授权成功。-设置清除延迟序列的job-以复制管理员身份登陆到主站点SQL conn repadmin/repadmin已连接。SQL BEGIN 2 DBMS_DEFER_SYS.SCHEDULE_PURGE ( 3 next_dat
7、e = SYSDATE, 4 interval = SYSDATE + 1/8640,-每10秒更新一次 5 delay_seconds = 0); 6 END; 7 /PL/SQL 过程已成功完成。SQL commit;提交完成。5 设置物化视图站点-以system 用户连接到物化视图站点SQL conn system/systemdb58已连接。SQL CREATE USER mvadmin IDENTIFIED BY mvadmin;用户已创建SQL BEGIN 2 DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA ( 3 username = mvadm
8、in); 4 END; 5 /PL/SQL 过程已成功完成。SQL commit;提交完成。SQL GRANT COMMENT ANY TABLE TO mvadmin;授权成功。SQL GRANT LOCK ANY TABLE TO mvadmin;授权成功。SQL GRANT SELECT ANY DICTIONARY TO mvadmin;授权成功。SQL -建立传播者,并授权,这里使用mvadmin 用户,也可以建立单独的用户SQL BEGIN 2 DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username = mvadmin); 3 END; 4 /PL
9、/SQL 过程已成功完成。SQL commit;提交完成。SQL -建立刷新者,并授权,这里使用mvadmin 用户刷新物化视图SQL -对于mvadmin 而言,不需要create session 权限SQL -但是这里如果新建用户的话,create session 权限则是必须的SQL GRANT CREATE SESSION TO mvadmin;授权成功。SQL GRANT ALTER ANY MATERIALIZED VIEW TO mvadmin;授权成功。SQL -注册接受者SQL BEGIN 2 DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP
10、( 3 username = mvadmin, 4 privilege_type = receiver, 5 list_of_gnames = NULL); 6 END; 7 /PL/SQL 过程已成功完成。SQL commit;提交完成。SQL -建立PUBLIC 数据库链SQL CREATE PUBLIC DATABASE LINK test.ncl USING dbtest;数据库链接已创建。SQL -建立到主站点上代理物化视图管理员的数据库链SQL -以物化视图管理员身份连接到物化视图站点SQL CONNECT mvadmin/mvadmindb58已连接。SQL CREATE DAT
11、ABASE LINK test.ncl CONNECT TO repadmin IDENTIFIED BY 2 repadmin;数据库链接已创建。SQL -设置清除延迟序列的jobSQL -如果物化视图站点只包括只读物化视图,这一步可以省略SQL BEGIN 2 DBMS_DEFER_SYS.SCHEDULE_PURGE ( 3 next_date = SYSDATE, 4 interval = SYSDATE + 1/8640, 5 delay_seconds = 0, 6 rollback_segment = ); 7 END; 8 /PL/SQL 过程已成功完成。SQL -设置将修改推
12、入到主站点的jobSQL -如果物化视图站点只包括只读物化视图,这一步可以省略SQL BEGIN 2 DBMS_DEFER_SYS.SCHEDULE_PUSH ( 3 destination = test.ncl, 4 interval = SYSDATE + 1/8640, 5 next_date = SYSDATE, 6 stop_on_error = FALSE, 7 delay_seconds = 0, 8 parallelism = 0); 9 END; 10 /PL/SQL 过程已成功完成。SQL commit;提交完成。6 建立主体组SQL -建立名为rep_test 的复制组S
13、QL BEGIN 2 DBMS_REPCAT.CREATE_MASTER_REPGROUP ( 3 gname = rep_test); 4 END; 5 /PL/SQL 过程已成功完成。SQL commit;提交完成。SQL -将复制对象增加到复制组中SQL -主键所用的索引自动复制,其他索引需要明确添加到复制组中SQL BEGIN 2 DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( 3 gname = rep_test, 4 type = TABLE, 5 oname = test_a, 6 sname = lis, 7 use_existing_object
14、= TRUE, 8 copy_rows = FALSE); 9 END; 10 /PL/SQL 过程已成功完成。SQL BEGIN 2 DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( 3 gname = rep_test, 4 type = INDEX, 5 oname = pk_name, 6 sname = lis, 7 use_existing_object = TRUE, 8 copy_rows = FALSE); 9 END; 10 /PL/SQL 过程已成功完成。SQL commit;提交完成。SQL -生成复制支持SQL BEGIN 2 DBMS_RE
15、PCAT.GENERATE_REPLICATION_SUPPORT ( 3 sname = lis, 4 oname = test_a, 5 type = TABLE, 6 min_communication = TRUE); 7 END; 8 /PL/SQL 过程已成功完成。SQL commit;提交完成。SQL -开始复制SQL BEGIN 2 DBMS_REPCAT.RESUME_MASTER_ACTIVITY ( 3 gname = rep_test); 4 END; 5 /PL/SQL 过程已成功完成。SQL commit;提交完成。7 建立物化视图SQL -以复制用户连接到主站点S
16、QL CONNECT lis/lis已连接。SQL -建立物化视图日志表,FAST 刷新方式必须要求建立物化视图日志,COMPLETE 则不需要SQL CREATE MATERIALIZED VIEW LOG ON lis.test_a;实体化视图日志已创建。赋予lis用户权限SQL conn system/system已连接。SQL GRANT 2 CREATE SESSION, 3 CREATE TABLE, 4 CREATE PROCEDURE, 5 CREATE SEQUENCE, 6 CREATE TRIGGER, 7 CREATE VIEW, 8 CREATE SYNONYM, 9
17、 ALTER SESSION, 10 CREATE MATERIALIZED VIEW, 11 ALTER ANY MATERIALIZED VIEW, 12 CREATE DATABASE LINK 13 TO lis;授权成功。SQL -建立复制用户到主站点代理刷新者的数据库链SQL CONNECT lis/lisdb58已连接。SQL CREATE DATABASE LINK test.ncl CONNECT TO repadmin IDENTIFIED BY 2 repadmin;数据库链接已创建。SQL -物化视图组必须和复制站点上的复制组名称相同SQL BEGIN 2 DBMS_R
18、EPCAT.CREATE_MVIEW_REPGROUP ( 3 gname = rep_test, 4 master = test.ncl, 5 propagation_mode = ASYNCHRONOUS); 6 END; 7 /PL/SQL 过程已成功完成。SQL commit;提交完成。SQL -创建刷新组SQL -对于只包含只读物化视图的站点,不需要此步骤SQL BEGIN 2 DBMS_REFRESH.MAKE ( 3 name = mvadmin.rep_refresh, 4 list = , 5 next_date = SYSDATE, 6 interval = SYSDATE
19、 + 1/8640, 7 implicit_destroy = FALSE, 8 rollback_seg = , 9 push_deferred_rpc = TRUE, 10 refresh_after_errors = FALSE); 11 END; 12 /PL/SQL 过程已成功完成。SQL commit;提交完成。SQL -创建物化视图SQL -对于只读物化视图,省略FOR UPDATE 语句SQL CREATE MATERIALIZED VIEW lis.test_a 2 REFRESH FAST WITH PRIMARY KEY FOR UPDATE 3 AS SELECT *
20、FROM lis.test_atest.ncl;实体化视图已创建。SQL -将物化视图添加到物化视图组SQL -对于只读物化视图,此步骤可以省略SQL BEGIN 2 DBMS_REPCAT.CREATE_MVIEW_REPOBJECT ( 3 gname = rep_test, 4 sname = lis, 5 oname = test_a, 6 type = SNAPSHOT, 7 min_communication = TRUE); 8 END; 9 /PL/SQL 过程已成功完成。SQL BEGIN 2 DBMS_REPCAT.CREATE_MVIEW_REPOBJECT ( 3 gn
21、ame = rep_test, 4 sname = lis, 5 oname = pk_name, 6 type = INDEX, 7 min_communication = TRUE); 8 END; 9 /PL/SQL 过程已成功完成。SQL commit;提交完成。SQL -将物化视图添加到刷新组SQL BEGIN 2 DBMS_REFRESH.ADD ( 3 name = mvadmin.rep_refresh, 4 list = lis.test_a, 5 lax = TRUE); 6 END; 7 /PL/SQL 过程已成功完成。SQL commit;提交完成。测试:SQL con
22、n lis/lis已连接。SQL select count(*) from test_a; COUNT(*)- 1766SQL delete from test_a where rownum commit;提交完成。SQL select count(*) from test_a; COUNT(*)- 1747SQL conn lis/lisdb58已连接。SQL select count(*) from test_a; COUNT(*)- 1766过段时间SQL select count(*) from test_a; COUNT(*)- 1747在复制站点上测试SQL conn lis/lisdb58已连接。SQL delete from test_a where rownum commit;提交完成。SQL select count(*) from test_a; COUNT(*)- 1728SQL conn lis/lis已连接。SQL select count(*) from test_a; COUNT(*)- 1747过段时间SQL select count(*) from test_a; COUNT(*)- 1728基本成功
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1