物化视图创建案例

创建物化视图日志

Examples


为快速刷新创建物化视图日志

CREATE MATERIALIZED VIEW LOG ON customers
   PCTFREE 5
   TABLESPACE example
   STORAGE (INITIAL 10K);

customers 上的物化视图日志仅支持基于主键的快速刷新

如下语句创建包含 ROWID 属性的物化视图日志, 支持更多类型的物化视图快速刷新:

CREATE MATERIALIZED VIEW LOG ON customers WITH PRIMARY KEY, ROWID;

customers 上的物化视图日志支持 rowid 物化视图 和物化联结视图. 要支持物化聚合视同, 需要指定 SEQUENCE 和 INCLUDING NEW VALUES子句,参考后续案例。

指定定期清理物化视图日志

如下语句为 oe.orders 创建物化视图日志. 日志内容每5天清理一次,从创建时间开始。

CREATE MATERIALIZED VIEW LOG ON orders
  PCTFREE 5
  TABLESPACE example
  STORAGE (INITIAL 10K)
  PURGE REPEAT INTERVAL ‘5‘ DAY;

为物化视图日志指定过滤列

如下为sh.sales 创建物化视图日志并在这里被用到 "Creating Materialized Aggregate Views: Example". 它指定物化视图访问的所有列为过滤列。

CREATE MATERIALIZED VIEW LOG ON sales
   WITH ROWID, SEQUENCE(amount_sold, time_id, prod_id)
   INCLUDING NEW VALUES; 

为物化视图日志指定连接列

如下物化视图日志记录primary keys 和 product_id, 如下示例的连接列 "Creating a Fast Refreshable Materialized View: Example".

CREATE MATERIALIZED VIEW LOG ON order_items WITH (product_id);

在物化视图日志中包含新值

CREATE MATERIALIZED VIEW LOG ON product_information
   WITH ROWID, SEQUENCE (list_price, min_price, category_id), PRIMARY KEY
   INCLUDING NEW VALUES;

你可以创建如下的物化聚合视图来使用product_information 日志:

CREATE MATERIALIZED VIEW products_mv
   REFRESH FAST ON COMMIT
   AS SELECT SUM(list_price - min_price), category_id
         FROM product_information
         GROUP BY category_id;

因为物化视图日志同时记录了旧值和新值,所以其上的物化聚合视图支持快速刷新

为同步刷新创建暂存日志

如下创建暂存日志被命名为 mystage_log 可用于同步刷新

CREATE MATERIALIZED VIEW LOG ON sales
   PCTFREE 5
   TABLESPACE example
   STORAGE (INITIAL 10K)
   FOR SYNCHRONOUS REFRESH USING mystage_log;

来源: https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/CREATE-MATERIALIZED-VIEW-LOG.html#GUID-13902019-D044-4B79-9EB4-1F60652D037B

创建物化视图

Examples


创建简单物化视图

CREATE MATERIALIZED VIEW mv1 AS SELECT * FROM hr.employees;

默认情况下,Oracle数据库创建按需刷新的主键物化视图. 如果employees存在物化视图日志, 则可以将 mv1 修改为 fast refresh. 如果不存在该日志, 则只能执行full refresh. Oracle 为 mv1使用默认存储选项. 执行该操作需要的权限是 CREATEMATERIALIZED VIEW 系统权限,和select on hr.employees 权限.

grant CREATE MATERIALIZED VIEW to test;

grant select on hr.employees to test;

创建子查询物化视图

CREATE MATERIALIZED VIEW foreign_customers
   AS SELECT * FROM [email protected] cu
   WHERE EXISTS
     (SELECT * FROM [email protected] co
      WHERE co.country_id = cu.country_id);

创建物化聚合视图

以下创建物化聚合视图并指定刷新方法,模式和时间.使用如下物化视图日志 "Creating a Materialized View Log for Fast Refresh: Examples",

CREATE MATERIALIZED VIEW LOG ON times
   WITH ROWID, SEQUENCE (time_id, calendar_year)
   INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW LOG ON products
   WITH ROWID, SEQUENCE (prod_id)
   INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW sales_mv
   BUILD IMMEDIATE
   REFRESH FAST ON COMMIT
   AS SELECT t.calendar_year, p.prod_id,
      SUM(s.amount_sold) AS sum_sales
      FROM times t, products p, sales s
      WHERE t.time_id = s.time_id AND p.prod_id = s.prod_id
      GROUP BY t.calendar_year, p.prod_id;

创建物化连接视图

