本章说明了如何创建一个物化视图组,在一个偏远的物化视图复制站点。
本章包含以下主题:
之前建立物化视图的环境中,你必须设置你的主站点,创建一个主组,并设置您想要的物化视图站点。另外,如果冲突是有可能在主站点由于活动在您所创建的物化视图站点,然后配置解决冲突的物化视图主表之前创建的物化视图组。
创建物化视图集团概述
设置完成后,您的物化视图站点,创建至少一个主组,您就可以在一个偏远的物化视图站点创建的物化视图组。图5-1说明了这个过程创建一个物化视图组。
创建物化视图组
本章将指导您通过创建两个物化视图组在两个不同的物化视图站点:mv1.world
和mv2.world
的过程:
-
物化视图组在
mv1.world
的基础上的hr_repg
在的orc1.world
主站点的主组中的对象。 -
的物化视图在
mv2.world
组的物化视图组在hr_repg
的mv1.world
物化视图站点中的对象的基础上。
因此,本章中的示例说明了如何创建一个多层物化视图的环境中,有一个或多个物化视图是基于其他物化视图。
完成以下步骤来创建这两个实体化视图组。
注:
如果您正在查看这个在线文档,然后你就可以复制的文本的开始“脚本”行后,这说明“结束脚本”行到一个文本编辑器中,然后编辑文字,创建一个脚本,为您的环境。/ *************************的脚本开始********************* *********
创建物化视图集团mv1.world,
完成以下步骤来创建物化视图的hr_repg
组的mv1.world
物化视图站点。这是基于实体化视图组在orc1.world
主站点上的hr_repg的
主组。
如果你想要一个你的主站点,以支持物化视图站点,那么你就需要一个物化视图复制到每一个主表创建物化视图日志。从图2-1,orc1.world
作为目标的mv1.world
物化视图站点的主站点的回忆。所需的物化视图日志必须建立在orc1.world的
。
* / SET ECHO ON SPOOL create_mv_group.out 将人力资源/小时@ orc1.world的 创建的MATERIALIZED VIEW LOG ON hr.countries; 创建的MATERIALIZED VIEW LOG ON HR.DEPARTMENTS; CREATE MATERIALIZED VIEW LOG ON HR.EMPLOYEES; 创建的MATERIALIZED VIEW LOG ON hr.jobs; CREATE MATERIALIZED VIEW LOG ON hr.job_history]; 创建的MATERIALIZED VIEW LOG ON hr.locations; 创建的MATERIALIZED VIEW LOG ON HR.REGIONS; / *
在建立物化视图组,您必须确保复制的模式存在物化视图站点在远程和必要的数据库链接已创建。
在这个例子中,如果HR
模式不存在,则创建架构。如果人力资源
的架构已经存在的物化视图站点,然后给予必要的权限,并在此步骤中的下一个任务。
* / CONNECT SYSTEM / MANAGER @ mv1.world CREATE TABLESPACE demo_mv1 DATAFILE'demo_mv1.dbf'SIZE 10M AUTOEXTEND ON EXTENT MANAGEMENT LOCAL AUTOALLOCATE; CREATE TEMPORARY TABLESPACE temp_mv1 TEMPFILE'temp_mv1.dbf'SIZE 5M AUTOEXTEND ON; CREATE USER小时的IDENTIFIED BY小时; ALTER USER小时DEFAULT TABLESPACE demo_mv1 QUOTA UNLIMITED ON demo_mv1; 更改USER小时TEMPORARY TABLESPACE temp_mv1的; 授 CREATE SESSION, CREATE TABLE, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TRIGGER, CREATE VIEW, CREATE SYNONYM, ALTER SESSION, 创建物化视图, ALTER ANY MATERIALIZED VIEW, CREATE DATABASE LINK 人力资源; / *
在建立物化视图组,你必须确保必要的数据库链接存在复制的模式。雇主的物化视图需要一个数据库链接指向的proxy_refresher
时创建的主网站成立。
* / 将人力资源/小时@ mv1.world的 CREATE DATABASE LINK orc1.world“ CONNECT TO proxy_refresher IDENTIFIED BY proxy_refresher; / *
物化视图在远程物化视图站点管理员必须执行下列程序。
* / 连接mviewadmin / mviewadmin @ mv1.world / *
主组的gname
参数中指定的,你是复制目标主站点的名称相匹配的主组。
* / BEGIN DBMS_REPCAT.CREATE_MVIEW_REPGROUP( 的gname =>'hr_repg 主=>'orc1.world propagation_mode =>'异步'); END; / / *
同时被刷新物化视图被添加到一个特定的刷新组。这将确保相关的物化视图刷新组之间的事务一致性。
* / BEGIN DBMS_REFRESH.MAKE( =>'mviewadmin.hr_refg“ 列表=>'', 的next_date => SYSDATE, 间隔=>'SYSDATE + 1/24, implicit_destroy => FALSE, rollback_seg =>'', push_deferred_rpc = TRUE, refresh_after_errors => FALSE); END; / / *
主表的基础上创建的物化视图。
每当你创建的物化视图的物化视图的查询表的所有者,总是指定架构名称。在下面的实施例中,被指定为每个查询中的表的雇主小时
。
* / 创建物化视图hr.countries_mv1 REFRESH FAST PRIMARY KEY FOR UPDATE AS SELECT * FROM hr.countries @ orc1.world的; 创建物化视图hr.departments_mv1 REFRESH FAST PRIMARY KEY FOR UPDATE AS SELECT * FROM HR.DEPARTMENTS的orc1.world; 创建物化视图hr.employees_mv1 REFRESH FAST PRIMARY KEY FOR UPDATE AS SELECT *,从HR.EMPLOYEES @ orc1.world; 创建物化视图hr.jobs_mv1 REFRESH FAST PRIMARY KEY FOR UPDATE AS SELECT * FROM hr.jobs @ orc1.world; 创建物化视图hr.job_history_mv1 REFRESH FAST PRIMARY KEY FOR UPDATE AS SELECT * FROM hr.job_history @ orc1.world; 创建物化视图hr.locations_mv1 REFRESH FAST PRIMARY KEY FOR UPDATE AS SELECT * FROM hr.locations的orc1.world; 创建物化视图hr.regions_mv1 REFRESH FAST PRIMARY KEY FOR UPDATE AS SELECT * FROM HR.REGIONS的orc1.world; / *
* / BEGIN DBMS_REPCAT.CREATE_MVIEW_REPOBJECT( 的gname =>'hr_repg SNAME =>'小时', oname实现=>'countries_mv1 =>“快照”, min_communication => TRUE); END; / BEGIN DBMS_REPCAT.CREATE_MVIEW_REPOBJECT( 的gname =>'hr_repg SNAME =>'小时', oname实现=>'departments_mv1 =>“快照”, min_communication => TRUE); END; / BEGIN DBMS_REPCAT.CREATE_MVIEW_REPOBJECT( 的gname =>'hr_repg SNAME =>'小时', oname实现=>'employees_mv1 =>“快照”, min_communication => TRUE); END; / BEGIN DBMS_REPCAT.CREATE_MVIEW_REPOBJECT( 的gname =>'hr_repg SNAME =>'小时', oname实现=>'jobs_mv1 =>“快照”, min_communication => TRUE); END; / BEGIN DBMS_REPCAT.CREATE_MVIEW_REPOBJECT( 的gname =>'hr_repg SNAME =>'小时', oname实现=>'job_history_mv1 =>“快照”, min_communication => TRUE); END; / BEGIN DBMS_REPCAT.CREATE_MVIEW_REPOBJECT( 的gname =>'hr_repg SNAME =>'小时', oname实现=>'locations_mv1 =>“快照”, min_communication => TRUE); END; / BEGIN DBMS_REPCAT.CREATE_MVIEW_REPOBJECT( 的gname =>'hr_repg SNAME =>'小时', oname实现=>'regions_mv1 =>“快照”, min_communication => TRUE); END; / / *
所有的物化视图组对象,你可以添加到刷新组刷新的同时,相关的物化视图之间保持参照完整性。
* / BEGIN DBMS_REFRESH.ADD( =>'mviewadmin.hr_refg“ 列表>'hr.countries_mv1“ 宽松的=> TRUE); END; / BEGIN DBMS_REFRESH.ADD( =>'mviewadmin.hr_refg“ 列表>'hr.departments_mv1“ 宽松的=> TRUE); END; / BEGIN DBMS_REFRESH.ADD( =>'mviewadmin.hr_refg“ 列表>'hr.employees_mv1“ 宽松的=> TRUE); END; / BEGIN DBMS_REFRESH.ADD( =>'mviewadmin.hr_refg“ 列表>'hr.jobs_mv1“ 宽松的=> TRUE); END; / BEGIN DBMS_REFRESH.ADD( =>'mviewadmin.hr_refg“ 列表>'hr.job_history_mv1“ 宽松的=> TRUE); END; / BEGIN DBMS_REFRESH.ADD( =>'mviewadmin.hr_refg“ 列表>'hr.locations_mv1“ 宽松的=> TRUE); END; / BEGIN DBMS_REFRESH.ADD( =>'mviewadmin.hr_refg“ 列表>'hr.regions_mv1“ 宽松的=> TRUE); END; / / *
创建物化视图集团mv2.world,
完成以下步骤来创建物化视图的hr_repg
组的mv2.world
物化视图站点。这个物化视图是基于物化的hr_repg的
视图组的mv1.world
物化视图站点。
如果您希望您的主物化视图站点,以支持另一种物化视图站点,那么你需要创建物化视图日志被复制到另一种物化视图站点为每个物化视图。回想一下图2-1,mv1.world
作为目标主内化视图站点的mv2.world
物化视图站点。所需的物化视图日志必须建立在mv1.world的
。
* / 将人力资源/小时@ mv1.world的 创建物化VIEW LOG ON hr.countries_mv1; 创建物化VIEW LOG ON hr.departments_mv1; 创建物化VIEW LOG ON hr.employees_mv1; 创建物化VIEW LOG ON hr.jobs_mv1; 创建物化VIEW LOG ON hr.job_history_mv1; 创建物化VIEW LOG ON hr.locations_mv1; 创建物化VIEW LOG ON hr.regions_mv1; / *
在建立物化视图组,您必须确保复制的模式存在物化视图站点在远程和必要的数据库链接已创建。
在这个例子中,如果HR模式中不存在,则创建架构。如果HR模式中已经存在的物化视图站点,然后在此步骤中的下一个任务。
* / CONNECT SYSTEM / MANAGER @ mv2.world CREATE TABLESPACE demo_mv2 DATAFILE'demo_mv2.dbf'SIZE 10M AUTOEXTEND ON EXTENT MANAGEMENT LOCAL AUTOALLOCATE; CREATE TEMPORARY TABLESPACE temp_mv2的 TEMPFILE'temp_mv2.dbf'SIZE 5M AUTOEXTEND ON; CREATE USER小时的IDENTIFIED BY小时; ALTER USER小时DEFAULT TABLESPACE demo_mv2 QUOTA UNLIMITED ON demo_mv2; 更改USER小时TEMPORARY TABLESPACE temp_mv2的; 授 CREATE SESSION, CREATE TABLE, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TRIGGER, CREATE VIEW, CREATE SYNONYM, ALTER SESSION, 创建物化视图, ALTER ANY MATERIALIZED VIEW, CREATE DATABASE LINK 人力资源; / *
在建立物化视图组,你必须确保必要的数据库链接存在复制的模式。雇主的物化视图需要一个数据库链接指向的proxy_refresher
时创建的主物化视图站点建立了。
* / 将人力资源/小时@ mv2.world的 CREATE DATABASE LINK mv1.world“ CONNECT TO proxy_refresher IDENTIFIED BY proxy_refresher; / *
另请参见:
步骤 6的更多信息创建代理主物化视图站点用户物化视图在远程物化视图站点管理员必须执行下列程序。
* / 连接mviewadmin / mviewadmin @ mv2.world / *
的复制组中指定的gname
参数必须与您要复制的复制组的目标主物化视图站点的名称。
* / BEGIN DBMS_REPCAT.CREATE_MVIEW_REPGROUP( 的gname =>'hr_repg 主=>'mv1.world propagation_mode =>'异步'); END; / / *
同时被刷新物化视图被添加到一个特定的刷新组。这将确保相关的物化视图刷新组之间的事务一致性。
* / BEGIN DBMS_REFRESH.MAKE( =>'mviewadmin.hr_refg“ 列表=>'', 的next_date => SYSDATE, 间隔=>'SYSDATE + 1/24, implicit_destroy => FALSE, rollback_seg =>'', push_deferred_rpc = TRUE, refresh_after_errors => FALSE); END; / / *
创建的物化视图的基础上的主物化视图。
每当你创建的物化视图是基于另一个物化视图的物化视图的查询物化视图的所有者,总是指定架构名称。在下面的例子中,被指定为每个查询的物化视图的所有者小时
。
* / 创建物化视图hr.countries_mv2 REFRESH FAST PRIMARY KEY FOR UPDATE AS SELECT * FROM hr.countries_mv1 @ mv1.world的; 创建物化视图hr.departments_mv2 REFRESH FAST PRIMARY KEY FOR UPDATE AS SELECT * FROM hr.departments_mv1 @ mv1.world的; 创建物化视图hr.employees_mv2 REFRESH FAST PRIMARY KEY FOR UPDATE AS SELECT * FROM hr.employees_mv1 @ mv1.world的; 创建物化视图hr.jobs_mv2 REFRESH FAST PRIMARY KEY FOR UPDATE AS SELECT * FROM hr.jobs_mv1 @ mv1.world的; 创建物化视图hr.job_history_mv2 REFRESH FAST PRIMARY KEY FOR UPDATE AS SELECT * FROM hr.job_history_mv1 @ mv1.world的; 创建物化视图hr.locations_mv2 REFRESH FAST PRIMARY KEY FOR UPDATE AS SELECT * FROM hr.locations_mv1 @ mv1.world的; 创建物化视图hr.regions_mv2 REFRESH FAST PRIMARY KEY FOR UPDATE AS SELECT * FROM hr.regions_mv1 @ mv1.world的; / *
* / BEGIN DBMS_REPCAT.CREATE_MVIEW_REPOBJECT( 的gname =>'hr_repg SNAME =>'小时', ONAME =>'countries_mv2 =>“快照”, min_communication => TRUE); END; / BEGIN DBMS_REPCAT.CREATE_MVIEW_REPOBJECT( 的gname =>'hr_repg SNAME =>'小时', ONAME =>'departments_mv2 =>“快照”, min_communication => TRUE); END; / BEGIN DBMS_REPCAT.CREATE_MVIEW_REPOBJECT( 的gname =>'hr_repg SNAME =>'小时', ONAME =>'employees_mv2 =>“快照”, min_communication => TRUE); END; / BEGIN DBMS_REPCAT.CREATE_MVIEW_REPOBJECT( 的gname =>'hr_repg SNAME =>'小时', ONAME =>'jobs_mv2 =>“快照”, min_communication => TRUE); END; / BEGIN DBMS_REPCAT.CREATE_MVIEW_REPOBJECT( 的gname =>'hr_repg SNAME =>'小时', ONAME =>'job_history_mv2 =>“快照”, min_communication => TRUE); END; / BEGIN DBMS_REPCAT.CREATE_MVIEW_REPOBJECT( 的gname =>'hr_repg SNAME =>'小时', ONAME =>'locations_mv2 =>“快照”, min_communication => TRUE); END; / BEGIN DBMS_REPCAT.CREATE_MVIEW_REPOBJECT( 的gname =>'hr_repg SNAME =>'小时', ONAME =>'regions_mv2 =>“快照”, min_communication => TRUE); END; / / *
所有的物化视图组对象,你可以添加到刷新组刷新的同时,相关的物化视图之间保持参照完整性。
* / BEGIN DBMS_REFRESH.ADD( =>'mviewadmin.hr_refg“ 列表>'hr.countries_mv2“ 宽松的=> TRUE); END; / BEGIN DBMS_REFRESH.ADD( =>'mviewadmin.hr_refg“ 列表>'hr.departments_mv2“ 宽松的=> TRUE); END; / BEGIN DBMS_REFRESH.ADD( =>'mviewadmin.hr_refg“ 列表>'hr.employees_mv2“ 宽松的=> TRUE); END; / BEGIN DBMS_REFRESH.ADD( =>'mviewadmin.hr_refg“ 列表>'hr.jobs_mv2“ 宽松的=> TRUE); END; / BEGIN DBMS_REFRESH.ADD( =>'mviewadmin.hr_refg“ 列表>'hr.job_history_mv2“ 宽松的=> TRUE); END; / BEGIN DBMS_REFRESH.ADD( =>'mviewadmin.hr_refg“ 列表>'hr.locations_mv2“ 宽松的=> TRUE); END; / BEGIN DBMS_REFRESH.ADD( =>'mviewadmin.hr_refg“ 列表>'hr.regions_mv2“ 宽松的=> TRUE); END; / SET ECHO OFF SPOOL OFF / **********脚本结束********************* ************* /