<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Liang&#039;s Blog</title>
	<atom:link href="http://lianggang.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://lianggang.wordpress.com</link>
	<description>DBA in action, conducting data on demand.</description>
	<lastBuildDate>Wed, 04 Jan 2012 06:41:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='lianggang.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Liang&#039;s Blog</title>
		<link>http://lianggang.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://lianggang.wordpress.com/osd.xml" title="Liang&#039;s Blog" />
	<atom:link rel='hub' href='http://lianggang.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Happy New Year 2012</title>
		<link>http://lianggang.wordpress.com/2012/01/04/happy-new-year-2012/</link>
		<comments>http://lianggang.wordpress.com/2012/01/04/happy-new-year-2012/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 06:40:42 +0000</pubDate>
		<dc:creator>lianggang</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://lianggang.wordpress.com/?p=231</guid>
		<description><![CDATA[Wrapping up the first working day in 2012, I want to say &#8220;Happy 2012&#8243; to everyone. Looking back in 2011, I am quite happy with the projects completed, new territory explored, books read, and more exercise I made. In 2012, ever changing world would accelerate its pace. This blog would change too, I would blog [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=231&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Wrapping up the first working day in 2012, I want to say &#8220;Happy 2012&#8243; to everyone. Looking back in 2011, I am quite happy with the projects completed, new territory explored, books read, and more exercise I made. In 2012, ever changing world would accelerate its pace. This blog would change too, I would blog more, technology, life, and thought. </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lianggang.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lianggang.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lianggang.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lianggang.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lianggang.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lianggang.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lianggang.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lianggang.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lianggang.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lianggang.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lianggang.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lianggang.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lianggang.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lianggang.wordpress.com/231/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=231&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lianggang.wordpress.com/2012/01/04/happy-new-year-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e8813ac9a163c955eba094996f63b6b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lianggang</media:title>
		</media:content>
	</item>
		<item>
		<title>Partitioning exchange between compressed and non-compressed tables with and without indexes</title>
		<link>http://lianggang.wordpress.com/2011/11/08/partitioning-exchange-between-compressed-and-non-compressed-tables-and-index/</link>
		<comments>http://lianggang.wordpress.com/2011/11/08/partitioning-exchange-between-compressed-and-non-compressed-tables-and-index/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 09:00:40 +0000</pubDate>
		<dc:creator>lianggang</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[oracle; partition exchange]]></category>

		<guid isPermaLink="false">http://lianggang.wordpress.com/?p=229</guid>
		<description><![CDATA[It might come to the time that you want to compress a large partitioned table one partition a time. Without indexes, you can exchange compressed standalone table into a non-compressed table; and Vice Versa. With indexes, you&#8217;d be careful about indexes compression attribute. If any index on either partitioned table or stand-alone table is compressed, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=229&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It might come to the time that you want to compress a large partitioned table one partition a time. Without indexes, you can exchange compressed standalone table into a non-compressed table; and Vice Versa. With indexes, you&#8217;d be careful about indexes compression attribute. If any index on either partitioned table or stand-alone table is compressed, you&#8217;d also be sure that indexes on the partner is compressed too. Moreover, you&#8217;d be sure the prefix degree of compress should be the same on both tables. </p>
<p>Preparation:<br />
create table liang_t1 ( cyear number, OWNER VARCHAR2(30), OBJECT_NAME VARCHAR2(128), SUBOBJECT_NAME VARCHAR2(30), OBJECT_ID NUMBER )<br />
 partition by range (cyear)<br />
 ( partition p2010 values less than  (2011),<br />
 partition p2011 values less than (2012));</p>
<p>insert into liang_t1 select &#8217;2010&#8242;, owner, object_name, subobject_name, object_id from dba_objects;<br />
insert into liang_t1 select &#8217;2011&#8242;, owner, object_name, subobject_name, object_id from dba_objects;<br />
Commit;</p>
<p>Case 1: without indexes, you can exchange compressed standalone table into a non-compressed table. </p>
<p>select table_name, partitioned, compression, compress_for from dba_tables where table_name = &#8216;LIANG_T1&#8242;;</p>
<p>TABLE_NAME                     PAR COMPRESS COMPRESS_FOR<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212; &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;<br />
LIANG_T1                       YES</p>
<p>select table_name, partition_name, compression, compress_for from dba_tab_partitions where table_name = &#8216;LIANG_T1&#8242;;</p>
<p>TABLE_NAME                     PARTITION_NAME                 COMPRESS COMPRESS_FOR<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;<br />
LIANG_T1                       P2010                          DISABLED<br />
LIANG_T1                       P2011                          DISABLED</p>
<p>create table liang_t1_comp compress for oltp as select * from liang_t1 partition (p2010) order by owner, object_name;</p>
<p>select table_name, partitioned, compression, compress_for from dba_tables where table_name = &#8216;LIANG_T1_COMP&#8217;;</p>
<p>TABLE_NAME                     PAR COMPRESS COMPRESS_FOR<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212; &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;<br />
LIANG_T1_COMP                  NO  ENABLED  OLTP</p>
<p>alter table liang_t1 exchange partition p2010 with table liang_t1_comp with validation;</p>
<p>Vola, you get a compressed partition into a non-compressed table. </p>
<p>select table_name, partitioned, compression, compress_for from dba_tables where table_name = &#8216;LIANG_T1_COMP&#8217;;</p>
<p>TABLE_NAME                     PAR COMPRESS COMPRESS_FOR<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212; &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;<br />
LIANG_T1_COMP                  NO  DISABLED</p>
<p>select table_name, partition_name, compression, compress_for from dba_tab_partitions where table_name = &#8216;LIANG_T1&#8242;;</p>
<p>TABLE_NAME                     PARTITION_NAME                 COMPRESS COMPRESS_FOR<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;<br />
LIANG_T1                       P2010                          ENABLED  OLTP<br />
LIANG_T1                       P2011                          DISABLED</p>
<p>You can exchange a compressed partition out with non-compressed table. </p>
<p>alter table liang_t1 exchange partition p2010 with table liang_t1_comp with validation;</p>
<p>Case 2: Partition exchange fails if one of exchange partner has compression indexes and the other does not. </p>
<p>create index idx_liang_t1_first3 on liang_t1 (cyear, owner, OBJECT_NAME) local;<br />
select index_name, partition_name, compression from dba_ind_partitions where index_name = &#8216;IDX_LIANG_T1_FIRST3&#8242;;</p>
<p>INDEX_NAME                     PARTITION_NAME                 COMPRESS<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8211;<br />
IDX_LIANG_T1_FIRST3            P2010                          DISABLED</p>
<p>IDX_LIANG_T1_FIRST3            P2011                          DISABLED</p>
<p>create index idx_liang_t1_comp_first3 on liang_t1_comp (cyear, owner, OBJECT_NAME) compress 1;</p>
<p>select index_name, compression, prefix_length from dba_indexes where index_name = &#8216;IDX_LIANG_T1_COMP_FIRST3&#8242;;</p>
<p>INDEX_NAME                     COMPRESS PREFIX_LENGTH<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;-<br />
IDX_LIANG_T1_COMP_FIRST3       ENABLED              1</p>
<p>alter table liang_t1 exchange partition p2010 with table liang_t1_comp including indexes with validation;</p>
<p>alter table liang_t1 exchange partition p2010 with table liang_t1_comp including indexes with validation<br />
                                                         *<br />
ERROR at line 1:<br />
ORA-28665: table and partition must have same compression attribute</p>
<p>Case 3: Partition exchange fails if one of exchange partner has compression indexes with different prefix degree. </p>
<p>drop index idx_liang_t1_first3;<br />
create index idx_liang_t1_first3 on liang_t1 (cyear, owner, OBJECT_NAME) compress 1 local;</p>
<p>drop index idx_liang_t1_comp_first3;<br />
create index idx_liang_t1_comp_first3 on liang_t1_comp (cyear, owner, OBJECT_NAME) compress 2;</p>
<p>alter table liang_t1 exchange partition p2010 with table liang_t1_comp including indexes with validation;<br />
alter table liang_t1 exchange partition p2010 with table liang_t1_comp including indexes with validation<br />
                                                         *<br />
ERROR at line 1:<br />
ORA-28665: table and partition must have same compression attribute</p>
<p>Case 4: Only both indexes are compressed, partition exchange &#8220;including indexes with validation&#8221; would succeed.</p>
<p>drop index idx_liang_t1_first3;<br />
create index idx_liang_t1_first3 on liang_t1 (cyear, owner, OBJECT_NAME) compress 1 local;</p>
<p>select index_name, compression, prefix_length from dba_indexes where index_name = &#8216;IDX_LIANG_T1_FIRST3&#8242;;</p>
<p>INDEX_NAME                     COMPRESS PREFIX_LENGTH<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;-<br />
IDX_LIANG_T1_FIRST3            ENABLED              1</p>
<p>drop index idx_liang_t1_comp_first3;</p>
<p>create index idx_liang_t1_comp_first3 on liang_t1_comp (cyear, owner, OBJECT_NAME) compress 1;</p>
<p>alter table liang_t1 exchange partition p2010 with table liang_t1_comp including indexes with validation;</p>
<p>Table altered.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lianggang.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lianggang.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lianggang.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lianggang.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lianggang.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lianggang.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lianggang.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lianggang.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lianggang.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lianggang.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lianggang.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lianggang.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lianggang.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lianggang.wordpress.com/229/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=229&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lianggang.wordpress.com/2011/11/08/partitioning-exchange-between-compressed-and-non-compressed-tables-and-index/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e8813ac9a163c955eba094996f63b6b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lianggang</media:title>
		</media:content>
	</item>
		<item>
		<title>Tiny tip &#8211; &#8220;clear logfile group&#8221; to create redo logs on Standby</title>
		<link>http://lianggang.wordpress.com/2010/12/03/tiny-tip-clear-logfile-group-to-create-redo-logs-on-standby/</link>
		<comments>http://lianggang.wordpress.com/2010/12/03/tiny-tip-clear-logfile-group-to-create-redo-logs-on-standby/#comments</comments>
		<pubDate>Fri, 03 Dec 2010 22:41:55 +0000</pubDate>
		<dc:creator>lianggang</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://lianggang.wordpress.com/?p=226</guid>
		<description><![CDATA[If the redo log files are missing from Standby, e.g. creating a standby from backup, you can just do &#8220;clear logfile group&#8221;. On standby DB, if you clear logfile group without log_file_name_convert being set, you will see SQL&#62; alter database clear logfile group 1; alter database clear logfile group 1 * ERROR at line 1: [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=226&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If the redo log files are missing from Standby, e.g. creating a standby from backup, you can just do &#8220;clear logfile group&#8221;. </p>
<p>On standby DB, if you clear logfile group without log_file_name_convert being set, you will see<br />
SQL&gt; alter database clear logfile group 1;<br />
alter database clear logfile group 1<br />
*<br />
ERROR at line 1:<br />
ORA-19527: physical standby redo log must be renamed<br />
ORA-00312: online log 1 thread 1:<br />
&#8216;/path/filename&#8217;</p>
<p>With the right log_file_name_convert setting, you will see</p>
<p>SQL&gt; alter database clear logfile group 1;<br />
Database altered.</p>
<p>Data files will be created on standby by Oracle.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lianggang.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lianggang.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lianggang.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lianggang.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lianggang.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lianggang.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lianggang.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lianggang.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lianggang.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lianggang.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lianggang.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lianggang.wordpress.com/226/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lianggang.wordpress.com/226/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lianggang.wordpress.com/226/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=226&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lianggang.wordpress.com/2010/12/03/tiny-tip-clear-logfile-group-to-create-redo-logs-on-standby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e8813ac9a163c955eba094996f63b6b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lianggang</media:title>
		</media:content>
	</item>
		<item>
		<title>Using bulk binds for fewer redo records</title>
		<link>http://lianggang.wordpress.com/2010/10/20/bulk-bindsinsert-with-fewer-redo-change-vectors/</link>
		<comments>http://lianggang.wordpress.com/2010/10/20/bulk-bindsinsert-with-fewer-redo-change-vectors/#comments</comments>
		<pubDate>Wed, 20 Oct 2010 16:47:14 +0000</pubDate>
		<dc:creator>lianggang</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://lianggang.wordpress.com/?p=220</guid>
		<description><![CDATA[Redo logs are made of redo records; each redo record is composed by redo change vectors, each of which describes a DB block level change. Insert with bulk binds, aka bulk insert, can boost your program&#8217;s performance by processing many rows from a cursor in one call instead of one row at a time. It [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=220&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Redo logs are made of redo records; each redo record is composed by redo change vectors, each of which describes a DB block level change. </p>
<p>Insert with bulk binds, aka bulk insert, can boost your program&#8217;s performance by processing many rows from a cursor in one call instead of one row at a time. It also generates fewer redo change vectors therefore less amount of redo logs records. </p>
<p>create table t1 (<br />
  a number,<br />
  b varchar2(10)<br />
);</p>
<p>[Case 1] Insert one row at a time. </p>
<p>DECLARE<br />
  v_Counter BINARY_INTEGER := 1;<br />
BEGIN<br />
  WHILE v_Counter &lt;= 10 LOOP<br />
    INSERT INTO t1 (a, b) VALUES (v_Counter, v_counter);<br />
    v_Counter := v_Counter + 1;<br />
  END LOOP;<br />
END;<br />
/<br />
commit;</p>
<p>I dump the redo logs about the changes, after finding redo log name and DBA information.<br />
ALTER SYSTEM DUMP LOGFILE &#039;/&#8230;/redolog-1554-1-1232324.arc&#039;  DBA MIN 1 39898 DBA MAX 1 39898;</p>
<p>What I see is 10 redo change records. 1 redo record per insert. I paste 1 of 10 here. </p>
<p>REDO RECORD &#8211; Thread:1 RBA: 0&#215;000612.0000014d.0140 LEN: 0x016c VLD: 0&#215;01<br />
&#8230;<br />
CHANGE #1 TYP:0 CLS:19 AFN:2 DBA:0&#215;00800099 OBJ:4294967295 SCN:0&#215;0000.00d3ccef SEQ:  1 OP:5.2 ENC:0<br />
&#8230;<br />
CHANGE #2 TYP:0 CLS:20 AFN:2 DBA:0x0081b92d OBJ:4294967295 SCN:0&#215;0000.00d3ccee SEQ:  3 OP:5.1 ENC:0<br />
&#8230;<br />
Tablespace Undo:  No<br />
             0&#215;00000000  prev ctl uba: 0x0081b92d.03bb.07<br />
..<br />
CHANGE #3 TYP:0 CLS: 1 AFN:1 DBA:0x00409bda OBJ:21674 SCN:0&#215;0000.00d3cd01 SEQ:  3 OP:11.2 ENC:0<br />
KTB Redo<br />
&#8230;<br />
null: &#8211;<br />
col  0: [ 2]  c1 02<br />
col  1: [ 1]  31</p>
<p>[Case 2] Bulk insert with 10 rows at a time. To get an individual redo log, I switch logfile first.</p>
<p>declare<br />
    type testnumberarray is table of number index by binary_integer;<br />
    type testchararray is table of varchar2(10) index by binary_integer;</p>
<p>    v_a testnumberarray;<br />
    v_b testchararray;</p>
<p>    cursor cu_cursor is select a,b from t1_copy; &#8212; (t1_copy has 10 records.)<br />
begin<br />
    open cu_cursor;</p>
<p>    loop<br />
        fetch cu_cursor bulk collect into v_a, v_b LIMIT 10;</p>
<p>         forall i in 1 .. v_a.count<br />
            insert into t1<br />
            values<br />
            ( v_a(i), v_b(i) );</p>
<p>        exit when cu_cursor%notfound;<br />
    end loop;<br />
    close cu_cursor;<br />
end;<br />
/</p>
<p>Then I dump the new redo log for the change to blocks. </p>
<p>REDO RECORD &#8211; Thread:1 RBA: 0x00061b.00000043.0140 LEN: 0x01dc VLD: 0&#215;01<br />
&#8230;<br />
CHANGE #1 TYP:0 CLS:23 AFN:2 DBA:0x008000b9 OBJ:4294967295 SCN:0&#215;0000.00d41e1a SEQ:  1 OP:5.2 ENC:0<br />
&#8230;<br />
CHANGE #2 TYP:0 CLS:24 AFN:2 DBA:0x0080c891 OBJ:4294967295 SCN:0&#215;0000.00d41e19 SEQ:  1 OP:5.1 ENC:0<br />
&#8230;<br />
KTB Redo<br />
&#8230;<br />
tabn: 0 lock: 0 nrow: 10<br />
slot[0]: 0<br />
slot[1]: 1<br />
slot[2]: 2<br />
slot[3]: 3<br />
slot[4]: 4<br />
slot[5]: 5<br />
slot[6]: 6<br />
slot[7]: 7<br />
slot[8]: 8<br />
slot[9]: 9<br />
CHANGE #3 TYP:0 CLS: 1 AFN:1 DBA:0x00409bda OBJ:21691 SCN:0&#215;0000.00d41e38 SEQ:  3 OP:11.11 ENC:0<br />
KTB Redo<br />
&#8230;<br />
tabn: 0 lock: 1 nrow: 10<br />
slot[0]: 0<br />
tl: 8 fb: &#8211;H-FL&#8211; lb: 0&#215;0  cc: 2<br />
col  0: [ 2]  c1 02<br />
col  1: [ 1]  31<br />
slot[1]: 1<br />
tl: 8 fb: &#8211;H-FL&#8211; lb: 0&#215;0  cc: 2<br />
col  0: [ 2]  c1 03<br />
col  1: [ 1]  32<br />
slot[2]: 2<br />
tl: 8 fb: &#8211;H-FL&#8211; lb: 0&#215;0  cc: 2<br />
col  0: [ 2]  c1 04<br />
col  1: [ 1]  33<br />
slot[3]: 3<br />
tl: 8 fb: &#8211;H-FL&#8211; lb: 0&#215;0  cc: 2<br />
col  0: [ 2]  c1 05<br />
col  1: [ 1]  34<br />
slot[4]: 4<br />
tl: 8 fb: &#8211;H-FL&#8211; lb: 0&#215;0  cc: 2<br />
col  0: [ 2]  c1 06<br />
col  1: [ 1]  35<br />
slot[5]: 5<br />
tl: 8 fb: &#8211;H-FL&#8211; lb: 0&#215;0  cc: 2<br />
col  0: [ 2]  c1 07<br />
col  1: [ 1]  36<br />
slot[6]: 6<br />
tl: 8 fb: &#8211;H-FL&#8211; lb: 0&#215;0  cc: 2<br />
col  0: [ 2]  c1 08<br />
col  1: [ 1]  37<br />
slot[7]: 7<br />
tl: 8 fb: &#8211;H-FL&#8211; lb: 0&#215;0  cc: 2<br />
col  0: [ 2]  c1 09<br />
col  1: [ 1]  38<br />
slot[8]: 8<br />
tl: 8 fb: &#8211;H-FL&#8211; lb: 0&#215;0  cc: 2<br />
col  0: [ 2]  c1 0a<br />
col  1: [ 1]  39<br />
slot[9]: 9<br />
tl: 9 fb: &#8211;H-FL&#8211; lb: 0&#215;0  cc: 2<br />
col  0: [ 2]  c1 0b<br />
col  1: [ 2]  31 30<br />
END OF REDO DUMP</p>
<p>With bulk binds, Oracle generates 1 redo change records for all 10 rows, since only 1 insert sql is fired. As an result, given the same data to insert, with bulk binds generates much less amount of redo logs.  </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lianggang.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lianggang.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lianggang.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lianggang.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lianggang.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lianggang.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lianggang.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lianggang.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lianggang.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lianggang.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lianggang.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lianggang.wordpress.com/220/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lianggang.wordpress.com/220/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lianggang.wordpress.com/220/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=220&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lianggang.wordpress.com/2010/10/20/bulk-bindsinsert-with-fewer-redo-change-vectors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e8813ac9a163c955eba094996f63b6b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lianggang</media:title>
		</media:content>
	</item>
		<item>
		<title>My bloginality &#8211; INTP</title>
		<link>http://lianggang.wordpress.com/2010/10/15/my-bloginality-intp/</link>
		<comments>http://lianggang.wordpress.com/2010/10/15/my-bloginality-intp/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 23:39:41 +0000</pubDate>
		<dc:creator>lianggang</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://lianggang.wordpress.com/?p=218</guid>
		<description><![CDATA[As an INTP, you are Introverted, iNtuitive, Thinking, Perceiving. This makes your primary focus on Introverted Thinking with an Extraverted Intution. This is defined as a NT personality, which is part of Carl Jung&#8217;s Rational (Knowledge Seeking) type, and more specifically the Architect or Thinker. As a weblogger, you might not be as concerned about [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=218&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As an INTP, you are Introverted, iNtuitive, Thinking, Perceiving.<br />
This makes your primary focus on Introverted Thinking with an Extraverted Intution. </p>
<p>This is defined as a NT personality, which is part of Carl Jung&#8217;s Rational (Knowledge Seeking) type, and more specifically the Architect or Thinker.</p>
<p>As a weblogger, you might not be as concerned about popularity, but more with the ideas and theories that you strive to understand. Because routines aren&#8217;t your strong point, you might be more likely to work on the concept of how to do a blog, but not be as excited to keep it up.</p>
<p>http://bloginality.love-productions.com/index2.php</p>
<p>So it is said. &#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lianggang.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lianggang.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lianggang.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lianggang.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lianggang.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lianggang.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lianggang.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lianggang.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lianggang.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lianggang.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lianggang.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lianggang.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lianggang.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lianggang.wordpress.com/218/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=218&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lianggang.wordpress.com/2010/10/15/my-bloginality-intp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e8813ac9a163c955eba094996f63b6b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lianggang</media:title>
		</media:content>
	</item>
		<item>
		<title>Netflix sharing &#8220;Availabile-Network Partition Tolerant&#8221; Storage practice</title>
		<link>http://lianggang.wordpress.com/2010/10/15/netflix-sharing-availabile-network-partition-tolerant-storage-practice/</link>
		<comments>http://lianggang.wordpress.com/2010/10/15/netflix-sharing-availabile-network-partition-tolerant-storage-practice/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 07:04:46 +0000</pubDate>
		<dc:creator>lianggang</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://lianggang.wordpress.com/?p=212</guid>
		<description><![CDATA[In May, I read the news that Netflix had been using Amazon Web Service for a year. Now, in October, Sid Anand from Netflix revealed &#8220;Netflix&#8217;s transition to high-availability storage system&#8221; practice. The paper has 2 attractive sections to me. 1. eBay&#8217;s best practice to achieve &#8220;Availabile-Network Partition Tolerant&#8221; (AP) with Oracle. 2. Netflix&#8217;s Best [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=212&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In May, I read the news that <a href="http://www.zdnet.com/blog/btl/netflix-migrating-more-infrastructure-to-amazon-web-services/34178">Netflix had been using Amazon Web Service</a> for a year.  Now, in October, Sid Anand from Netflix revealed &#8220;<a href="https://docs.google.com/viewer?a=v&amp;pid=sites&amp;srcid=ZGVmYXVsdGRvbWFpbnxwcmFjdGljYWxjbG91ZGNvbXB1dGluZ3xneDo0OWM2N2YwM2Q2OTAxMDZm&amp;pli=1">Netflix&#8217;s transition to high-availability storage system</a>&#8221; practice.  The paper has 2 attractive sections to me.<br />
1. eBay&#8217;s best practice to achieve  &#8220;Availabile-Network Partition Tolerant&#8221; (AP)  with Oracle.<br />
2. Netflix&#8217;s Best practice of &#8220;leaving RDBMS behind&#8221; and on SimpleDB. </p>
<p>Good stuff. </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lianggang.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lianggang.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lianggang.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lianggang.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lianggang.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lianggang.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lianggang.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lianggang.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lianggang.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lianggang.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lianggang.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lianggang.wordpress.com/212/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lianggang.wordpress.com/212/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lianggang.wordpress.com/212/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=212&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lianggang.wordpress.com/2010/10/15/netflix-sharing-availabile-network-partition-tolerant-storage-practice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e8813ac9a163c955eba094996f63b6b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lianggang</media:title>
		</media:content>
	</item>
		<item>
		<title>Load hinted SQL execution plan into SQL Plan Baselines &#8211; 11g</title>
		<link>http://lianggang.wordpress.com/2010/10/13/load-hinted-sql-execution-plan-into-sql-plan-baselines-11g/</link>
		<comments>http://lianggang.wordpress.com/2010/10/13/load-hinted-sql-execution-plan-into-sql-plan-baselines-11g/#comments</comments>
		<pubDate>Wed, 13 Oct 2010 08:32:00 +0000</pubDate>
		<dc:creator>lianggang</dc:creator>
				<category><![CDATA[Oracle RDBMS]]></category>

		<guid isPermaLink="false">http://lianggang.wordpress.com/?p=198</guid>
		<description><![CDATA[In 11g, I like 11g&#8217;s SQL plan management feature a lot. It comes handy when I need a good execution plan to correct CBO misbehavior. I can just load existing better SQL execution plans from cache, awr, SQL profile into SQL Plan Baseline if they exist, accept them, fix them if needed, instruct Oracle sessions [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=198&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In 11g, I like 11g&#8217;s SQL plan management feature a lot. It comes handy when I need a good execution plan to correct CBO misbehavior. I can just load existing better SQL execution plans from cache, awr, SQL profile into SQL Plan Baseline if they exist, accept them, fix them if needed, instruct Oracle sessions to use them. </p>
<p>It is not always the case that an ideal execution plan already exists somewhere in database. During a production firefight, I like to tune  the problematic query with SQL hints, get a good execution plan, and then use this good plan for the problematic query. It is tricky because original query and tuned query with hints are different SQL, having different SQL ID e.g. In 9i and 10g, we tweak stored outlines to achieve; in 11g, it is actually more straightforward using dbms_spm. This is how to do it.</p>
<p>1. Get the sql_handle for original SQL.<br />
If no baseline exists before, you create one  for the original SQL from cache.</p>
<p>var v_out number ;<br />
exec :v_out:= dbms_spm.load_plans_from_cursor_cache(<br />
sql_id =&gt; &#8216;&amp;original_sql_id&#8217;,<br />
plan_hash_value =&gt; &#8216;&amp;original_plan_hash_value&#8217; ); </p>
<p>select sql_text, sql_handle, plan_name, enabled, accepted from dba_sql_plan_baselines;</p>
<p>2. Tune the original query using right hints. Execute hinted SQL. Find SQL_ID and PLAN_HASH_VALUE for the hinted SQL statements.<br />
Validate the plan as an efficient plan. </p>
<p>3. Associate the hinted execution plan to the original sql_handle.</p>
<p>var v_out number<br />
exec :v_out := dbms_spm.load_plans_from_cursor_cache(<br />
sql_id =&gt; &#8216;&amp;HINTED_sql_id&#8217;,<br />
plan_hash_value =&gt; &#8216;&amp;HINTED_plan_hash_value&#8217;,<br />
sql_handle =&gt; &#8216;&amp;sql_handle_for_ORIGINAL_sql&#8217;); </p>
<p>select sql_text, sql_handle, plan_name, enabled, accepted from dba_sql_plan_baselines;</p>
<p>4. Check now, you can see 2 execution plans for the same SQL. Drop the old, inefficient plans.</p>
<p>var v_out number<br />
exec :v_out :=DBMS_SPM.DROP_SQL_PLAN_BASELINE (&#8216;&amp;original_sql_handle&#8217;,'&amp;original_plan_name&#8217;); </p>
<p>Done.  Please check out a demo in the comments. </p>
<p>As I know, people still tweak stored outlines with hints to get a sql execution plan needed. Here is a good post about <a href="http://www.pontis.biz/resources/articles/outlines_replace.php">tweaking stored outline from Paul Tabashov</a>. In 11g release 2, you can keep playing with stored outline, at the same time, use sql plan baseline in action. You just need to load tweaked stored outlines into SQL baselines using dbms_spm.migrate_stored_outline. </p>
<p>http://download.oracle.com/docs/cd/E11882_01/appdev.112/e16760/d_spm.htm#ARPLS72437</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lianggang.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lianggang.wordpress.com/198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lianggang.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lianggang.wordpress.com/198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lianggang.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lianggang.wordpress.com/198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lianggang.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lianggang.wordpress.com/198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lianggang.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lianggang.wordpress.com/198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lianggang.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lianggang.wordpress.com/198/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lianggang.wordpress.com/198/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lianggang.wordpress.com/198/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=198&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lianggang.wordpress.com/2010/10/13/load-hinted-sql-execution-plan-into-sql-plan-baselines-11g/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e8813ac9a163c955eba094996f63b6b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lianggang</media:title>
		</media:content>
	</item>
		<item>
		<title>Manual SQL execution plan loading into SQL baseline &#8211; part 2 &#8211; from cursor cache</title>
		<link>http://lianggang.wordpress.com/2010/05/21/manual-sql-execution-plan-loading-into-sql-baseline-part-2-from-cursor-cache/</link>
		<comments>http://lianggang.wordpress.com/2010/05/21/manual-sql-execution-plan-loading-into-sql-baseline-part-2-from-cursor-cache/#comments</comments>
		<pubDate>Fri, 21 May 2010 06:16:58 +0000</pubDate>
		<dc:creator>lianggang</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://lianggang.wordpress.com/?p=191</guid>
		<description><![CDATA[Manual SQL execution plan loading into SQL baseline from cursor cache If an execution plan is in cursor cache, you can to load it into sql plan baseline using dbms_spm.load_plans_from_cursor_cache. You can load a sql plan associated with sql id. SQL&#62; set serveroutput on declare v_int pls_integer; begin v_int := dbms_spm.load_plans_from_cursor_cache ( sql_id =&#62; &#8216;&#38;sql_id&#8217;, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=191&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Manual SQL execution plan loading into SQL baseline from cursor cache </p>
<p>If an execution plan is in cursor cache, you can to load it into sql plan baseline using dbms_spm.load_plans_from_cursor_cache. </p>
<p>You can load a sql plan associated with sql id.<br />
SQL&gt;<br />
set serveroutput on<br />
declare<br />
	v_int pls_integer;<br />
begin<br />
	v_int := dbms_spm.load_plans_from_cursor_cache (<br />
		sql_id =&gt; &#8216;&amp;sql_id&#8217;,<br />
		plan_hash_value =&gt; &#8216;&amp;sql_plan_hash_value&#8217;,<br />
		fixed =&gt; &#8216;NO&#8217;,<br />
		enabled =&gt; &#8216;YES&#8217;);<br />
		DBMS_OUTPUT.PUT_line(v_int);<br />
end;<br />
/<br />
or if you prefer loading plans of matching SQL_TEXT,<br />
SQL&gt;<br />
set serveroutput on<br />
declare<br />
	v_int pls_integer;<br />
begin<br />
	v_int := dbms_spm.load_plans_from_cursor_cache (<br />
		attribute_name  =&gt; &#8216;SQL_TEXT&#8217;,<br />
		attribute_value =&gt; &#8216;SELECT%FROM ABC%&#8217;,<br />
		fixed =&gt; &#8216;NO&#8217;,<br />
		enabled =&gt; &#8216;YES&#8217;);<br />
		DBMS_OUTPUT.PUT_line(v_int);<br />
end;<br />
/</p>
<p>Next step is to check whether a SQL plan is in use.<br />
SQL&gt;<br />
select sql_id, plan_hash_value, sql_plan_baseline,executions, sql_text<br />
from v$sql<br />
where sql_id = &#8216;&amp;sql_id&#8217;;<br />
or<br />
SQL&gt;<br />
select sql_handle, plan_name, enabled, accepted, fixed, origin,<br />
        to_char(created, &#8216;YYYY/MM/DD HH24:MI:SS&#8217;) created<br />
from dba_sql_plan_baselines sqlbase, v$sql sql<br />
where sql.sql_id = &#8216;&amp;sql_id&#8217; and sqlbase.plan_name = sql.sql_plan_baseline;</p>
<p>If there are multiple plans in baseline as accepted, you can instruct Optimizer always use a plan by marking its attribute FIXED to &#8220;YES&#8221;. When Optimizer see a fixed plan, it will choose it and ignore other accepted plans even if they might have lower cost. If there are more than one fixed plan, optimizer will choose among them. </p>
<p>Here is how.<br />
SQL&gt;<br />
declare<br />
	v_int binary_integer;<br />
begin<br />
	v_int := dbms_spm.alter_sql_plan_baseline(<br />
		sql_handle =&gt;&#8217;&amp;sql_handle&#8217;,<br />
		plan_name=&gt;&#8217;&amp;plan_name&#8217;,<br />
		attribute_name=&gt;&#8217;fixed&#8217;,<br />
		attribute_value=&gt;&#8217;YES&#8217;);<br />
	DBMS_OUTPUT.PUT_line(v_int);<br />
end;<br />
/</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lianggang.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lianggang.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lianggang.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lianggang.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lianggang.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lianggang.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lianggang.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lianggang.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lianggang.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lianggang.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lianggang.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lianggang.wordpress.com/191/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lianggang.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lianggang.wordpress.com/191/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=191&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lianggang.wordpress.com/2010/05/21/manual-sql-execution-plan-loading-into-sql-baseline-part-2-from-cursor-cache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e8813ac9a163c955eba094996f63b6b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lianggang</media:title>
		</media:content>
	</item>
		<item>
		<title>Manual SQL execution plan loading into SQL baseline &#8211; part 1 &#8211; from AWR or SQL Tuning Set</title>
		<link>http://lianggang.wordpress.com/2010/05/20/manual-sql-execution-plan-loading-into-sql-baseline-part-1/</link>
		<comments>http://lianggang.wordpress.com/2010/05/20/manual-sql-execution-plan-loading-into-sql-baseline-part-1/#comments</comments>
		<pubDate>Thu, 20 May 2010 03:56:40 +0000</pubDate>
		<dc:creator>lianggang</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://lianggang.wordpress.com/?p=188</guid>
		<description><![CDATA[Manual SQL execution plan loading into SQL baseline from AWR or SQL Tuning Set In 11g, manually loading existing SQL plans as SQL plan baseline can help stabilize sql query performance. Existing plan can be loaded from AWR/SQL tuning set or from Cursor cache. Here let us load plans from AWR and SQL tuning set; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=188&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Manual SQL execution plan loading into SQL baseline from AWR or SQL Tuning Set</p>
<p>In 11g, manually loading existing SQL plans as SQL plan baseline can help stabilize sql query performance. Existing plan can be loaded from AWR/SQL tuning set or from Cursor cache. Here let us load plans from AWR and SQL tuning set; later, we visit how to load from cursor cache.</p>
<p>If a SQL tuning set with a good execution plan already exists, we can skip step 1 and load plans into SQL baseline using DBMS_SPM.LOAD_PLANS_FROM_SQLSET function. If we have to load a execution plan in AWR, we need first create a SQL tuning set for the query and then load it into SQL baseline.</p>
<p>Step 1: Create SQL tuning set (SQLSET) from AWR.<br />
SQL&gt; exec dbms_sqltune.create_sqlset(<br />
		sqlset_name =&gt; &#8216;sql_tuning_set_name&#8217;,<br />
		description =&gt; &#8216;sqlset descriptions&#8217;);</p>
<p>SQL&gt;<br />
declare<br />
 ref_cur DBMS_SQLTUNE.SQLSET_CURSOR;<br />
begin<br />
open ref_cur for<br />
	select VALUE(p) from table(<br />
		DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY( &amp;begin_snap_id, &amp;end_snap_id,<br />
		basic_filter=&gt;&#8217;sql_id=&#8221;&amp;sql_id&#8221;&#8217;,<br />
		attribute_list =&gt;&#8217;ALL&#8217;)) p;<br />
	DBMS_SQLTUNE.LOAD_SQLSET(&#8216;sql_tuning_set_name&#8217;, ref_cur);<br />
end;<br />
/</p>
<p>basic_filter is a SQL predicate to filter the SQL from the workload repository defined on attributes of the SQLSET_ROW.<br />
We use sql_id and/or plan_hash_value here. </p>
<p>SQL&gt;<br />
declare<br />
 ref_cur DBMS_SQLTUNE.SQLSET_CURSOR;<br />
begin<br />
open ref_cur for<br />
	select VALUE(p) from table(<br />
		DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY( &amp;begin_snap_id, &amp;end_snap_id,<br />
		basic_filter=&gt;&#8217;sql_id=&#8221;&amp;sql_id&#8221; and plan_hash_value=&#8221;&amp;sql_plan_hash_value&#8221;&#8217;,<br />
		attribute_list =&gt;&#8217;ALL&#8217;)) p;<br />
	DBMS_SQLTUNE.LOAD_SQLSET(&#8216;sql_tuning_set_name&#8217;, ref_cur);<br />
end;<br />
/</p>
<p>Check out in SQLSET<br />
SQL&gt;<br />
select * from table(dbms_xplan.display_sqlset(&#8216;sql_tuning_set_name&#8217;,'&amp;sql_id&#8217;));</p>
<p>Step 2: Load SQL execution plans from SQL set into SQL baseline.</p>
<p>set serveroutput on<br />
declare<br />
	v_int pls_integer;<br />
begin<br />
	v_int := dbms_spm.load_plans_from_sqlset (<br />
		sqlset_name =&gt; &#8216;sql_tuning_set_name&#8217;,<br />
		sqlset_owner =&gt; &#8216;SYS&#8217;,<br />
		basic_filter =&gt; &#8216;sql_id=&#8221;&amp;sql_id&#8221; and plan_hash_value =&#8221;&amp;sql_plan_hash_value&#8221;&#8217;,<br />
		fixed =&gt; &#8216;NO&#8217;,<br />
		enabled =&gt; &#8216;YES&#8217;);<br />
		DBMS_OUTPUT.PUT_line(v_int);<br />
end;<br />
/</p>
<p>basic_filter is used here to filter out only qualifying plans. It can take the form of any WHERE clause predicate that can specified against the view DBA_SQLSET_STATEMENTS. </p>
<p>For details, please visit  </p>
<p>http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_sqltun.htm#CACJHDDC</p>
<p>http://download-west.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_spm.htm#CACBCAGD</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lianggang.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lianggang.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lianggang.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lianggang.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lianggang.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lianggang.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lianggang.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lianggang.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lianggang.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lianggang.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lianggang.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lianggang.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lianggang.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lianggang.wordpress.com/188/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=188&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lianggang.wordpress.com/2010/05/20/manual-sql-execution-plan-loading-into-sql-baseline-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e8813ac9a163c955eba094996f63b6b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lianggang</media:title>
		</media:content>
	</item>
		<item>
		<title>Things I like or don&#8217;t like about iPad</title>
		<link>http://lianggang.wordpress.com/2010/05/14/things-i-like-or-dont-like-about-ipad/</link>
		<comments>http://lianggang.wordpress.com/2010/05/14/things-i-like-or-dont-like-about-ipad/#comments</comments>
		<pubDate>Fri, 14 May 2010 08:05:18 +0000</pubDate>
		<dc:creator>lianggang</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://lianggang.wordpress.com/?p=181</guid>
		<description><![CDATA[What I like about iPad most, Kids friendly: Books with color, video, sound, actions, and more. Education games with feedbacks. These are available on PC, but iPad makes it easy for Kids to reach. Simplicity of UI: Even my 1 year old can flip photos, play simple games on iPad as soon as touch it. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=181&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>What I like about iPad most,<br />
<strong>Kids friendly:</strong> Books with color, video, sound, actions, and more. Education games with feedbacks. These are available on PC, but iPad makes it easy for Kids to reach.<br />
<strong>Simplicity of UI: </strong>Even my 1 year old can flip photos, play simple games on iPad as soon as touch it.<br />
<strong>Apple style:</strong> Everyone has own take on what Apple style means. Apple wins me big time on consumer electronics, ipod, iphone, ipad, with its simplicity, functionality.</p>
<p>What I think iPad does not do well,<br />
<strong>Weight: </strong>I&#8217;d love to use iPad as a e-reader. But it is too heavy to hold for meaningful long as we can do to a book or a good e-reader.<br />
<strong>Openness: </strong>App store module is not that friendly. Can you imagine if you write a program on windows and you have to get Microsoft&#8217;s okay to sale. Adobe flash is just an example. Internet has been there long before iPad. Given time, flash could become less favorable due to this; but it is not Adobe alone but general flash content providers and consumers feel like not respected. That is a sizable population.<br />
<strong>Productivity support: </strong>Yes, iPad is for fun, for consuming Internet/photo/movies/music. When it comes to produce documents/edit file, it is painful. Even Internet experience is wedged when use safari. Safari is far less popular to a website when comes to visitor volume currently. As a result, websites might have not even tested on Sarafi and their contents can not be displayed correctly. </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lianggang.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lianggang.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lianggang.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lianggang.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/lianggang.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/lianggang.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/lianggang.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/lianggang.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lianggang.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lianggang.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lianggang.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lianggang.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lianggang.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lianggang.wordpress.com/181/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lianggang.wordpress.com&amp;blog=7843352&amp;post=181&amp;subd=lianggang&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://lianggang.wordpress.com/2010/05/14/things-i-like-or-dont-like-about-ipad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e8813ac9a163c955eba094996f63b6b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">lianggang</media:title>
		</media:content>
	</item>
	</channel>
</rss>