如下语句创建物化聚合视图 sales_by_month_by_state. 语句执行成功即会填充数据.默认情况下,后续刷新将通过重新执行实例化视图的定义查询来完成:

CREATE MATERIALIZED VIEW sales_by_month_by_state
     TABLESPACE example
     PARALLEL 4
     BUILD IMMEDIATE
     REFRESH COMPLETE
     ENABLE QUERY REWRITE
     AS SELECT t.calendar_month_desc, c.cust_state_province,
        SUM(s.amount_sold) AS sum_sales
        FROM times t, sales s, customers c
        WHERE s.time_id = t.time_id AND s.cust_id = c.cust_id
        GROUP BY t.calendar_month_desc, c.cust_state_province;

创建预构建的物化视图

如下语句为预创建的汇总表sales_sum_table创建物化聚合视图

CREATE TABLE sales_sum_table
   (month VARCHAR2(8), state VARCHAR2(40), sales NUMBER(10,2));

CREATE MATERIALIZED VIEW sales_sum_table
   ON PREBUILT TABLE WITH REDUCED PRECISION
   ENABLE QUERY REWRITE
   AS SELECT t.calendar_month_desc AS month,
             c.cust_state_province AS state,
             SUM(s.amount_sold) AS sales
      FROM times t, customers c, sales s
      WHERE s.time_id = t.time_id AND s.cust_id = c.cust_id
      GROUP BY t.calendar_month_desc, c.cust_state_province;

上述案例允许创建的物化视图可以和预创建表具有相同的表名,相同列数,相同列名。 WITH REDUCED PRECISION 允许创建的物化视图和子查询返回结果有不同精度。

创建主键物化视图

CREATE MATERIALIZED VIEW catalog
   REFRESH FAST START WITH SYSDATE NEXT SYSDATE + 1/4096
   WITH PRIMARY KEY
   AS SELECT * FROM product_information;  

创建 ROWID 物化视图

CREATE MATERIALIZED VIEW order_data REFRESH WITH ROWID
   AS SELECT * FROM orders; 

定期刷新物化视图

CREATE MATERIALIZED VIEW LOG ON employees
   WITH PRIMARY KEY
   INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW emp_data
   PCTFREE 5 PCTUSED 60
   TABLESPACE example
   STORAGE (INITIAL 50K)
   REFRESH FAST NEXT sysdate + 7
   AS SELECT * FROM employees;

上述语句不包含 START WITH 参数, 所以oracle 决定第一次执行日期通过使用SYSDATE评估 NEXT value  .因为创建了物化视图日志,所以oracle 每7天执行一次快速刷新, 从物化视图创建后的第七天开始。

物化视图的自动刷新时间

CREATE MATERIALIZED VIEW all_customers
   PCTFREE 5 PCTUSED 60
   TABLESPACE example
   STORAGE (INITIAL 50K)
   USING INDEX STORAGE (INITIAL 25K)
   REFRESH START WITH ROUND(SYSDATE + 1) + 11/24
   NEXT NEXT_DAY(TRUNC(SYSDATE), ‘MONDAY‘) + 15/24
   AS SELECT * FROM [email protected]
         UNION
      SELECT * FROM [email protected];

Oracle数据库将于明天上午11:00自动刷新此物化视图,随后每周一下午3:00自动刷新此物化视图。默认刷新方法为FORCE。定义查询包含一个UNION运算符,快速刷新不支持该运算符,因此数据库将自动执行完整的刷新。

前面的语句还为物化视图和数据库用于维护它的索引建立了存储特性。

创建快速可刷新的物化视图

以下创建了快速可刷新的物化视图,使用了UNION 操作,并且通过where 限制了返回行。order_items 和product_information(案例似乎没用到)的物化视图日志在前面的CREATE MATERIALIZED VIEW LOG部分已经创建,这里还需要对inventories创建物化视图日志

CREATE MATERIALIZED VIEW LOG ON inventories
   WITH (quantity_on_hand);

CREATE MATERIALIZED VIEW warranty_orders REFRESH FAST AS
  SELECT order_id, line_item_id, product_id FROM order_items o
    WHERE EXISTS
    (SELECT * FROM inventories i WHERE o.product_id = i.product_id
      AND i.quantity_on_hand IS NOT NULL)
  UNION
    SELECT order_id, line_item_id, product_id FROM order_items
    WHERE quantity > 5;

warranty_orders 视图需要物化视图日志定义在order_items (product_id作为join列)和inventories (quantity_on_hand 作为过滤列),参考前面的#为物化视图日志指定过滤列 和#为物化视图日志指定连接列

