领取MOLI红包

栏目分类

热点资讯

你的位置:CHEEL 中文站 > FLIX中文网 > Oracle 技术网 (OTN) > 面向开发人员和数据库管理员的下载、讨论和文档

Oracle 技术网 (OTN) > 面向开发人员和数据库管理员的下载、讨论和文档


发布日期:2025-01-04 14:48    点击次数:59


OBE 主页 > 10gR2 VMware > 商务智能 > 使用 Oracle 的物化视图和查询重写功能 使用 Oracle 的物化视图和查询重写功能 目的 在本教程中,您将了解如何利用 Oracle 强大的物化视图和查询重写功能。 所需时间 大约 2 个小时 主题 本教程包括下列主题: 概述 情景 为销售历史模式实施模式更改 启用查询重写 分析物化视图刷新和重写功能 Oracle 的查询重写功能 带有 GROUP BY 扩展项的增强的重写功能 使用错误或重写控制语句的执行 分区与物化视图 使用带有 PMARKER 信息的物化视图 使用查询重写和部分陈旧的物化视图 使用 TUNE_MVIEW 使物化视图可以快速刷新 重置环境 总结 查看屏幕截图 将光标置于此图标上以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。) 注意:此外,您还可以在下列步骤中将光标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。您可以单击单个屏幕截图将其隐藏。 概述 通过使用概要管理 (Summary Management) 特性,您可以减轻数据库管理员的工作负荷,这是因为您无需再手动创建概要,而且最终用户也不再必须知道已经定义的概要。一旦您创建了一个或多个物化视图(它们和概要等效),最终用户就可以查询数据库中的表和视图。Oracle 服务器中的查询重写机制自动重写 SQL 查询以使用概要表。这一机制减少了从查询返回结果的响应时间。数据仓库内的物化视图对于最终用户或数据库应用程序来说是透明的。 Oracle 数据库为您提供用于更先进的重写和刷新机制的增强功能,以及全面的顾问与调整框架。这为您的环境带来了更加优化的物化视图,在占用额外空间最小的情况下提升了性能。 注意:本教程并不是物化视图的介绍。它假定学习者对 Oracle 的现有物化视图功能有基本的了解。如果您需要更多关于某些主题的背景信息,请参看《Oracle 数据仓库指南》。 返回主题列表 情景 您将使用销售历史记录 (SH) 示例模式创建、修改并分析物化视图和重写功能。此研讨会需要在默认安装上对 SH 模式进行一些小修改。 返回主题列表 为销售历史模式实施模式更改 在您启动物化视图功能前,需要对现有的销售历史记录模式对象进行一些更改,还必须将一些额外的系统权限授予用户 SH。使用 SQL 文件 modifySH_10gR2.sql 应用这些更改。这个文件位于 /home/oracle/wkdir 文件夹中。要利用数据仓库教程的设置文件,执行下列步骤: 1. 启动一个终端窗口。通过从终端会话执行下列命令,将工作目录更改为 /home/oracle/wkdir 文件夹: 注意:此教程假定您有一个 /home/oracle/wkdir 文件夹,则可以从这个文件夹获得物化视图文件。 cd wkdir 2. 启动一个 SQL*Plus 会话。使用 sh/sh 作为用户名和口令。 从 SQL*Plus 会话运行 modifySH_10gR2.sql 脚本。 @modifySH_10gR2.sql 输出的底部应与以下图像相同。 3. 执行 xrwutl.sql 脚本。 @xrwutl.sql 输出的底部应与以下图像相同。 返回主题列表 启用查询重写 要启用查询重写,需要满足以下条件: 单个物化视图必须有 ENABLE QUERY REWRITE 子句。 必须将 QUERY_REWRITE_ENABLED 初始化参数设置为 TRUE(在 10g 中是默认设置)。或者,您可以将此参数设置为 FORCE,这将停用对重写计划的任何成本评估,并在任何可能的时候重写查询。 重写完整性模式和特定的物化视图状态必须匹配,以启用对这一特定物化视图的重写。 在这一小节,将启用查询重写。首先,需要确保对数据库实例进行了基本初始化设置。为此,执行下列步骤: 1. 在登录 SH 模式的 SQL*Plus 会话中,运行 set_rewrite_session.sql,或将下列 SQL 语句复制到 SQL*Plus 会话中: @set_rewrite_session ALTER SESSION SET query_rewrite_integrity=TRUSTED; ALTER SESSION SET query_rewrite_enabled=FORCE; show parameters query 您正在启用查询重写并且在使用“trusted”模式。这是最常用的完整性级别。在 TRUSTED 模式中,优化程序相信物化视图中的数据是最新的、在维中声明的关系和 RELY 约束是正确的。在这一模式中,优化程序还将使用预先建立的物化视图或基于视图的物化视图,并使用未执行和已执行的关系。在这一模式中,优化程序还“信任”已经声明但尚未 ENABLED VALIDATED 的主/唯一键约束和通过维指定的数据关系。 有关 query_rewrite_integrity 的级别和 query_rewrite_enabled 的更多详细信息,请参考《Oracle 数据仓库指南》。 返回主题列表 分析物化视图刷新和重写功能 Oracle 数据库 10g 提供用于分析现有的和潜在的物化视图的过程。这使您能够充分利用 Oracle 所有强大的物化视图功能。 要分析潜在物化视图的刷新和重写功能,执行以下步骤: 1. 在登录 SH 模式的 SQL*Plus 会话中,运行 create_mv1.sql,或将下列 SQL 语句复制到 SQL*Plus 会话中: @create_mv1.sql DROP MATERIALIZED VIEW cust_sales_mv ; CREATE MATERIALIZED VIEW cust_sales_mv BUILD IMMEDIATE REFRESH FAST ON COMMIT ENABLE QUERY REWRITE AS SELECT c.cust_id, SUM(amount_sold) AS dollar_sales FROM sales s, customers c WHERE c.cust_id = s.cust_id GROUP BY c.cust_id; 这个语句失败并引发下面的错误: ORA-23413:table "SH"."CUSTOMERS" does not have a materialized view log. 您可以试着手动纠正这个错误并再次创建此物化视图。但是,这是一个不断重复且耗时的过程。而使用 Oracle 数据库 10g 的 dbms_mview 程序包,您可以轻松修复这个错误。您马上就会看到这一点。 2. 即使这个语句成功,您也无法了解其快速刷新功能的详细信息。通过使用 dbms_mview.explain_mview 程序包,您对潜在物化视图的功能会有更深入的了解,从而能够在其创建之前解决所有问题。 @explain_mv1.sql truncate table mv_capabilities_table; exec dbms_mview.explain_mview( - 'SELECT c.cust_id, SUM(amount_sold) AS dollar_sales - FROM sales s, customers c - WHERE s.cust_id= c.cust_id - GROUP BY c.cust_id'); set serveroutput on begin for crec in (select capability_name, possible, related_text, msgtxt from mv_capabilities_table order by 1) loop dbms_output.put_line(crec.capability_name