<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AnySQL.net &#187; 查询重写</title>
	<atom:link href="http://www.anysql.net/tag/%e6%9f%a5%e8%af%a2%e9%87%8d%e5%86%99/feed" rel="self" type="application/rss+xml" />
	<link>http://www.anysql.net</link>
	<description>SQLULDR2, DataCopy, DataSync, WebChart, OraMon, AUL/MyDUL, 性能优化及容量分析</description>
	<lastBuildDate>Sun, 29 Aug 2010 00:14:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Query Rewrite的一般理解之六</title>
		<link>http://www.anysql.net/oracle/query_rewrite_06.html</link>
		<comments>http://www.anysql.net/oracle/query_rewrite_06.html#comments</comments>
		<pubDate>Sun, 15 Oct 2006 05:05:51 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Query Rewrite]]></category>
		<category><![CDATA[性能调整]]></category>
		<category><![CDATA[查询重写]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/query-rewrite%e7%9a%84%e4%b8%80%e8%88%ac%e7%90%86%e8%a7%a3%e4%b9%8b%e5%85%ad.html</guid>
		<description><![CDATA[&#160;&#160;&#160; MVIEW的刷新也是一个比较难的话题, 尤其是遇到比较复杂的情况下, 如何实现增量刷新, 为什么现在的MVIEW不能实现增量刷新, 一直是我当初在实施MVIEW时遇到的最大问题, 在Oracle中也提供了一个过程可用于分析MVIEW, 这个过程在DBMS_MVIEW这个包中, 过程名为EXPLAIN_MVIEW. 对这个过程有所了解可以帮助你更好地实现MVIEW的应用. 在输出的信息中包括了是否可以实现增量刷新, 同时也列出了这个实体化视图上支持什么样的查询重写(文字匹配, 或一般函义上的重写). &#160;&#160;&#160; 要使用这个功能, 需要建一个名称为MV_CAPABILITIES_TABLE的表, 可以调用@?/rdbms/admin/utlxmv.sql来创建. 这个表的表结构如下: CREATE TABLE MV_CAPABILITIES_TABLE&#160; (STATEMENT_ID&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; VARCHAR(30),&#160; &#8212; Client-supplied unique statement identifier&#160;&#160; MVOWNER&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; VARCHAR(30),&#160; &#8212; NULL for SELECT based EXPLAIN_MVIEW&#160;&#160; MVNAME&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; VARCHAR(30),&#160; &#8212; NULL for SELECT based EXPLAIN_MVIEW&#160;&#160; CAPABILITY_NAME&#160;&#160;&#160;&#160;&#160; VARCHAR(30),&#160; &#8212; A descriptive name of the particular&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212; capability:&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp; MVIEW的刷新也是一个比较难的话题, 尤其是遇到比较复杂的情况下, 如何实现增量刷新, 为什么现在的MVIEW不能实现增量刷新, 一直是我当初在实施MVIEW时遇到的最大问题, 在Oracle中也提供了一个过程可用于分析MVIEW, 这个过程在DBMS_MVIEW这个包中, 过程名为EXPLAIN_MVIEW. 对这个过程有所了解可以帮助你更好地实现MVIEW的应用. 在输出的信息中包括了是否可以实现增量刷新, 同时也列出了这个实体化视图上支持什么样的查询重写(文字匹配, 或一般函义上的重写).</p>
<p>&nbsp;&nbsp;&nbsp; 要使用这个功能, 需要建一个名称为MV_CAPABILITIES_TABLE的表, 可以调用@?/rdbms/admin/utlxmv.sql来创建. 这个表的表结构如下:</p>
<p><span id="more-86"></span></p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p><font face="Courier New">CREATE TABLE MV_CAPABILITIES_TABLE<br />&nbsp; (STATEMENT_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR(30),&nbsp; &#8212; Client-supplied unique statement identifier<br />&nbsp;&nbsp; MVOWNER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR(30),&nbsp; &#8212; NULL for SELECT based EXPLAIN_MVIEW<br />&nbsp;&nbsp; MVNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR(30),&nbsp; &#8212; NULL for SELECT based EXPLAIN_MVIEW<br />&nbsp;&nbsp; CAPABILITY_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR(30),&nbsp; &#8212; A descriptive name of the particular<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; capability:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; REWRITE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; Can do at least full text match<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; rewrite<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; REWRITE_PARTIAL_TEXT_MATCH<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; Can do at leat full and partial<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; text match rewrite<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; REWRITE_GENERAL<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; Can do all forms of rewrite<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; REFRESH<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; Can do at least complete refresh<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; REFRESH_FROM_LOG_AFTER_INSERT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; Can do fast refresh from an mv log<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; or change capture table at least<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; when update operations are<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; restricted to INSERT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; REFRESH_FROM_LOG_AFTER_ANY<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; can do fast refresh from an mv log<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; or change capture table after any<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; combination of updates<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; PCT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; Can do Enhanced Update Tracking on<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; the table named in the RELATED_NAME<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; column.&nbsp; EUT is needed for fast<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; refresh after partitioned<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; maintenance operations on the table<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; named in the RELATED_NAME column<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; and to do non-stale tolerated<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#038;n<br />
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; rewrite when the mv is partially<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; stale with respect to the table<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; named in the RELATED_NAME column.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; EUT can also sometimes enable fast<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; refresh of updates to the table<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; named in the RELATED_NAME column<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; when fast refresh from an mv log<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; or change capture table is not<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211;&nbsp;&nbsp; possilbe.<br />&nbsp;&nbsp; POSSIBLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CHARACTER(1), &#8212; T = capability is possible<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; F = capability is not possible<br />&nbsp;&nbsp; RELATED_TEXT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR(2000),&#8211; Owner.table.column, alias name, etc.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; related to this message.&nbsp; The<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; specific meaning of this column<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; depends on the MSGNO column.&nbsp; See<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; the documentation for<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; DBMS_MVIEW.EXPLAIN_MVIEW() for details<br />&nbsp;&nbsp; RELATED_NUM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; When there is a numeric value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; associated with a row, it goes here.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; The specific meaning of this column<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; depends on the MSGNO column.&nbsp; See<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; the documentation for<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; DBMS_MVIEW.EXPLAIN_MVIEW() for details<br />&nbsp;&nbsp; MSGNO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INTEGER,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; When available, QSM message #<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; explaining why not possible or more<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; details when enabled.<br />&nbsp;&nbsp; MSGTXT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR(2000),&#8211; Text associated with MSGNO.<br />&nbsp;&nbsp; SEQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; Useful in ORDER BY clause when<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; selecting from this table.</font></p>
</blockquote>
<p dir="ltr">&nbsp;&nbsp;&nbsp; 大家应当好好看一下CAPABILITY_NAME这个列上的说明部份, 就可以对这个过程的功能有所了解了, 下面来看一下用法</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p dir="ltr"><font face="Courier New">PROCEDURE EXPLAIN_MVIEW<br />&nbsp;Argument Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; In/Out Default?<br />&nbsp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212; &#8212;&#8212;&#8211;<br />&nbsp;MV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN<br />&nbsp;STMT_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp;&nbsp; DEFAULT<br />PROCEDURE EXPLAIN_MVIEW<br />&nbsp;Argument Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; In/Out Default?<br />&nbsp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212; &#8212;&#8212;&#8211;<br />&nbsp;MV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN<br />&nbsp;MSG_ARRAY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXPLAINMVARRAYTYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN/OUT</font></p>
</blockquote>
<p dir="ltr"><font face="Courier New"><font face="Arial">&nbsp;&nbsp; 其中第一个参数可以是现有的MVIEW的名称, 也可以是将要创建的MIVEW的SQL语句部份.</font></font></p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p dir="ltr"><font face="Courier New">SQL&gt; exec dbms_mview.explain_mview(&#8216;flou.MV_TEST_REWRITE&#8217;);</font></p>
<p dir="ltr"><font face="Courier New">PL/SQL procedure successfully completed.</font></p>
<p dir="ltr"><font face="Courier New">SQL&gt; select seq,CAPABILITY_NAME,POSSIBLE from MV_CAPABILITIES_TABLE order by seq;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 PCT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; N<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1002 REFRESH_COMPLETE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Y<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2003 REFRESH_FAST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; N<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3004 REWRITE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Y<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4005 PCT_TABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; N<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5006 REFRESH_FAST_AFTER_INSERT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; N<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6007 REFRESH_FAST_AFTER_ONETAB_DML&nbsp; N<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7008 REFRESH_FAST_AFTER_ANY_DML&nbsp;&nbsp;&nbsp;&nbsp; N<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8009 REFRESH_FAST_PCT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; N<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9010 REWRITE_FULL_TEXT_MATCH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Y<br />&nbsp;&nbsp;&nbsp;&nbsp; 10011 REWRITE_PARTIAL_TEXT_MATCH&nbsp;&nbsp;&nbsp;&nbsp; Y<br />&nbsp;&nbsp;&nbsp;&nbsp; 11012 REWRITE_GENERAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Y<br />&nbsp;&nbsp;&nbsp;&nbsp; 12013 REWRITE_PCT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; N</font></p>
<p dir="ltr"><font face="Courier New">13 rows selected.</font></p>
<p dir="ltr"><font face="Courier New">SQL&gt; select seq, msgtxt from MV_CAPABILITIES_TABLE order by seq;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1002<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2003<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3004<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4005 relation is not a partitioned table<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5006 the detail table does not have a materialized view log<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6007 see the reason why REFRESH_FAST_AFTER_INSERT is disabled<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7008 see the reason why REFRESH_FAST_AFTER_ONETAB_DML is disabled<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8009 PCT is not possible on any of the detail tables in the mater<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ialized view</font></p>
<p dir="ltr"><font face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9010<br />&nbsp;&nbsp;&nbsp;&nbsp; 10011<br />&nbsp;&nbsp;&nbsp;&nbsp; 11012<br />&nbsp;&nbsp;&nbsp;&nbsp; 12013 general rewrite is not possible and PCT is not possible on a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ny of the detail tables</font></p>
<p dir="ltr"><font face="Courier New"><br />13 rows selected.</font></p>
</blockquote>
<p dir="ltr"><font face="Courier New"><font face="Arial">&nbsp;&nbsp;&nbsp; 现在大家知道了这个功能, 就当去试试.</font></font></p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_05.html" title="Query Rewrite的一般理解之五">Query Rewrite的一般理解之五</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_04.html" title="Query Rewrite的一般理解之四">Query Rewrite的一般理解之四</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_03.html" title="Query Rewrite的一般理解之三">Query Rewrite的一般理解之三</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_02.html" title="Query Rewrite的一般理解之二">Query Rewrite的一般理解之二</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_01.html" title="Query Rewrite的一般理解之一">Query Rewrite的一般理解之一</a> (0)</li><li>2007/03/09 -- <a href="http://www.anysql.net/oracle/star_in_mview.html" title="Oracle的实体化视图(MVIEW)的深入研究之三">Oracle的实体化视图(MVIEW)的深入研究之三</a> (0)</li><li>2007/03/08 -- <a href="http://www.anysql.net/oracle/improve_mv_refresh.html" title="Oracle的实体化视图(MVIEW)的深入研究之一">Oracle的实体化视图(MVIEW)的深入研究之一</a> (0)</li><li>2006/12/25 -- <a href="http://www.anysql.net/dba/column_type_mismatch.html" title="列类型和变量类型不一致引起的性能问题?">列类型和变量类型不一致引起的性能问题?</a> (2)</li><li>2006/10/11 -- <a href="http://www.anysql.net/oracle/olap_tuning_startransformation.html" title="数据库优化中什么是星型转换(Star Transform)?">数据库优化中什么是星型转换(Star Transform)?</a> (4)</li><li>2006/10/09 -- <a href="http://www.anysql.net/oracle/oracle_olap_dimension.html" title="利用维对象来优化数据仓库的高级技巧">利用维对象来优化数据仓库的高级技巧</a> (7)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/oracle/query_rewrite_06.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Query Rewrite的一般理解之五</title>
		<link>http://www.anysql.net/oracle/query_rewrite_05.html</link>
		<comments>http://www.anysql.net/oracle/query_rewrite_05.html#comments</comments>
		<pubDate>Sun, 15 Oct 2006 05:03:28 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Query Rewrite]]></category>
		<category><![CDATA[性能调整]]></category>
		<category><![CDATA[查询重写]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/query-rewrite%e7%9a%84%e4%b8%80%e8%88%ac%e7%90%86%e8%a7%a3%e4%b9%8b%e4%ba%94.html</guid>
		<description><![CDATA[&#160;&#160;&#160; 对于一个给定的SQL, 和现有的MVIEW, 这个SQL可能被Rewrite, 也可能不能被Rewrite, 如何找出这其中的原因呢, 靠经验可以解决一些问题, 不过所花的时间就要长一点了. 其实在Oracle中提供了一个函数可以用于解释为什么某个SQL不能被重写, 这个过程位于dbms_mview这个包中, 过程名为explain_rewrite, 有了这个工具, 可以快速地找出为什么不能被重写, 要使用这个过程, 你需要事先创建一个表REWRITE_TABLE, 可以通过@?/rdbms/admin/utlxrw.sql来创建. CREATE TABLE REWRITE_TABLE(&#160;&#160; statement_id&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; VARCHAR2(30),&#160; &#8212; id for the query&#160;&#160; mv_owner&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; VARCHAR2(30),&#160; &#8212; owner of the MV&#160;&#160; mv_name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; VARCHAR2(30),&#160; &#8212; name of the MV&#160;&#160; sequence&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; INTEGER,&#160;&#160;&#160;&#160;&#160;&#160; &#8212; sequence no of the error msg&#160;&#160; query&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; VARCHAR2(2000),&#8211; user query&#160;&#160; message&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; VARCHAR2(512), [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp; 对于一个给定的SQL, 和现有的MVIEW, 这个SQL可能被Rewrite, 也可能不能被Rewrite, 如何找出这其中的原因呢, 靠经验可以解决一些问题, 不过所花的时间就要长一点了. 其实在Oracle中提供了一个函数可以用于解释为什么某个SQL不能被重写, 这个过程位于dbms_mview这个包中, 过程名为explain_rewrite, 有了这个工具, 可以快速地找出为什么不能被重写, 要使用这个过程, 你需要事先创建一个表REWRITE_TABLE, 可以通过@?/rdbms/admin/utlxrw.sql来创建.</p>
<p><span id="more-85"></span></p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p><font face="Courier New">CREATE TABLE REWRITE_TABLE<br />(<br />&nbsp;&nbsp; statement_id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(30),&nbsp; &#8212; id for the query<br />&nbsp;&nbsp; mv_owner&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(30),&nbsp; &#8212; owner of the MV<br />&nbsp;&nbsp; mv_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(30),&nbsp; &#8212; name of the MV<br />&nbsp;&nbsp; sequence&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INTEGER,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; sequence no of the error msg<br />&nbsp;&nbsp; query&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(2000),&#8211; user query<br />&nbsp;&nbsp; message&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(512), &#8212; EXPLAIN_REWRITE error msg<br />&nbsp;&nbsp; pass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(3),&nbsp;&nbsp; &#8212; rewrite pass no<br />&nbsp;&nbsp; flags&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INTEGER,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; associated flags<br />&nbsp;&nbsp; reserved1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INTEGER,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212; currently not used<br />&nbsp;&nbsp; reserved2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(10)&nbsp; &#8212; currently not used<br />)</font></p>
</blockquote>
<p dir="ltr">&nbsp;&nbsp; 有了这个表后, 就可以调用dbms_mview.explain_rewrite来解决问题了:</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p dir="ltr"><font face="Courier New">PROCEDURE EXPLAIN_REWRITE<br />&nbsp;Argument Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; In/Out Default?<br />&nbsp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212; &#8212;&#8212;&#8211;<br />&nbsp;QUERY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN<br />&nbsp;MV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp;&nbsp; DEFAULT<br />&nbsp;STATEMENT_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp;&nbsp; DEFAULT</font></p>
</blockquote>
<p dir="ltr">&nbsp;&nbsp; 下面我们来看一个例子, 先创建所需的表:</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p dir="ltr"><font face="Courier New">create table test_rewrite as select * from dba_objects;<br />alter table test_rewrite modify owner not null;<br />create materialized view mv_test_rewrite<br />enable query rewrite<br />as<br />select owner,count(*) cntrow, count(object_id) cntowner,<br />&nbsp;&nbsp; sum(object_id) sumobjid, sum(data_object_id) sumobjd<br />FROM TEST_REWRITE<br />group by owner;<br />analyze table test_rewrite compute statistics;<br />analyze table mv_test_rewrite compute statistics;</font></p>
</blockquote>
<p dir="ltr">&nbsp;&nbsp; 然后我们来试验几种不同情况下dbms_mvew.explain_rewrite的输出情况:</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p dir="ltr">1, 未设置query_rewrite_enable为true时<br />SQL&gt; alter session set query_rewrite_enabled=false;</p>
<p dir="ltr">Session altered.</p>
<p dir="ltr">SQL&gt;&nbsp; exec dbms_mview.explain_rewrite(&#8216;select avg(object_id) from test_rewrite where owner=:1 group by owner&#8217;);</p>
<p dir="ltr">PL/SQL procedure successfully completed.</p>
<p dir="ltr">SQL&gt; select MESSAGE from rewrite_table;</p>
<p dir="ltr">MESSAGE<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />QSM-01001: query rewrite not enabled</p>
<p dir="ltr">2, 试测一个不能query rewrite的SQL语句<br />SQL&gt; exec dbms_mview.explain_rewrite(&#8216;select avg(data_object_id) from test_rewrite where owner=:1 group by owner&#8217;);</p>
<p dir="ltr">PL/SQL procedure successfully completed.</p>
<p dir="ltr">SQL&gt; select MESSAGE from rewrite_table;</p>
<p dir="ltr">MESSAGE<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />QSM-01067: materialized view, MV_TEST_REWRITE, cannot support the query measure, AVG</p>
<p>3, 再来测试一个可以rewrite的SQL语句<br />SQL&gt; exec dbms_mview.explain_rewrite(&#8216;select avg(object_id) from test_rewrite where owner=:1 group by owner&#8217;);</p>
<p dir="ltr">PL/SQL procedure successfully completed.</p>
<p dir="ltr">SQL&gt; select MESSAGE from rewrite_table;</p>
<p dir="ltr">MESSAGE<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />QSM-01033: query rewritten with materialized view, MV_TEST_REWRITE</p>
</blockquote>
<p dir="ltr">&nbsp;&nbsp;&nbsp; 从上面的例子中, 我们可以从查询出来的消息中发现很有用的信息, 在做上述实验之前, 我都运行了delete rewrite_table语句.</p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_06.html" title="Query Rewrite的一般理解之六">Query Rewrite的一般理解之六</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_04.html" title="Query Rewrite的一般理解之四">Query Rewrite的一般理解之四</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_03.html" title="Query Rewrite的一般理解之三">Query Rewrite的一般理解之三</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_02.html" title="Query Rewrite的一般理解之二">Query Rewrite的一般理解之二</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_01.html" title="Query Rewrite的一般理解之一">Query Rewrite的一般理解之一</a> (0)</li><li>2007/03/09 -- <a href="http://www.anysql.net/oracle/star_in_mview.html" title="Oracle的实体化视图(MVIEW)的深入研究之三">Oracle的实体化视图(MVIEW)的深入研究之三</a> (0)</li><li>2007/03/08 -- <a href="http://www.anysql.net/oracle/improve_mv_refresh.html" title="Oracle的实体化视图(MVIEW)的深入研究之一">Oracle的实体化视图(MVIEW)的深入研究之一</a> (0)</li><li>2006/12/25 -- <a href="http://www.anysql.net/dba/column_type_mismatch.html" title="列类型和变量类型不一致引起的性能问题?">列类型和变量类型不一致引起的性能问题?</a> (2)</li><li>2006/10/11 -- <a href="http://www.anysql.net/oracle/olap_tuning_startransformation.html" title="数据库优化中什么是星型转换(Star Transform)?">数据库优化中什么是星型转换(Star Transform)?</a> (4)</li><li>2006/10/09 -- <a href="http://www.anysql.net/oracle/oracle_olap_dimension.html" title="利用维对象来优化数据仓库的高级技巧">利用维对象来优化数据仓库的高级技巧</a> (7)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/oracle/query_rewrite_05.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Query Rewrite的一般理解之四</title>
		<link>http://www.anysql.net/oracle/query_rewrite_04.html</link>
		<comments>http://www.anysql.net/oracle/query_rewrite_04.html#comments</comments>
		<pubDate>Sun, 15 Oct 2006 05:00:58 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Query Rewrite]]></category>
		<category><![CDATA[性能调整]]></category>
		<category><![CDATA[查询重写]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/query-rewrite%e7%9a%84%e4%b8%80%e8%88%ac%e7%90%86%e8%a7%a3%e4%b9%8b%e5%9b%9b.html</guid>
		<description><![CDATA[&#160;&#160; 可以看到MVIEW在Query Rewrite中的重要性, 要在实际应用中使用, 就得知道它的很多方面, 其中刷新是最主要的: 1, MVIEW日志的建立2, 汇总型的MIVEW的刷新3, JOIN类型的MVIEW的刷新4, 更复杂的MVIEW的刷新5, 分区时的MVIEW的刷新 &#160;&#160; 在这儿我们主要讨论的是如何实现Fast刷新, 否则没有多少意议的. 我们一点一点来看: &#160;&#160; 1, 要实现增量刷新, 必须在MVIEW引的的表上创建MVIEW Log, 我们主要来说一下几个选项 WITH ROWID/PRIMARY KEY : 在MVIEW Log中记录ROWID或主键以反映改更过的记录, 对于一般表我推荐用WITH ROWID, 对于IOT, 则请用PRIMARY KEY. (column list): 为了让MVIEW LOG变得小一点你可以只包括进在MVIEW的SQL中引用的字段, Oracle用表来实现MVIEW LOG在更新频繁的表上, MVIEW LOG可能会变得很大. 在指定了WITH PRIMARY KEY时, 主键的列已经包括了, 因此在column list中就不要再写进去了. WITH SEQUENCE: 用于记录修改发生的顺序, 如果没有对基表的DELETE操作则可以不用加这个选项. INCLUDING NEW VALUES: 主要用于在汇总型的MVIEW时, [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;&nbsp; 可以看到MVIEW在Query Rewrite中的重要性, 要在实际应用中使用, 就得知道它的很多方面, 其中刷新是最主要的:</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p>1, MVIEW日志的建立<br />2, 汇总型的MIVEW的刷新<br />3, JOIN类型的MVIEW的刷新<br />4, 更复杂的MVIEW的刷新<br />5, 分区时的MVIEW的刷新</p>
</blockquote>
<p dir="ltr">&nbsp;&nbsp; 在这儿我们主要讨论的是如何实现Fast刷新, 否则没有多少意议的. 我们一点一点来看:</p>
<p><span id="more-84"></span></p>
<p dir="ltr">&nbsp;&nbsp; 1, 要实现增量刷新, 必须在MVIEW引的的表上创建MVIEW Log, 我们主要来说一下几个选项</p>
<ul dir="ltr" style="MARGIN-RIGHT: 0px">
<li dir="ltr">
<div>WITH ROWID/PRIMARY KEY : 在MVIEW Log中记录ROWID或主键以反映改更过的记录, 对于一般表我推荐用WITH ROWID, 对于IOT, 则请用PRIMARY KEY. </div>
</li>
<li dir="ltr">
<div>(column list): 为了让MVIEW LOG变得小一点你可以只包括进在MVIEW的SQL中引用的字段, Oracle用表来实现MVIEW LOG在更新频繁的表上, MVIEW LOG可能会变得很大. 在指定了WITH PRIMARY KEY时, 主键的列已经包括了, 因此在column list中就不要再写进去了.</div>
</li>
<li dir="ltr">
<div>WITH SEQUENCE: 用于记录修改发生的顺序, 如果没有对基表的DELETE操作则可以不用加这个选项.</div>
</li>
<li dir="ltr">
<div>INCLUDING NEW VALUES: 主要用于在汇总型的MVIEW时, 同时记录字段的旧值和新值以实现快速刷新, 默认是EXCLUDING NEW VALUES, 这时如需要当前值, Oracle需要到表中去查询.</div>
</li>
</ul>
<p>&nbsp;&nbsp;&nbsp;2, 汇总型的MIVEW的刷新,&nbsp;Oracle支持分组函数及一部份的分析函数的增量刷新.</p>
<ul>
<li>
<div>将count(*)加到MVIEW的SQL, 如果有SUM(*)和COUNT(*)存在就可以实现增量刷新.</div>
</li>
</ul>
<p>&nbsp;&nbsp;3, JOIN类型的MVIEW的刷新</p>
<ul>
<li>在Join的MVIEW时将基表的ROWID都加到MVIEW中, 如TA(A,B)和TB(C,D), 则MVIEW时可以写为, SELECT TA.ROWID TA_ROWID,TB.ROWID TB_ROWID,&nbsp;&lt;&lt;collist&gt;&gt;&nbsp;FROM TA,TB WHERE &#8230; </li>
</ul>
<p>&nbsp; 4, 复杂类型的MVIEW的刷新</p>
<ul>
<li>可以考虑转换成级联的MVIEW, 如先建JOIN的MVIEW, 再建SUMMARY的MVIEW </li>
</ul>
<p>&nbsp; 5, 分区时的MVIEW的刷新</p>
<ul>
<li>用DBMS_MVIEW.MARKER(表名)来获得分区ID, 并加到MIVEW的SELECT列表中, 这样可以实现分区表的增量刷新, 请自已做实验来测试. </li>
</ul>
<p>&nbsp;&nbsp; 关于这部份的解释, 在&lt;&lt;Data Warehouse Guide&gt;&gt;这一个文档中有很详细的解绍, 我也正在看, 看完后会更新的.</p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_06.html" title="Query Rewrite的一般理解之六">Query Rewrite的一般理解之六</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_05.html" title="Query Rewrite的一般理解之五">Query Rewrite的一般理解之五</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_03.html" title="Query Rewrite的一般理解之三">Query Rewrite的一般理解之三</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_02.html" title="Query Rewrite的一般理解之二">Query Rewrite的一般理解之二</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_01.html" title="Query Rewrite的一般理解之一">Query Rewrite的一般理解之一</a> (0)</li><li>2007/03/09 -- <a href="http://www.anysql.net/oracle/star_in_mview.html" title="Oracle的实体化视图(MVIEW)的深入研究之三">Oracle的实体化视图(MVIEW)的深入研究之三</a> (0)</li><li>2007/03/08 -- <a href="http://www.anysql.net/oracle/improve_mv_refresh.html" title="Oracle的实体化视图(MVIEW)的深入研究之一">Oracle的实体化视图(MVIEW)的深入研究之一</a> (0)</li><li>2006/12/25 -- <a href="http://www.anysql.net/dba/column_type_mismatch.html" title="列类型和变量类型不一致引起的性能问题?">列类型和变量类型不一致引起的性能问题?</a> (2)</li><li>2006/10/11 -- <a href="http://www.anysql.net/oracle/olap_tuning_startransformation.html" title="数据库优化中什么是星型转换(Star Transform)?">数据库优化中什么是星型转换(Star Transform)?</a> (4)</li><li>2006/10/09 -- <a href="http://www.anysql.net/oracle/oracle_olap_dimension.html" title="利用维对象来优化数据仓库的高级技巧">利用维对象来优化数据仓库的高级技巧</a> (7)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/oracle/query_rewrite_04.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Query Rewrite的一般理解之三</title>
		<link>http://www.anysql.net/oracle/query_rewrite_03.html</link>
		<comments>http://www.anysql.net/oracle/query_rewrite_03.html#comments</comments>
		<pubDate>Sun, 15 Oct 2006 04:53:01 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Query Rewrite]]></category>
		<category><![CDATA[性能调整]]></category>
		<category><![CDATA[查询重写]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/query-rewrite%e7%9a%84%e4%b8%80%e8%88%ac%e7%90%86%e8%a7%a3%e4%b9%8b%e4%b8%89.html</guid>
		<description><![CDATA[&#160;&#160;&#160; 在Query Rewrite中大家看到这个技术离不开一样东西, 实体化视图, 简称MVIEW. 这是Oracle在8i中首先推出的技术, MVIEW除了在Query Rewrite中使用外, 还在Master &#8211; Slave复制中有很重要的作用, 在这儿我们主要关心Query Rewrite相关的地方, Oracle在Query Rewrite方面越来越强了, 在Oracle 8i中基本上是Text Match的Query Rewrite, 在9i/10g中有很大的更新了,&#160;还支持一般的Query Rewrite(指Text Match以外的), 如可以试一下最后一个SQL语句, 在8i中不能rewrite, 而在9i中却可以: SQL&#62; desc mvtest8&#160;Name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Null?&#160;&#160;&#160; Type&#160;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&#160;OWNER&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; VARCHAR2(30)&#160;OBJECT_NAME&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; VARCHAR2(128) SQL&#62; create materialized view mv8_test&#160; 2&#160; enable query rewrite&#160; 3&#160; as&#160; 4&#160;&#160;&#160; select owner,count(*) rowcnt from mvtest8&#160; 5&#160;&#160;&#160; group by owner; [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp; 在Query Rewrite中大家看到这个技术离不开一样东西, 实体化视图, 简称MVIEW. 这是Oracle在8i中首先推出的技术, MVIEW除了在Query Rewrite中使用外, 还在Master &#8211; Slave复制中有很重要的作用, 在这儿我们主要关心Query Rewrite相关的地方, Oracle在Query Rewrite方面越来越强了, 在Oracle 8i中基本上是Text Match的Query Rewrite, 在9i/10g中有很大的更新了,&nbsp;还支持一般的Query Rewrite(指Text Match以外的), 如可以试一下最后一个SQL语句, 在8i中不能rewrite, 而在9i中却可以:</p>
<p><span id="more-83"></span></p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p><font face="courier new,courier,monospace">SQL&gt; desc mvtest8<br />&nbsp;Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Null?&nbsp;&nbsp;&nbsp; Type<br />&nbsp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />&nbsp;OWNER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(30)<br />&nbsp;OBJECT_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(128)</font></p>
<p><font face="courier new,courier,monospace">SQL&gt; create materialized view mv8_test<br />&nbsp; 2&nbsp; enable query rewrite<br />&nbsp; 3&nbsp; as<br />&nbsp; 4&nbsp;&nbsp;&nbsp; select owner,count(*) rowcnt from mvtest8<br />&nbsp; 5&nbsp;&nbsp;&nbsp; group by owner;</font></p>
<p><font face="courier new,courier,monospace">SQL&gt; select count(*) from mvtest8 where owner=&#8217;SYS&#8217;;</font></p>
</blockquote>
<p dir="ltr">&nbsp;&nbsp; 在应用MVIEW实现Query Rewrite时, 需要对MVIEW有一个基本的了解, 主要要理解以下两点:</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p dir="ltr">1, MVIEW的设计, 可以满足多少SQL的Rewrite.<br />2, MVIEW的刷新, MIVEW是一个中间表, 数据不一定能最新, 对于大量的数据刷新方法也是很重要的.</p>
</blockquote>
<p dir="ltr">&nbsp;&nbsp; 其实在这两点之间是有些冲突的, 要实现第一点, 可能复杂的MVIEW定义有利于提高Query Rewrite后的执行效率, 但复杂的MVIEW每次刷新都可能要抄描全部记录, 对于MVIEW刷新, 在有MVIEW LOG有情况下, MVIEW可以实现增量刷新的, 一般来说要实现增量刷新需要满足下面这样的条件:</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p dir="ltr">1, MVIEW的SQL中不能包函返回值不确定的函数, 如sysdate, rownum等等.<br />2, MVIEW的SQL中只包括汇总时,最好将COUNT(*), COUNT(字段) 这样的分组函数加进去.<br />3, MVIEW的SQL中只包括Join时.</p>
</blockquote>
<p dir="ltr">&nbsp;&nbsp;&nbsp; 关于创建MVIEW和MVIEW LOG的语法在这儿就不说了, MVIEW的刷新有三种选项, FULL: 完全刷新; FAST: 利用MVIEW LOG进行增量刷新; FORCE: 如果不能用FAST, 就用FULL. 对于刷新的时机主要有两种, ON DEMAND: 手工刷新(Crontab, Job, Schedule等), ON COMMIT: 在Commit后进行马上刷新(必须是Fast, 否则你惨了).</p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_06.html" title="Query Rewrite的一般理解之六">Query Rewrite的一般理解之六</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_05.html" title="Query Rewrite的一般理解之五">Query Rewrite的一般理解之五</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_04.html" title="Query Rewrite的一般理解之四">Query Rewrite的一般理解之四</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_02.html" title="Query Rewrite的一般理解之二">Query Rewrite的一般理解之二</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_01.html" title="Query Rewrite的一般理解之一">Query Rewrite的一般理解之一</a> (0)</li><li>2007/03/09 -- <a href="http://www.anysql.net/oracle/star_in_mview.html" title="Oracle的实体化视图(MVIEW)的深入研究之三">Oracle的实体化视图(MVIEW)的深入研究之三</a> (0)</li><li>2007/03/08 -- <a href="http://www.anysql.net/oracle/improve_mv_refresh.html" title="Oracle的实体化视图(MVIEW)的深入研究之一">Oracle的实体化视图(MVIEW)的深入研究之一</a> (0)</li><li>2006/12/25 -- <a href="http://www.anysql.net/dba/column_type_mismatch.html" title="列类型和变量类型不一致引起的性能问题?">列类型和变量类型不一致引起的性能问题?</a> (2)</li><li>2006/10/11 -- <a href="http://www.anysql.net/oracle/olap_tuning_startransformation.html" title="数据库优化中什么是星型转换(Star Transform)?">数据库优化中什么是星型转换(Star Transform)?</a> (4)</li><li>2006/10/09 -- <a href="http://www.anysql.net/oracle/oracle_olap_dimension.html" title="利用维对象来优化数据仓库的高级技巧">利用维对象来优化数据仓库的高级技巧</a> (7)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/oracle/query_rewrite_03.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Query Rewrite的一般理解之二</title>
		<link>http://www.anysql.net/oracle/query_rewrite_02.html</link>
		<comments>http://www.anysql.net/oracle/query_rewrite_02.html#comments</comments>
		<pubDate>Sun, 15 Oct 2006 04:50:23 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Query Rewrite]]></category>
		<category><![CDATA[性能调整]]></category>
		<category><![CDATA[查询重写]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/query-rewrite%e7%9a%84%e4%b8%80%e8%88%ac%e7%90%86%e8%a7%a3%e4%b9%8b%e4%ba%8c.html</guid>
		<description><![CDATA[&#160;&#160;&#160; 在Oracle的Query&#160;Rewrite中主要有三点, 第一是要使用CBO; 第二是要设置query rewrite enabled参数为TRUE; 第三是要先择设置query rewrite integrity参数的值(stale_tolerated, trusted, enforced). 对于第一点, 我们最好analyze相关的表及索引及MV; 对于第二点,这个参数只有两个值(true, false), 很简单; 对于第三点, 我们先来看Oracle的官方对于这个参数的解释: ENFORCED&#160;&#160; Oracle enforces and guarantees consistency and integrity TRUSTED&#160;&#160;&#160;Oracle allows rewrites using relationships that have been declared, but that are not enforced by Oracle. STALE_TOLERATED&#160;&#160;&#160;Oracle allows rewrites using unenforced relationships. Materialized views are eligible for rewrite even [...]]]></description>
			<content:encoded><![CDATA[<p><font face="arial,helvetica,sans-serif">&nbsp;&nbsp;&nbsp; 在Oracle的Query&nbsp;Rewrite中主要有三点, 第一是要使用CBO; 第二是要设置query rewrite enabled参数为TRUE; 第三是要先择设置query rewrite integrity参数的值(stale_tolerated, trusted, enforced). 对于第一点, 我们最好analyze相关的表及索引及MV; 对于第二点,这个参数只有两个值(true, false), 很简单; 对于第三点, 我们先来看Oracle的官方对于这个参数的解释:</font></p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p><font face="Courier New">ENFORCED<br />&nbsp;&nbsp; </font>Oracle enforces and guarantees consistency and integrity</p>
<p><font face="Courier New">TRUSTED<br />&nbsp;&nbsp;&nbsp;Oracle allows rewrites using relationships that have been declared, but that are not enforced by Oracle.</p>
<p>STALE_TOLERATED<br />&nbsp;&nbsp;&nbsp;Oracle allows rewrites using unenforced relationships. Materialized views are eligible for rewrite even if they are known to be inconsistent with the underlying detail data.</font></p>
</blockquote>
<p><span id="more-82"></span></p>
<p dir="ltr"><font face="Courier New">&nbsp;&nbsp;&nbsp;<font face="arial,helvetica,sans-serif">这个参数有点难于理解一些, 但主要和数据的一致性有关,&nbsp;在Oracle的Query Rewrite中,&nbsp;一些约束的声明或状态和Oracle决于可否Query Rewrite有很大的关系. ENFORCED表示Oracle只相信Enabled和Validated的约束, 而Trusted则相信RELY的约束,&nbsp;就算这个约束没有Enabled和Validated, 这两种都要求MVIEW中的数据是及时刷新的,而STALE_TOLERATED则可以容忍一切, 就算中间表的数据是旧的, 指基表有新数据修改而MVIEW还没有刷新的情况下, Oracle也会选择使用Query Rewrite来作查询, 在这种情况下, 查出来的数据可能是不准的. 下面我们来作一个例子来显示enforced与trusted的不同:</font>&nbsp;&nbsp; </font></p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p dir="ltr"><font face="Courier New">接着前面的例子,我们创建这样一个实体化视图:<br />CREATE MATERIALIZED VIEW MV_TABLE<br />ENABLE QUERY REWRITE<br />AS<br />SELECT U.USER#,COUNT(*) OBJCNT FROM USR_TABLE U,OBJ_TABLE O<br />WHERE U.USER#=O.USER#<br />group by u.user#</p>
<p><font face="arial,helvetica,sans-serif">接下来我们创建这样的两个约束:<br /></font>ALTER TABLE USR_TABLE ADD PRIMARY KEY (USER#) RELY DISABLE;<br />ALTER TABLE OBJ_TABLE ADD FOREIGN KEY (USER#) <br />&nbsp;&nbsp;&nbsp; REFERENCES USR_TABLE(USER#) RELY DISABLE;</p>
<p><font face="arial,helvetica,sans-serif">下接来创建一个USR_LEVEL的表, 如下所示:</font><br />CREATE TABLE USR_LEVLEL AS SELECT USER#, TRUNC(USER#/10) ULEVEL FROM USR_TABLE;</font></p>
</blockquote>
<p dir="ltr"><font face="Courier New">&nbsp; </font><font face="arial,helvetica,sans-serif">实验所需要的表都建起来了, 对三个表和一个MVIEW进行分析后, 下面来做测试:</font></p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p dir="ltr"><font face="Courier New">SQL&gt; SHOW PARAMETER QUERY_REWRITE</font></p>
<p dir="ltr"><font face="Courier New">NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUE<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />query_rewrite_enabled&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TRUE<br />query_rewrite_integrity&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TRUSTED</font></p>
<p dir="ltr"><font face="Courier New">SQL&gt; SET AUTOT ON EXP<br />SQL&gt; select l.ulevel,count(*) from usr_level l,obj_table o<br />&nbsp; 2&nbsp; where o.user#=l.user#<br />&nbsp; 3&nbsp; group by l.ulevel;</font></p>
<p dir="ltr"><font face="Courier New">&nbsp;&nbsp;&nbsp; ULEVEL&nbsp;&nbsp; COUNT(*)<br />&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 101456<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 136<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9939</font></p>
<p dir="ltr"><font face="Courier New">Execution Plan<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT STATEMENT Optimizer=CHOOSE (Cost=7 &#8230;<br />&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; SORT (GROUP BY) (Cost=7 &#8230;<br />&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; HASH JOIN (Cost=5 &#8230;<br />&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE ACCESS (FULL) OF &#8216;MV_TABLE&#8217; (Cost=2 &#8230;<br />&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE ACCESS (FULL) OF &#8216;USR_LEVEL&#8217; (Cost=2 &#8230;</font></p>
<p dir="ltr"><font face="Courier New">SQL&gt; ALTER SESSION SET QUERY_REWRITE_INTEGRITY=ENFORCED;</font></p>
<p dir="ltr"><font face="Courier New">Session altered.</font></p>
<p dir="ltr"><font face="Courier New">SQL&gt; select l.ulevel,count(*) from usr_level l,obj_table o<br />&nbsp; 2&nbsp; where o.user#=l.user#<br />&nbsp; 3&nbsp; group by l.ulevel;</font></p>
<p dir="ltr"><font face="Courier New">&nbsp;&nbsp;&nbsp; ULEVEL&nbsp;&nbsp; COUNT(*)<br />&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 101456<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 136<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9939</font></p>
<p dir="ltr"><font face="Courier New">Execution Plan<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT STATEMENT Optimizer=CHOOSE (Cost=3239 &#8230;<br />&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; SORT (GROUP BY) (Cost=3239 &#8230;<br />&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; HASH JOIN (Cost=50 &#8230;<br />&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE ACCESS (FULL) OF &#8216;USR_LEVEL&#8217; (Cost=2 &#8230;<br />&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TABLE ACCESS (FULL) OF &#8216;OBJ_TABLE&#8217; (Cost=47 &#8230;</font></p>
</blockquote>
<p dir="ltr">&nbsp;&nbsp;&nbsp; 通过对比Cost和Plan可以看出那个Plan更好.</p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_06.html" title="Query Rewrite的一般理解之六">Query Rewrite的一般理解之六</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_05.html" title="Query Rewrite的一般理解之五">Query Rewrite的一般理解之五</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_04.html" title="Query Rewrite的一般理解之四">Query Rewrite的一般理解之四</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_03.html" title="Query Rewrite的一般理解之三">Query Rewrite的一般理解之三</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_01.html" title="Query Rewrite的一般理解之一">Query Rewrite的一般理解之一</a> (0)</li><li>2007/03/09 -- <a href="http://www.anysql.net/oracle/star_in_mview.html" title="Oracle的实体化视图(MVIEW)的深入研究之三">Oracle的实体化视图(MVIEW)的深入研究之三</a> (0)</li><li>2007/03/08 -- <a href="http://www.anysql.net/oracle/improve_mv_refresh.html" title="Oracle的实体化视图(MVIEW)的深入研究之一">Oracle的实体化视图(MVIEW)的深入研究之一</a> (0)</li><li>2006/12/25 -- <a href="http://www.anysql.net/dba/column_type_mismatch.html" title="列类型和变量类型不一致引起的性能问题?">列类型和变量类型不一致引起的性能问题?</a> (2)</li><li>2006/10/11 -- <a href="http://www.anysql.net/oracle/olap_tuning_startransformation.html" title="数据库优化中什么是星型转换(Star Transform)?">数据库优化中什么是星型转换(Star Transform)?</a> (4)</li><li>2006/10/09 -- <a href="http://www.anysql.net/oracle/oracle_olap_dimension.html" title="利用维对象来优化数据仓库的高级技巧">利用维对象来优化数据仓库的高级技巧</a> (7)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/oracle/query_rewrite_02.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Query Rewrite的一般理解之一</title>
		<link>http://www.anysql.net/oracle/query_rewrite_01.html</link>
		<comments>http://www.anysql.net/oracle/query_rewrite_01.html#comments</comments>
		<pubDate>Sun, 15 Oct 2006 04:44:43 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Query Rewrite]]></category>
		<category><![CDATA[性能调整]]></category>
		<category><![CDATA[查询重写]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/query-rewrite%e7%9a%84%e4%b8%80%e8%88%ac%e7%90%86%e8%a7%a3%e4%b9%8b%e4%b8%80.html</guid>
		<description><![CDATA[&#160;&#160;&#160; Query Rewrite 在数据仓库是是一个非常有用的技术, Tom在&#60;&#60;Effective Oracle by Design&#62;&#62;一书中将实体化视图(MView)称为是数据仓库的索引, 这是再贴切不过的了, 在OLTP中当SELECT语句的所有的字段都在索引中时, Oracle可以不从表读数据, 而直接从索引中获得全部信息, 而Query Rewrite则是通过创建中间表, 让Oracle自动从创建的中间表读取数据, 而不需要从原表读取了, 这个中间表可以是预先join好的或预先计算好的中间结果. 他的使用就和一般的索引同理了, 虽然你指定的还是那个大表, 但oracle可以为你自动识别可以从那个&#34;数据仓库索引&#34;中读取数据. 下面我们可以来看一下最简单的例子: SQL&#62; CREATE TABLE DETAIL_TABLE&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160; 2&#160; AS SELECT OWNER,OBJECT_NAME FROM sys.dba_objects;&#160; Table created. SQL&#62; DESC DETAIL_TABLE&#160;Name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Null?&#160;&#160;&#160; Type&#160;&#160;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211;&#160;OWNER&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; VARCHAR2(30)&#160;OBJECT_NAME&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; VARCHAR2(128) SQL&#62; CREATE MATERIALIZED VIEW MID_TABLE ENABLE QUERY REWRITE&#160; 2&#160; AS&#160; 3&#160; SELECT [...]]]></description>
			<content:encoded><![CDATA[<p align="left">&nbsp;&nbsp;&nbsp; Query Rewrite 在数据仓库是是一个非常有用的技术, Tom在&lt;&lt;Effective Oracle by Design&gt;&gt;一书中将实体化视图(MView)称为是数据仓库的索引, 这是再贴切不过的了, 在OLTP中当SELECT语句的所有的字段都在索引中时, Oracle可以不从表读数据, 而直接从索引中获得全部信息, 而Query Rewrite则是通过创建中间表, 让Oracle自动从创建的中间表读取数据, 而不需要从原表读取了, 这个中间表可以是预先join好的或预先计算好的中间结果. 他的使用就和一般的索引同理了, 虽然你指定的还是那个大表, 但oracle可以为你自动识别可以从那个&quot;数据仓库索引&quot;中读取数据. 下面我们可以来看一下最简单的例子:</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p><font face="courier new,courier,monospace">SQL&gt; CREATE TABLE DETAIL_TABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; 2&nbsp; AS SELECT OWNER,OBJECT_NAME FROM sys.dba_objects;&nbsp;</p>
<p>Table created.</p>
<p>SQL&gt; DESC DETAIL_TABLE<br />&nbsp;Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Null?&nbsp;&nbsp;&nbsp; Type&nbsp;<br />&nbsp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211;<br />&nbsp;OWNER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(30)<br />&nbsp;OBJECT_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(128)</p>
<p>SQL&gt; CREATE MATERIALIZED VIEW MID_TABLE ENABLE QUERY REWRITE<br />&nbsp; 2&nbsp; AS<br />&nbsp; 3&nbsp; SELECT OWNER,COUNT(*) TABCNT FROM DETAIL_TABLE GROUP BY OWNER;</p>
<p>Materialized view created.</p>
<p>SQL&gt; DESC MID_TABLE<br />&nbsp;Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Null?&nbsp;&nbsp;&nbsp; Type<br />&nbsp;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211;<br />&nbsp;OWNER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(30)<br />&nbsp;TABCNT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER</font></p>
</blockquote>
<p><span id="more-81"></span></p>
<p dir="ltr">&nbsp;&nbsp; 现在假设DETAIL_TABLE是一个非常大的表, MID_TABLE是预先计算好的中间表, 我们来做一个查询测试一下, 要让Oracle使用Query Rewrite,首先要使用CBO,我已经对这个两个表作了分析, 然后将query_rewrite_enabled参数设为True,这个参数可以在session一级更改. 如:</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p dir="ltr"><font face="courier new,courier,monospace">SQL&gt; show parameter query_rewrite_enabled</p>
<p></font><font face="courier new,courier,monospace">NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUE<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;<br />query_rewrite_enabled&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FALSE</p>
<p>SQL&gt; SELECT&nbsp; OWNER,COUNT(*) FROM DETAIL_TABLE<br />&nbsp; 2&nbsp;&nbsp; WHERE OWNER=&#8217;SYSTEM&#8217; GROUP BY OWNER;</p>
<p></font><font face="courier new,courier,monospace">OWNER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COUNT(*)<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;-<br />SYSTEM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 406</p>
<p></font><font face="courier new,courier,monospace">Execution Plan<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT STATEMENT Optimizer=CHOOSE (Cost=4 &#8230;)<br />&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; SORT (GROUP BY NOSORT) (Cost=4 &#8230;)<br />&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; TABLE ACCESS (FULL) OF &#8216;DETAIL_TABLE&#8217; (Cost=4 &#8230;</p>
<p></font><font face="courier new,courier,monospace">SQL&gt; ALTER SESSION SET query_rewrite_enabled=TRUE;</p>
<p></font><font face="courier new,courier,monospace">Session altered.</p>
<p></font><font face="courier new,courier,monospace">SQL&gt; SELECT&nbsp; OWNER,COUNT(*) FROM DETAIL_TABLE<br />&nbsp; 2&nbsp; WHERE OWNER=&#8217;SYSTEM&#8217; GROUP BY OWNER;</p>
<p></font><font face="courier new,courier,monospace">OWNER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COUNT(*)<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;-<br />SYSTEM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 406</p>
<p></font><font face="courier new,courier,monospace">Execution Plan<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=8)<br />&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; TABLE ACCESS (FULL) OF &#8216;MID_TABLE&#8217; (Cost=2 Card=1 Bytes=8)</font></p>
</blockquote>
<p dir="ltr">&nbsp;&nbsp;&nbsp; 大家可以看一下上面两个同样的语句在query rewrite时启用和禁用时的plan的区别, 可以看到MID_TABLE的作用就象是一个索引. 除了Query_rewrite_enabled参数外, 还有一个参数query_rewrite_integrity会影响Query Rewrite的使用.</p>
<p dir="ltr">&nbsp;&nbsp;&nbsp; 在Document CD的Data Warehouse Guide中有对Query Rewrite的详细介绍, 对于DBA我强烈建议将这个文档看上三次.</p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_06.html" title="Query Rewrite的一般理解之六">Query Rewrite的一般理解之六</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_05.html" title="Query Rewrite的一般理解之五">Query Rewrite的一般理解之五</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_04.html" title="Query Rewrite的一般理解之四">Query Rewrite的一般理解之四</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_03.html" title="Query Rewrite的一般理解之三">Query Rewrite的一般理解之三</a> (0)</li><li>2006/10/14 -- <a href="http://www.anysql.net/oracle/query_rewrite_02.html" title="Query Rewrite的一般理解之二">Query Rewrite的一般理解之二</a> (0)</li><li>2007/03/09 -- <a href="http://www.anysql.net/oracle/star_in_mview.html" title="Oracle的实体化视图(MVIEW)的深入研究之三">Oracle的实体化视图(MVIEW)的深入研究之三</a> (0)</li><li>2007/03/08 -- <a href="http://www.anysql.net/oracle/improve_mv_refresh.html" title="Oracle的实体化视图(MVIEW)的深入研究之一">Oracle的实体化视图(MVIEW)的深入研究之一</a> (0)</li><li>2006/12/25 -- <a href="http://www.anysql.net/dba/column_type_mismatch.html" title="列类型和变量类型不一致引起的性能问题?">列类型和变量类型不一致引起的性能问题?</a> (2)</li><li>2006/10/11 -- <a href="http://www.anysql.net/oracle/olap_tuning_startransformation.html" title="数据库优化中什么是星型转换(Star Transform)?">数据库优化中什么是星型转换(Star Transform)?</a> (4)</li><li>2006/10/09 -- <a href="http://www.anysql.net/oracle/oracle_olap_dimension.html" title="利用维对象来优化数据仓库的高级技巧">利用维对象来优化数据仓库的高级技巧</a> (7)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/oracle/query_rewrite_01.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