创建嵌套物化视图

以下视图以前面创建的物化视图为主表,创建了一个定制化的视图。

CREATE MATERIALIZED VIEW my_warranty_orders
   AS SELECT w.order_id, w.line_item_id, o.order_date
   FROM warranty_orders w, orders o
   WHERE o.order_id = o.order_id
   AND o.sales_rep_id = 165; 

来源: https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/CREATE-MATERIALIZED-VIEW.html#GUID-EE262CA4-01E5-4618-B659-6165D993CA1B

原文地址:https://www.cnblogs.com/plluoye/p/11077075.html

时间: 2024-08-24 12:27:19

物化视图创建案例的相关文章

oracle物化视图创建

我们如果遇到需要从其它系统的数据库中取数据进行统计分析的问题,可疑选择使用ORACLE的ODI工具进行抽数,但是对方提供的数据库用户下没有任何对象,只是有查询所有表的权限,因此无法做数据反向. 于是决定使用物化视图,把对方数据库中的数据拿过来,虽然数据量比较大,但是每月只拿一次,而且如果设置成增量更新,也不会太慢.现在记录下物化视图的创建过程(以一张表为例). 一.准备条件以及备注 假设双方数据库都是ORACLE10g,需要同步过来的表名叫:GG_ZLX_ZHU,对方数据库用户名:usernam

[转]物化视图创建 及 刷新机制修改

物化视图对于前台数据库使用者来说如同一个实际的表,具有和一般表相同的如select等操作,而其实际上是一个视图,一个由系统实现定期刷新其数据的视图(具体刷新时间在定义物化视图的时候已有定义),使用物化视图更可以实现视图的所有功能,而物化视图却不是在使用时才读取,大大提高了读取速度,特别适用抽取大数据量表某些信息以及数据链连接表使用,但是物化视图占用数据库磁盘空间.具体语法如下: 一.物化视图的创建 create materialized view [view_name] refresh [fas

Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步

摘自:http://blog.csdn.net/javaee_sunny/article/details/53439980 目录(?)[-] Oracle 10g 物化视图语法如下 实例演示 主要步骤 在A节点创建原表和物化视图日志 在B节点创建连接A节点的远程链接 在B节点处创建目标表和与目标表名称相同的物化视图 在B节点处刷新物化视图 升级采用存储过程定时任务JOB方式定时刷新物化视图 进一步优化 文章更新记录 参考文章 Oracle 10g 物化视图语法如下: create materia

oracle 物化视图及创建索引

物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询.这样对整体查询性能的提高,并没有实质上的好处. 1.物化视图的类型:ON DEMAND.ON COMMIT 二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性:而ON COMMIT是说,一旦基表有了C

PLSQL_Material View物化视图的基本概念和用法(概念)

2014-06-08 BaoXinjian 1. 用法 物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表. 物化视图存储基于远程表的数据,也可以称为快照.对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的. 如果你想修改本地副本,必须用高级复制的功能.当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取. 对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图. 实现两个数据库之间的数据同步,可以存在时

PLSQL_Material View物化视图的基本概念和用法 (概念)(以物化视图的方式同步两个数据库间的表或实时备份重要表)

2014-06-08 BaoXinjian 1. 用法 物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表. 物化视图存储基于远程表的数据,也可以称为快照.对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的. 如果你想修改本地副本,必须用高级复制的功能.当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取. 对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图. 实现两个数据库之间的数据同步,可以存在时

【PostgreSQL】物化视图

PostgreSQL 9.3 以后出现了物化视图.物化视图是由实实在在的数据组成,这是和一般视图的根本区别. 1. 物化视图创建语法如下: --创建语法 CREATE MATERIALIZED VIEW table_name [ (column_name [, ...] ) ] [ WITH ( storage_parameter [= value] [, ... ] ) ] [ TABLESPACE tablespace_name ] AS query [ WITH [ NO ] DATA ]

【转】Oracle之物化视图

原文地址:http://www.cnblogs.com/Ronger/archive/2012/03/28/2420962.html 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询.这样对整体查询性能的提高,并没有实质上的好处.1.物化视图的类型:ON DEMAND.ON COMMIT 二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视

物化视图(转)

物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询.这样对整体查询性能的提高,并没有实质上的好处.1.物化视图的类型:ON DEMAND.ON COMMIT 二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图“需要”被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一致性:而ON COMMIT是说,一旦基表有了CO