<?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"
	>

<channel>
	<title>SingleQuery.com</title>
	<atom:link href="http://www.singlequery.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.singlequery.com</link>
	<description>One is All You Need</description>
	<pubDate>Mon, 21 Jul 2008 18:46:59 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>Using Ajax to populate Apex items on the fly</title>
		<link>http://www.singlequery.com/2008/07/using-ajax-to-populate-apex-items-on-the-fly/</link>
		<comments>http://www.singlequery.com/2008/07/using-ajax-to-populate-apex-items-on-the-fly/#comments</comments>
		<pubDate>Mon, 21 Jul 2008 17:56:23 +0000</pubDate>
		<dc:creator>Sam Khalaf</dc:creator>
		
		<category><![CDATA[APEX]]></category>

		<guid isPermaLink="false">http://www.singlequery.com/?p=164</guid>
		<description><![CDATA[ Overview

In this example, we will demonstrate how Ajax can be use to efficiently populate a select list item in an Apex page on the fly “at run time”. Of course, this can be also done by using some simple JavaScript code BUT Ajax will be more efficient because it does not require reloading the whole Apex page [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="center;"><span style="Times New Roman;"> </span><strong><span style="14pt"><span style="Times New Roman;">Overview</span></span></strong></p>
<p class="MsoNormal" style="0in 0in 0pt"><strong></strong></p>
<p class="MsoNormal" style="0in 0in 0pt"><span style="Times New Roman;">In this example, we will demonstrate how Ajax can be use to efficiently populate a select list item in an Apex page on the fly “at run time”. Of course, this can be also done by using some simple JavaScript code <strong>BUT</strong> Ajax will be more efficient because it does not require reloading the whole Apex page every time the JavaScript event is fired. On the other hand, using just JavaScript will require the entire Apex page to reload, which is not a good practice in today’s dynamic world. </span></p>
<p class="MsoNormal" style="0in 0in 0pt"><span style="Times New Roman;">Imagine an Apex form that contains 100 items (Text fields, Select lists, Radio buttons, Check boxes), and that there is a JavaScript event defined for one item. The event dynamically sets the value of another item in that form. Every time this event is fired, Apex will need to reload the entire form and re-populate all fields with their old values (if any); this can be time consuming and may also cause some issues “side effects”.</span></p>
<p class="MsoNormal" style="0in 0in 0pt"><span style="Times New Roman;"> </span><strong><span style="14pt"><span style="Times New Roman;">Example:</span></span></strong></p>
<p class="MsoNormal" style="0in 0in 0pt"><span style="Times New Roman;">Consider the following sample table that basically contains data about movies, and categorize movies into different Genres.</span></p>
<table class="MsoNormalTable" style="1184;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr style="yes;">
<td style="0in;" valign="bottom">
<p class="MsoNormal" style="auto;" align="center"><span style="black;"><span style="small;"><span style="Times New Roman;"> </span></span></span></p>
</td>
<td style="solid #AAAAAA .75pt" valign="bottom">
<p class="MsoNormal" style="center" align="center"><span style="small;"><span style="Times New Roman;"><strong><span style="0.75pt;"><span style="black;">MOVIE_ID    </span></span></strong></span></span></p>
</td>
<td style="solid #AAAAAA .75pt" valign="bottom">
<p class="MsoNormal" style="center" align="center"><span style="small;"><span style="Times New Roman;"><strong><span style="0.75pt;"><span style="black;">  GENRE_ID   </span></span></strong></span></span></p>
</td>
<td style="solid #AAAAAA .75pt" valign="bottom">
<p class="MsoNormal" style="center" align="center"><span style="small;"><span style="Times New Roman;"><strong><span style="0.75pt;"><span style="black;">  GENRE     </span></span></strong></span></span></p>
</td>
<td style="solid #AAAAAA .75pt" valign="bottom">
<p class="MsoNormal" style="left;"><span style="small;"><span style="Times New Roman;"><strong><span style="0.75pt;"><span style="black;">MOVIE_NAME</span></span></strong></span></span></p>
</td>
</tr>
<tr style="1;">
<td style="0in;"> </td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;" align="center"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;">1</span></span></span></span></p>
</td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;" align="center"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;">1</span></span></span></span></p>
</td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;" align="center"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;">Action</span></span></span></span></p>
</td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;"> Romeo Must Die</span></span></span></span></p>
</td>
</tr>
<tr style="2;">
<td style="0in;"> </td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;" align="center"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;">2</span></span></span></span></p>
</td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;" align="center"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;">2</span></span></span></span></p>
</td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;" align="center"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;">Comedy</span></span></span></span></p>
</td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;"> Meet Dave</span></span></span></span></p>
</td>
</tr>
<tr style="3;">
<td style="0in;"> </td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;" align="center"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;">3</span></span></span></span></p>
</td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;" align="center"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;">2</span></span></span></span></p>
</td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;" align="center"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;">Comedy</span></span></span></span></p>
</td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="0in 0in 0pt"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;"> Kit Kittredge an American Girl</span></span></span></span></p>
</td>
</tr>
<tr style="4;">
<td style="0in;"> </td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;" align="center"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;">4</span></span></span></span></p>
</td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;" align="center"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;">1</span></span></span></span></p>
</td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;" align="center"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;">Action</span></span></span></span></p>
</td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="0in 0in 0pt"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;"><span style="yes;"> </span>Wanted</span></span></span></span></p>
</td>
</tr>
<tr style="5;">
<td style="0in;"> </td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;" align="center"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;">5</span></span></span></span></p>
</td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;" align="center"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;">3</span></span></span></span></p>
</td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;" align="center"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;">Drama</span></span></span></span></p>
</td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="0in 0in 0pt"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;"> Hancock</span></span></span></span></p>
</td>
</tr>
<tr style="yes;">
<td style="0in;"> </td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;" align="center"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;">6</span></span></span></span></p>
</td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;" align="center"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;">1</span></span></span></span></p>
</td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="auto;" align="center"><span style="'Arial','sans-serif';"><span style="small;"><span style="Times New Roman;"><span style="black;">Action</span></span></span></span></p>
</td>
<td style="solid #CCCCCC .75pt">
<p class="MsoNormal" style="0in 0in 0pt"><span style="'Arial','sans-serif';"><span style="black;"><span style="Times New Roman;"> Dark Knight</span></span></span></p>
</td>
</tr>
</tbody>
</table>
<p>     <span style="AR-SA;">row(s) 1 - 6 of 6 </span></p>
<p class="MsoNormal" style="0in 0in 0pt"><span style="Times New Roman;"> </span><strong><span style="14pt"><span style="Times New Roman;">Requirements:</span></span></strong></p>
<p class="MsoNormal" style="0in 0in 0pt"><span style="Times New Roman;"> </span><span style="Times New Roman;">We need to create a simple Apex page with the following items:<br />
</span><span style="Times New Roman;"><span style="Ignore"><span style="small;">-</span><span style="'Times New Roman';"> </span></span><span style="small;">A select list that contains all the movies (Movie_name)<br />
</span></span><span style="Times New Roman;"><span style="Ignore"><span style="small;">-</span><span style="'Times New Roman';"> </span></span><span style="small;">A select list that contains the movies’ genres (Genre)<br />
</span></span><span style="Times New Roman;"><span style="Ignore"><span style="small;">-</span><span style="'Times New Roman';"> </span></span><span style="small;">A text field that represents the genre ID ( example: 1,2 or 3)</span></span><span style="Times New Roman;"> .</p>
<p></span><span style="Times New Roman;">The behavior of these items should be as follows:<br />
</span><span style="Times New Roman;"><span style="Ignore"><span style="small;">-</span><span style="'Times New Roman';"> </span></span><span style="small;">When the value of the Genre select list is changed, the Movies’ select list is auto populated with the corresponding movie(s) that belong to the selected genre.<br />
</span></span><span style="Times New Roman;"><span style="Ignore"><span style="small;">-</span></span><span style="small;">When the value of the Genre ID Text field is changed (1,2 or 3), the Movies’ select list is auto populated with the corresponding movie(s) that belong to the selected genre ID.</p>
<p></span></span><strong><span style="14pt"><span style="Times New Roman;">Implementation:</span></span></strong><span style="small;"><span style="Times New Roman;"> </span></span></p>
<p class="MsoNormal" style="0in 0in 0pt"><span style="small;"></span><span style="small;"><span style="Times New Roman;">1) Create the Genre ID text field (P1_GENRE_ID) and add the following code to the </span></span><span style="none;"><span style="Times New Roman;">HTML Form Element<br />
    Attributes</span></span><span style="Times New Roman;">:<br />
</span><span style="0in;"><span style="yes"><br />
     </span></span><strong><span style="0in;">onKeyUp=<span class="string2"><span style="10.0pt;">&#8220;</span></span></span></strong><strong><span style="silver;">get_List_XML<span class="string2"><span style="10.0pt;"> (this,&#8217;</span></span></span></strong><strong><span style="silver"><span style="Times New Roman;"> P1_MOVIE_LIST</span></span></strong><span class="string2"><strong><span style="silver;"><span style="Tahoma;"> &#8216;)&#8221;</span></span></strong></span><strong><span style="#000000;"><span style="Times New Roman;"> </span></span></strong><span style="Times New Roman;"> </p>
<p></span><span style="small;"><span style="Times New Roman;">2) Create the Genre select list (P1_GENRE_LIST) </span></span><span style="small;"><span style="Times New Roman;"> and add the following code to the </span></span><span style="none;"><span style="Times New Roman;">HTML Form Element   <br />
       Attributes:</span></span><span style="Times New Roman;"> </span><span style="0in;"><span style="yes">  </span></span><span style="0in;"><span style="yes"> <br />
    <br />
     </span></span><span style="0in;"><strong><span style="silver">onchange=<span class="string2"><span style="10.0pt;">&#8220;</span></span></span></strong></span><strong><span style="silver;">get_List_XML<span class="string2"><span style="10.0pt;"> (this,&#8217;</span></span></span></strong><strong><span style="silver;"><span style="Times New Roman;">P1_MOVIE_LIST</span></span></strong><span style="Tahoma;"><span class="string2"><strong><span style="silver;">&#8216;)&#8221;</span></strong></span><strong><span style="0in;">  </span></strong></span><span style="small;"><span style="Times New Roman;"><span style="yes"> </p>
<p>    </span>And this code to the list of values definition:</span></span></p>
<p>   <span style="Times New Roman;"> </span><strong><span style="silver;">select distinct<span style="yes">  </span>genre display_val,genre_id return_val<br />
</span></strong><strong><span style="silver;">    from movies</span></strong><strong></strong></p>
<p class="MsoNormal" style="0in 0in 0pt 9pt"><strong><span style="'Tahoma','sans-serif';"> </span></strong><span style="Times New Roman;">3) Create the Movies select list (P1_MOVIE_LIST) and add the following code to the list<br />
<span style="yes">    </span>of values definition:</span></p>
<p class="MsoNormal" style="0in 0in 0pt 9pt">    <strong><span style="silver;">select movie_name, movie_id<br />
</span></strong><strong><span style="silver;">   from movies<br />
</span></strong><strong><span style="silver;">   where genre_id= :P1_GENRE_ID</p>
<p></span></strong><span style="Times New Roman;">4) Create an On Demand Process (POPULATE_LIST_XML) as follows:<br />
</span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;"><br />
declare<span style="yes"> <br />
</span></span></strong></span></span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;">l_counter number;<span style="yes">  <br />
</span></span></strong></span></span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;">l_o_name<span style="yes">  </span>varchar2(2000);<span style="yes">  <br />
</span></span></strong></span></span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;">begin<span style="yes">  <br />
</span></span></strong></span></span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;"><span style="yes">    </span>owa_util.mime_header(&#8217;text/xml&#8217;, FALSE );<span style="yes">   <br />
</span></span></strong></span></span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;"><span style="yes">    </span>htp.p(&#8217;Cache-Control: no-cache&#8217;);<span style="yes">   <br />
</span></span></strong></span></span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;"><span style="yes">    </span>htp.p(&#8217;Pragma: no-cache&#8217;);<span style="yes">   <br />
</span></span></strong></span></span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;"><span style="yes">    </span>owa_util.http_header_close;<span style="yes">  <br />
</span></span></strong></span></span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;">    htp.prn(&#8217;&lt;select&gt;&#8217;);<span style="yes">  <br />
</span></span></strong></span></span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;">     for rec in (select &#8220;MOVIES&#8221;.&#8221;GENRE&#8221; as &#8220;GENRE&#8221;,<span style="yes">   <br />
</span></span></strong></span></span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;"><span style="yes">      </span>&#8220;MOVIES&#8221;.&#8221;MOVIE_NAME&#8221; as &#8220;MOVIE_NAME&#8221;,<span style="yes">   <br />
</span></span></strong></span></span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;"><span style="yes">      </span>&#8220;MOVIES&#8221;.&#8221;MOVIE_ID&#8221; as &#8220;MOVIE_ID&#8221;<span style="yes">   <br />
</span></span></strong></span></span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;">       from &#8220;MOVIES&#8221; &#8220;MOVIES&#8221;<span style="yes"> <br />
</span></span></strong></span></span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;">       where &#8220;MOVIES&#8221;.&#8221;GENRE_ID&#8221; = :TEMP_ITEM)<span style="yes">  <br />
</span></span></strong></span></span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;">      loop<span style="yes">  <br />
</span></span></strong></span></span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;">       htp.prn(&#8217;&lt;option value=&#8221;&#8216; || rec.movie_id || &#8216;&#8221;&gt;&#8217; || rec.movie_name || &#8216;&lt;/option&gt;&#8217;);<span style="yes">  <br />
</span></span></strong></span></span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;">     end loop;<span style="yes">   <br />
</span></span></strong></span></span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;">      </span></strong></span></span><span class="keyword2"><span style="silver;"><strong><span style="Tahoma;">htp.prn(&#8217;&lt;/select&gt;&#8217;);<span style="yes">  <br />
</span></span></strong></span></span><strong><span style="Tahoma;"><span class="keyword2"><span style="silver;">end;</p>
<p></span></span></span></strong><span style="Times New Roman;">5) Add the following JavaScript code to the source of any exiting HTML region in the page:</p>
<p></span> <strong><span style="silver;">&lt;center&gt;&lt;b&gt;This example demonstrates the use of Ajax to dynamically populate a select list on the fly.&lt;/center&gt;&lt;br&gt;</span></strong></p>
<p class="MsoNormal" style="0in 0in 0pt"><strong><span style="silver;">Type in the Genre ID in the Genre ID text field or select a Genre from the Genre select list &lt;br&gt; to automatically populate the Movies list (( without re-loading this page! ))</span></strong></p>
<p class="MsoNormal" style="0in 0in 0pt"><strong><span style="silver;">&lt;br&gt;&lt;br&gt;<br />
</span></strong><strong><span style="silver;">&lt;script language=&#8221;JavaScript1.1&#8243; type=&#8221;text/javascript&#8221;&gt;<span style="yes">   <br />
</span></span></strong><strong><span style="silver;"><span style="yes"> </span>function get_List_XML (source_item,target_item){<span style="yes">    <br />
</span></span></strong><strong><span style="silver;"><span style="yes">    </span>var v_Target = html_GetElement(target_item);<br />
</span></strong><strong><span style="silver;"><span style="yes">    </span>var v_Source = html_GetElement(source_item);<br />
</span></strong><strong><span style="silver;"><span style="yes">    </span>var ajaxResult = new htmldb_Get<br />
    (null,&amp;APP_ID.,&#8217;APPLICATION_PROCESS=POPULATE_LIST_XML&#8217;,0);<span style="yes">  <br />
    </span></span></strong><strong><span style="silver;">ajaxResult.add(&#8217;TEMP_ITEM&#8217;,source_item.value);<span style="yes">   </span></span></strong></p>
<p class="MsoNormal" style="0in 0in 0pt"><strong><span style="silver;"><span style="yes">    </span>var v_result_xml = ajaxResult.get(&#8217;XML&#8217;);<span style="yes">  <br />
    </span></span></strong><strong><span style="silver;">if(v_Source == document.getElementById(&#8217;P1_GENRE_ID&#8217;) )<br />
    </span></strong><strong><span style="silver;">document.getElementById(&#8217;P1_GENRE_LIST&#8217;).selectedIndex=0;<br />
    </span></strong><strong><span style="silver;">else<br />
    </span></strong><strong><span style="silver;">document.getElementById(&#8217;P1_GENRE_ID&#8217;).value=&#8221;;</span></strong></p>
<p class="MsoNormal" style="0in 0in 0pt"><strong><span style="silver;"><span style="yes">    </span>if(v_result_xml &amp;&amp; v_Target)</span></strong><strong><span style="silver;">{<br />
    </span></strong><strong><span style="silver;">var options_Contents = v_result_xml.getElementsByTagName(&#8221;option&#8221;);<br />
</span></strong><strong><span style="silver;"><span style="yes">    </span>v_Count = options_Contents.length;<br />
</span></strong><strong><span style="silver;"><span style="yes">    </span>v_Target.length = 0; </span></strong><strong><span style="silver;"><span style="yes">    </span>for(var i=0;i&lt;v_Count;i++)</span></strong><strong><span style="silver;"><span style="yes"> </span>{<br />
</span></strong><strong><span style="silver;"><span style="yes">      </span>var v_opt_xml = v_result_xml.getElementsByTagName(&#8221;option&#8221;)[i];<span style="yes">   <br />
</span></span></strong><strong><span style="silver;"><span style="yes">      </span>writeToSelectList (v_Target, v_opt_xml.getAttribute<br />
      (&#8217;value&#8217;),v_opt_xml.firstChild.nodeValue)<span style="yes">   </span></span></strong><strong><span style="silver;">}<span style="yes">   <br />
</span></span></strong><strong><span style="silver;"><span style="yes">    </span>}<span style="yes">   <br />
</span></span></strong><strong><span style="silver;"><span style="yes"> </span>}<span style="yes">   </span></span></strong></p>
<p> <strong><span style="silver;"><span style="yes">  </span>function writeToSelectList(target_item, option_val, option_content) {<span style="yes">   <br />
</span></span></strong><strong><span style="silver;"><span style="yes">    </span>var v_Opt = document.createElement(&#8221;option&#8221;);<span style="yes">   <br />
</span></span></strong><strong><span style="silver;"><span style="yes">    </span>v_Opt.option_value = option_val;<span style="yes">   </span></span></strong></p>
<p class="MsoNormal" style="0in 0in 0pt"><strong><span style="silver;"><span style="yes">    </span>if(document.all){ <br />
</span></strong><strong><span style="silver;"><span style="yes">        </span>target_item.options.add(v_Opt);<span style="yes">   <br />
</span></span></strong><strong><span style="silver;"><span style="yes">        </span>v_Opt.innerText = option_content;<span style="yes">   <br />
</span></span></strong><strong><span style="silver;"><span style="yes">     </span>} else {<span style="yes">   <br />
</span></span></strong><strong><span style="silver;"><span style="yes">       </span>v_Opt.appendChild(document.createTextNode(option_content));<span style="yes">   <br />
</span></span></strong><strong><span style="silver;"><span style="yes">       </span>target_item.appendChild(v_Opt);<span style="yes">   <br />
</span></span></strong><strong><span style="silver;"><span style="yes">    </span>}<span style="yes">   <br />
</span></span></strong><strong><span style="silver;"><span style="yes">  </span>}<span style="yes">  <br />
</span></span></strong><strong><span style="silver;">&lt;/script&gt;</span></strong></p>
<p class="MsoNormal" style="0in 0in 0pt">You can run the Apex page for this example by visiting <a href="http://apex.oracle.com/pls/otn/f?p=54772:1" target="_blank">my online Apex account</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.singlequery.com/2008/07/using-ajax-to-populate-apex-items-on-the-fly/feed/</wfw:commentRss>
		</item>
		<item>
		<title>&#8220;Aces in the Hole&#8221; Presentation</title>
		<link>http://www.singlequery.com/2008/06/aces-in-the-hole-presentation/</link>
		<comments>http://www.singlequery.com/2008/06/aces-in-the-hole-presentation/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 05:50:40 +0000</pubDate>
		<dc:creator>gpike</dc:creator>
		
		<category><![CDATA[Collaborate]]></category>

		<guid isPermaLink="false">http://www.singlequery.com/?p=163</guid>
		<description><![CDATA[I got a little press in the July/August 2008 edition of Oracle magazine about my presentation at Collaborate and I thought it would be prudent to shamelessly refer you to my presentation.  Additionally, I will be presenting this same topic at the Northern California Oracle Users Group Summer Conference on August 21 in San [...]]]></description>
			<content:encoded><![CDATA[<p>I got a little press in the <a href="http://www.oracle.com/technology/oramag/oracle/08-jul/o48bulletin.html">July/August 2008 edition of Oracle magazine</a> about my presentation at Collaborate and I thought it would be prudent to shamelessly refer you to my presentation.  Additionally, I will be presenting this same topic at the <a href="http://www.nocoug.org/">Northern California Oracle Users Group Summer Conference</a> on August 21 in San Ramon.</p>
<p><a href="http://www.singlequery.com/?p=151">Aces in the Hole</a></p>
<p>Greg</p>
<table>
<tr>
<td width=40>
      <a href="http://www.singlequery.com/wp-content/uploads/2007/03/thepickle.png" title="Greg Pike"><br />
        <img src="http://www.singlequery.com/wp-content/uploads/2007/03/thepickle.png" alt="Greg Pike" width="40"/><br />
      </a>
    </td>
<td style="vertical-align: center; text-align: center;">
<br /><a href="mailto:gpike@piocon.com?subject=SingleQuery Direct Comment">Greg Pike</a><br />
      <a href="http://www.piocon.com" title="PIOCON Technologies Website"><img src="http://www.singlequery.com/wp-content/uploads/2007/04/pio-redonwhite100.jpg" alt="PIOCON Technologies Website" /></a>
    </td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.singlequery.com/2008/06/aces-in-the-hole-presentation/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Step By Step: Installing an Oracle 10g Dataguard Enviroment</title>
		<link>http://www.singlequery.com/2008/06/step-by-step-guide-to-installing-a-dataguard-enviroment/</link>
		<comments>http://www.singlequery.com/2008/06/step-by-step-guide-to-installing-a-dataguard-enviroment/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 14:53:37 +0000</pubDate>
		<dc:creator>RogerL</dc:creator>
		
		<category><![CDATA[Collaborate]]></category>

		<category><![CDATA[Database Tips]]></category>

		<guid isPermaLink="false">http://www.singlequery.com/?p=162</guid>
		<description><![CDATA[Step by Step Guide for Installing a Data Guard/ Data Guard Broker Environment
This focuses on setting up a test environment on a single node. The DBA can adapt this to set up a production environment.
 
By Roger Lenihan
 
 
Step 1:
Install an Oracle database and validate it is in Archive log Mode.
If Archive log is [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="center;" align="center"><strong><span style="18pt;">Step by Step Guide for Installing a Data Guard/ Data Guard Broker Environment</span></strong></p>
<p class="MsoNormal"><em><span style="16pt;">This focuses on setting up a test environment on a single node. The DBA can adapt this to set up a production environment.</span></em></p>
<p class="MsoNormal"><em><span style="16pt;"> </span></em></p>
<p class="MsoNormal"><em><span style="16pt;">By Roger Lenihan</span></em></p>
<p class="MsoNormal"><span class="PioconSubhead"><span> </span></span></p>
<p class="MsoNormal"><span class="PioconSubhead"><span> </span></span></p>
<p class="MsoNoSpacing"><strong>Step 1:</strong></p>
<p class="MsoNoSpacing">Install an Oracle database and validate it is in Archive log Mode.</p>
<p class="MsoNoSpacing">If Archive log is disabled enable it before continuing.</p>
<p class="MsoNoSpacing">
<pre>SQL&gt; archive log list</pre>
<pre>Database log mode<span>             </span>Archive Mode</pre>
<pre>Automatic archival<span>            </span>Enabled</pre>
<pre>Archive destination<span>           </span>C:\oracle\product\10.2.0\archive</pre>
<pre>Oldest online log sequence<span>    </span>66</pre>
<pre>Next log sequence to archive<span>  </span>68</pre>
<pre>Current log sequence<span>          </span>68</pre>
<p class="MsoNoSpacing"><strong>Step 2:</strong></p>
<p class="MsoNoSpacing">Enable force logging mode.</p>
<p class="MsoNoSpacing">
<pre>SQL&gt; alter database force logging;</pre>
<pre>Database altered.</pre>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing">
<p class="MsoNoSpacing"><strong>Step 3:</strong></p>
<p class="MsoNoSpacing">Identify all the datafiles to copy for a cold back up or do an RMAN backup.</p>
<p class="MsoNoSpacing">Since this is test environment I will shutdown the database and do a cold backup.</p>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing"><span>SQL&gt; select name from v$datafile;</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>NAME</span></p>
<p class="MsoNoSpacing"><span>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</span></p>
<p class="MsoNoSpacing"><span>C:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF</span></p>
<p class="MsoNoSpacing"><span>C:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS01.DBF</span></p>
<p class="MsoNoSpacing"><span>C:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSAUX01.DBF</span></p>
<p class="MsoNoSpacing"><span>C:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS01.DBF</span></p>
<p class="MsoNoSpacing"><span>C:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\EXAMPLE01.DBF</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>SQL&gt;</span></p>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing" style="1in;">
<p class="MsoNoSpacing"><strong>Step 4:</strong></p>
<p class="MsoNoSpacing">In a windows environment create the service for the standby database.<span> </span>You will also have to create the folders and environment for the standby database.</p>
<p class="MsoNoSpacing">
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>C:\&gt;oradim -new -sid stby -intpwd teststby -startmode manual</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>C:\oracle\product\10.2.0\oradata\<span style="red;">teststby<span> </span></span>&#8211; Create this folder</span></p>
<p class="MsoNormal"><span>C:\oracle\product\10.2.0\admin\<span style="red;">teststby<span> </span></span>&#8211; Create this folder and all the folders underneath. Like bdump, udump, etc. Or just copy the production one.</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>Note: Since this is a dataguard environment on a single test node I do not have to install all the Oracle software again.</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNoSpacing"><strong>Step 5:</strong></p>
<p class="MsoNoSpacing">Shutdown Primary database and move the datafiles</p>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing"><span>SQL&gt; shutdown immediate;</span></p>
<p class="MsoNoSpacing"><span>Database closed.</span></p>
<p class="MsoNoSpacing"><span>Database dismounted.</span></p>
<p class="MsoNoSpacing"><span>ORACLE instance shut down.</span></p>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing">Move the datafiles from step 3 into the oradata standby environment.</p>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing"><span>C:\oracle\product\10.2.0\oradata\test</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>C:\oracle\product\10.2.0\oradata\teststby</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><strong>Step 6:</strong></p>
<p class="MsoNoSpacing">Create a standby control file and start the database</p>
<p class="MsoNoSpacing">
<pre>SQL&gt; startup mount;</pre>
<pre>SQL&gt; ALTER DATABASE CREATE STANDBY CONTROLFILE AS</pre>
<pre><span>    </span>&#8216; C:\oracle\product\10.2.0\oradata\teststby\teststby.ctl’;</pre>
<pre>Database altered.</pre>
<pre>SQL&gt; alter database open;</pre>
<pre><strong>Step 7:</strong></pre>
<p class="MsoNoSpacing"><span> </span>Create the Primary and Standby init.ora/spfile to facilitate Dataguard.</p>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing"><span>SQL&gt; CREATE PFILE=</span><span> ‘C:\oracle\product\10.2.0\testinit.ora’ </span></p>
<p class="MsoNoSpacing"><span>from spfile;</span></p>
<pre>File created.</pre>
<pre><span> </span></pre>
<p class="MsoNoSpacing"><em>Primary Database:</em></p>
<pre><span> </span></pre>
<pre><span>Make the corresponding changes: </span></pre>
<p class="MsoNoSpacing">
<pre>*.aq_tm_processes=1</pre>
<pre>*.background_dump_dest='C:\oracle\product\10.2.0/admin/test/bdump'</pre>
<pre>*.compatible='10.2.0.1.0'</pre>
<pre>*.control_files='C:\oracle\product\10.2.0/oradata/test/\control01.ctl'</pre>
<pre>*.core_dump_dest='C:\oracle\product\10.2.0/admin/test/cdump'</pre>
<pre>*.db_domain=''</pre>
<pre>*.db_file_multiblock_read_count=16</pre>
<pre>*.db_name='test'</pre>
<pre>*.dispatchers='(PROTOCOL=TCP) (SERVICE=testXDB)'</pre>
<pre>*.fast_start_mttr_target=300</pre>
<pre>*.instance_name='test'</pre>
<pre><strong><span style="red;">*.db_unique_name=&#8217;test&#8217;</span></strong></pre>
<pre>*.job_queue_processes=10</pre>
<pre><strong><span style="red;">*.LOG_ARCHIVE_CONFIG=&#8217;DG_CONFIG=(test,teststb)&#8217;</span></strong></pre>
<pre><strong><span style="red;">*.LOG_ARCHIVE_DEST_1=&#8217;location=C:\oracle\archive arch mandatory
valid_for=(ONLINE_LOGFILES,ALL_ROLES) db_unique_name=test&#8217;</span></strong></pre>
<pre><strong><span style="red;">*.LOG_ARCHIVE_DEST_2=&#8217;service=teststby lgwr sync affirm net_timeout=30
valid_for=(ONLINE_LOGFILES,ALL_ROLES) db_unique_name=teststby&#8217;</span></strong></pre>
<pre><strong><span style="red;">*.log_archive_dest_state_1=&#8217;ENABLE&#8217;</span></strong></pre>
<pre><strong><span style="red;">*.log_archive_dest_state_2=&#8217;ENABLE&#8217;</span></strong></pre>
<pre>*.open_cursors=300</pre>
<pre>*.pga_aggregate_target=25165824</pre>
<pre>*.processes=150</pre>
<pre>*.query_rewrite_enabled='FALSE'</pre>
<pre>*.remote_login_passwordfile='EXCLUSIVE'</pre>
<pre>*.shared_pool_size=50331648</pre>
<pre>*.sort_area_size=524288</pre>
<pre>*.star_transformation_enabled='FALSE'</pre>
<pre>*.timed_statistics=TRUE</pre>
<pre>*.undo_management='AUTO'</pre>
<pre>*.undo_retention=10800</pre>
<pre>*.undo_tablespace='UNDOTBS1'</pre>
<pre>*.user_dump_dest='C:\oracle\product\10.2.0/admin/test/udump'</pre>
<pre>*.sga_target=611319808</pre>
<pre><strong><span style="red;">*.fal_server=teststby</span></strong></pre>
<pre><strong><span style="red;">*.fal_client=test</span></strong></pre>
<pre><strong><span style="red;">*.db_file_name_convert=&#8217;C:\oracle\product\10.2.0\oradata\teststby&#8217;,
&#8216;C:\oracle\product\10.2.0\oradata\test&#8217;</span></strong></pre>
<pre><strong><span style="red;">*.log_file_name_convert=&#8217;C:\oracle\product\10.2.0\oradata\teststby&#8217;,
&#8216;C:\oracle\product\10.2.0\oradata\test&#8217;</span></strong></pre>
<p class="MsoNoSpacing"><strong> </strong></p>
<p class="MsoNoSpacing"><em>Standby Database:</em></p>
<p class="MsoNoSpacing"><strong> </strong></p>
<p class="MsoNoSpacing">Create a standby init.ora from a copy of the primary one and make the necessary changes below.</p>
<p class="MsoNoSpacing"><strong> </strong></p>
<p class="MsoNoSpacing"><span>*.aq_tm_processes=1</span></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.background_dump_dest=&#8217;C:\oracle\product\10.2.0/admin/teststby/bdump&#8217;</span></strong></p>
<p class="MsoNoSpacing"><span>*.compatible=&#8217;10.2.0.1.0&#8242;</span></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.control_files=&#8217;C:\oracle\product\10.2.0/oradata/teststby/\control01.ctl&#8217;</span></strong></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.core_dump_dest=&#8217;C:\oracle\product\10.2.0/admin/teststby/cdump&#8217;</span></strong></p>
<p class="MsoNoSpacing"><span>*.db_domain=&#8221;</span></p>
<p class="MsoNoSpacing"><span>*.db_file_multiblock_read_count=16</span></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.db_name=&#8217;test&#8217;</span></strong></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.DB_UNIQUE_NAME=&#8217;teststby&#8217;</span></strong></p>
<p class="MsoNoSpacing"><span>*.dispatchers=&#8217;(PROTOCOL=TCP) (SERVICE=testXDB)&#8217;</span></p>
<p class="MsoNoSpacing"><span>*.fast_start_mttr_target=300</span></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.instance_name=&#8217;teststby&#8217;</span></strong></p>
<p class="MsoNoSpacing"><span>*.job_queue_processes=10</span></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.LOG_ARCHIVE_DEST_1=&#8217;location=C:\oracle\archive2 arch mandatory valid_for=(ONLINE_LOGFILES,ALL_ROLES) db_unique_name=teststby&#8217;</span></strong></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.LOG_ARCHIVE_DEST_2=&#8217;service=test lgwr sync affirm net_timeout=30 valid_for=(ONLINE_LOGFILES,ALL_ROLES) db_unique_name=test&#8217;</span></strong></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.log_archive_dest_state_1=&#8217;ENABLE&#8217;</span></strong></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.log_archive_dest_state_2=&#8217;ENABLE&#8217;</span></strong></p>
<p class="MsoNoSpacing"><span>*.open_cursors=300</span></p>
<p class="MsoNoSpacing"><span>*.pga_aggregate_target=25165824</span></p>
<p class="MsoNoSpacing"><span>*.remote_login_passwordfile=&#8217;EXCLUSIVE&#8217;</span></p>
<p class="MsoNoSpacing"><span>*.processes=150</span></p>
<p class="MsoNoSpacing"><span>*.query_rewrite_enabled=&#8217;FALSE&#8217;</span></p>
<p class="MsoNoSpacing"><span>*.shared_pool_size=50331648</span></p>
<p class="MsoNoSpacing"><span>*.sort_area_size=524288</span></p>
<p class="MsoNoSpacing"><span>*.star_transformation_enabled=&#8217;FALSE&#8217;</span></p>
<p class="MsoNoSpacing"><span>*.timed_statistics=TRUE</span></p>
<p class="MsoNoSpacing"><span>*.undo_management=&#8217;AUTO&#8217;</span></p>
<p class="MsoNoSpacing"><span>*.undo_retention=10800</span></p>
<p class="MsoNoSpacing"><span>*.undo_tablespace=&#8217;UNDOTBS1&#8242;</span></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.user_dump_dest=&#8217;C:\oracle\product\10.2.0/admin/teststby/udump&#8217;</span></strong></p>
<p class="MsoNoSpacing"><span>*.sga_target=611319808</span></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.standby_archive_dest=&#8217;location=c:\oracle\product\10.2.0\archive&#8217;</span></strong></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.db_file_name_convert=&#8217;C:\oracle\product\10.2.0\oradata\test&#8217;,</span></strong></p>
<p class="MsoNoSpacing"><strong><span style="red;">&#8216;C:\oracle\product\10.2.0\oradata\teststby&#8217;</span></strong></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.log_file_name_convert=&#8217;C:\oracle\product\10.2.0\oradata\test&#8217;,</span></strong></p>
<p class="MsoNoSpacing"><strong><span style="red;">&#8216;C:\oracle\product\10.2.0\oradata\teststby&#8217;</span></strong></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.standby_file_management=AUTO</span></strong></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.log_archive_config=&#8217;DG_CONFIG=(test,teststby)&#8217;</span></strong></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.service_names=teststby</span></strong></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.fal_server=test</span></strong></p>
<p class="MsoNoSpacing"><strong><span style="red;">*.fal_client=teststby</span></strong></p>
<p class="MsoNoSpacing"><strong><span style="red;"> </span></strong></p>
<p class="MsoNoSpacing"><strong><span style="red;"> </span></strong></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNoSpacing"><strong>Step 8:</strong></p>
<p class="MsoNoSpacing">Convert the control file created from step 6 to the name and location of control file parameter in the new standby init.ora.</p>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing"><span>C</span><span>:\oracle\product\10.2.0\oradata\teststby\teststby.ctl</span></p>
<p class="MsoNoSpacing">to</p>
<p class="MsoNoSpacing"><span>C:\oracle\product\10.2.0\oradata\teststby\control01.ctl</span></p>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing">
<p class="MsoNoSpacing">
<p class="MsoNoSpacing">
<p class="MsoNoSpacing"><strong>Step 9:</strong></p>
<p class="MsoNoSpacing">Configure the Listener.ora file.<span> </span>Since the example is on the same node I have both the standby and primary in the listener.ora. If this was a production environment you would create the listener for primary and standby separate.</p>
<p class="MsoNoSpacing">
<p class="MsoNormal"><span class="PioconBody"><span>LISTENER =</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(DESCRIPTION_LIST =</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span><span> </span>(DESCRIPTION =</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(ADDRESS_LIST =</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(ADDRESS_LIST =</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(ADDRESS = (PROTOCOL = TCP)(HOST = RLLAPTOP01)(PORT = 1521))</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span> </span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span>SID_LIST_LISTENER =</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(SID_LIST =</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(SID_DESC =</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(SID_NAME = PLSExtProc)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(ORACLE_HOME = C:\oracle\product\10.2.0)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(PROGRAM = extproc)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(SID_DESC =</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(GLOBAL_DBNAME = test)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(ORACLE_HOME = C:\oracle\product\10.2.0)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(SID_NAME = test)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(SID_DESC =</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(GLOBAL_DBNAME = teststby)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(ORACLE_HOME = C:\oracle\product\10.2.0)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(SID_NAME = teststby)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(SID_DESC =</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(GLOBAL_DBNAME = teststby_DGMGRL)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(ORACLE_HOME = C:\oracle\product\10.2.0)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(SID_NAME = teststby)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(SID_DESC =</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(GLOBAL_DBNAME = test_DGMGRL)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(ORACLE_HOME = C:\oracle\product\10.2.0)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>(SID_NAME = test)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span><span> </span>)</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span> </span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span style="red;">Note: The DGMGRL entries are for the Data Guard Broker to be able to start and stop the databases on switchovers.</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span style="red;"> </span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span style="red;"> </span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span style="red;"> </span></span></p>
<p class="MsoNoSpacing"><strong>Step 10:</strong></p>
<p class="MsoNoSpacing">Stop and restart the listener</p>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing"><span>C:\&gt;lsnrctl stop</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 30-MAR-2008 10:40</span></p>
<p class="MsoNoSpacing"><span>:55</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Copyright (c) 1991, 2005, Oracle.<span> </span>All rights reserved.</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))</span></p>
<p class="MsoNoSpacing"><span>The command completed successfully</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>C:\&gt;lsnrctl start</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 30-MAR-2008 10:41</span></p>
<p class="MsoNoSpacing"><span>:32</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Copyright (c) 1991, 2005, Oracle.<span> </span>All rights reserved.</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Starting tnslsnr: please wait&#8230;</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production</span></p>
<p class="MsoNoSpacing"><span>System parameter file is C:\oracle\product\10.2.0\db_1\network\admin\listener.or</span></p>
<p class="MsoNoSpacing"><span>a</span></p>
<p class="MsoNoSpacing"><span>Log messages written to C:\oracle\product\10.2.0\db_1\network\log\listener.log</span></p>
<p class="MsoNoSpacing"><span>Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc</span></p>
<p class="MsoNoSpacing"><span>)))</span></p>
<p class="MsoNoSpacing"><span>Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rllaptop01)(PORT=1521)))</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))</span></p>
<p class="MsoNoSpacing"><span>STATUS of the LISTENER</span></p>
<p class="MsoNoSpacing"><span>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</span></p>
<p class="MsoNoSpacing"><span>Alias<span> </span>LISTENER</span></p>
<p class="MsoNoSpacing"><span>Version<span> </span>TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ</span></p>
<p class="MsoNoSpacing"><span>ction</span></p>
<p class="MsoNoSpacing"><span>Start Date<span> </span>30-MAR-2008 10:41:34</span></p>
<p class="MsoNoSpacing"><span>Uptime<span> </span>0 days 0 hr. 0 min. 1 sec</span></p>
<p class="MsoNoSpacing"><span>Trace Level<span> </span>off</span></p>
<p class="MsoNoSpacing"><span>Security<span> </span>ON: Local OS Authentication</span></p>
<p class="MsoNoSpacing"><span>SNMP<span> </span>OFF</span></p>
<p class="MsoNoSpacing"><span>Listener Parameter File<span> </span>C:\oracle\product\10.2.0\db_1\network\admin\listener.o</span></p>
<p class="MsoNoSpacing"><span>ra</span></p>
<p class="MsoNoSpacing"><span>Listener Log File<span> </span>C:\oracle\product\10.2.0\db_1\network\log\listener.log</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Listening Endpoints Summary&#8230;</span></p>
<p class="MsoNoSpacing"><span><span> </span>(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc)))</span></p>
<p class="MsoNoSpacing"><span><span> </span>(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rllaptop01)(PORT=1521)))</span></p>
<p class="MsoNoSpacing"><span>Services Summary&#8230;</span></p>
<p class="MsoNoSpacing"><span>Service &#8220;PLSExtProc&#8221; has 1 instance(s).</span></p>
<p class="MsoNoSpacing"><span><span> </span>Instance &#8220;PLSExtProc&#8221;, status UNKNOWN, has 1 handler(s) for this service&#8230;</span></p>
<p class="MsoNoSpacing"><span>Service &#8220;test&#8221; has 1 instance(s).</span></p>
<p class="MsoNoSpacing"><span><span> </span>Instance &#8220;test&#8221;, status UNKNOWN, has 1 handler(s) for this service&#8230;</span></p>
<p class="MsoNoSpacing"><span>Service &#8220;test_DGMGRL&#8221; has 1 instance(s).</span></p>
<p class="MsoNoSpacing"><span><span> </span>Instance &#8220;test&#8221;, status UNKNOWN, has 1 handler(s) for this service&#8230;</span></p>
<p class="MsoNoSpacing"><span>Service &#8220;teststby&#8221; has 1 instance(s).</span></p>
<p class="MsoNoSpacing"><span><span> </span>Instance &#8220;teststby&#8221;, status UNKNOWN, has 1 handler(s) for this service&#8230;</span></p>
<p class="MsoNoSpacing"><span>Service &#8220;teststby_DGMGRL&#8221; has 1 instance(s).</span></p>
<p class="MsoNoSpacing"><span><span> </span>Instance &#8220;teststby&#8221;, status UNKNOWN, has 1 handler(s) for this service&#8230;</span></p>
<p class="MsoNoSpacing"><span>The command completed successfully</span></p>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing">
<p class="MsoNoSpacing"><strong>Step 11:</strong></p>
<p class="MsoNoSpacing">Add the standby database to the tnsnames.ora file.</p>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing"><span>teststby =</span></p>
<p class="MsoNoSpacing"><span><span> </span>(DESCRIPTION =</span></p>
<p class="MsoNoSpacing"><span><span> </span>(ADDRESS_LIST =</span></p>
<p class="MsoNoSpacing"><span><span> </span>(ADDRESS = (PROTOCOL = TCP)(HOST = RLLAPTOP01)(PORT = 1521))</span></p>
<p class="MsoNoSpacing"><span><span> </span>)</span></p>
<p class="MsoNoSpacing"><span><span> </span>(CONNECT_DATA =</span></p>
<p class="MsoNoSpacing"><span><span> </span>(SERVER = DEDICATED)</span></p>
<p class="MsoNoSpacing"><span><span> </span>(SERVICE_NAME = teststby)</span></p>
<p class="MsoNoSpacing"><span><span> </span>)</span></p>
<p class="MsoNoSpacing"><span><span> </span>)</span></p>
<p class="MsoNoSpacing"><strong> </strong></p>
<p class="MsoNoSpacing"><strong> </strong></p>
<p class="MsoNoSpacing"><strong>Step 12:</strong></p>
<p class="MsoNoSpacing">Shutdown the primary database and start again with the new init.ora.</p>
<p class="MsoNoSpacing">Convert it back to a spfile.</p>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing"><span>C:\&gt; set oracle_sid=test</span></p>
<p class="MsoNoSpacing"><span>C:\&gt; sqlplus</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>SQL&gt; shutdown immediate;</span></p>
<p class="MsoNoSpacing"><span>Database closed.</span></p>
<p class="MsoNoSpacing"><span>Database dismounted.</span></p>
<p class="MsoNoSpacing"><span>ORACLE instance shut down.</span></p>
<p class="MsoNoSpacing"><span>SQL&gt; startup pfile=</span><span>C:\oracle\product\10.2.0\testinit.ora;</span></p>
<p class="MsoNoSpacing"><span>ORACLE instance started.</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Total System Global Area<span> </span>612368384 bytes</span></p>
<p class="MsoNoSpacing"><span>Fixed Size<span> </span>1250428 bytes</span></p>
<p class="MsoNoSpacing"><span>Variable Size<span> </span>83889028 bytes</span></p>
<p class="MsoNoSpacing"><span>Database Buffers<span> </span>520093696 bytes</span></p>
<p class="MsoNoSpacing"><span>Redo Buffers<span> </span><span> </span>7135232 bytes</span></p>
<p class="MsoNoSpacing"><span>Database mounted.</span></p>
<p class="MsoNoSpacing"><span>Database opened.</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>SQL&gt; create spfile from pfile=c:\oracle\product\10.2.0\testinit.ora;</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Database altered.</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>SQL&gt; shutdown immediate;</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Database closed.</span></p>
<p class="MsoNoSpacing"><span>Database dismounted.</span></p>
<p class="MsoNoSpacing"><span>ORACLE instance shut down.</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>SQL&gt; Startup;</span></p>
<p class="MsoNoSpacing"><span>ORACLE instance started.</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Total System Global Area<span> </span>612368384 bytes</span></p>
<p class="MsoNoSpacing"><span>Fixed Size<span> </span>1250428 bytes</span></p>
<p class="MsoNoSpacing"><span>Variable Size<span> </span>83889028 bytes</span></p>
<p class="MsoNoSpacing"><span>Database Buffers<span> </span>520093696 bytes</span></p>
<p class="MsoNoSpacing"><span>Redo Buffers<span> </span>7135232 bytes</span></p>
<p class="MsoNoSpacing"><span>Database mounted.</span></p>
<p class="MsoNoSpacing"><span>Database opened.</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span style="red;">Note: You have to use a spfile to use Data Guard Broker.</span></p>
<p class="MsoNoSpacing"><span style="red;"> </span></p>
<p class="MsoNoSpacing"><strong><span style="red;"> </span></strong></p>
<p class="MsoNoSpacing"><strong>Step 13:</strong></p>
<p class="MsoNoSpacing">Create standby redo logs if you want to run the configuration in MaxAvailibility or MaxProtection. Basically you have to create them if you want to run in SYNC mode.</p>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing"><span>SQL&gt; Select * from v$log;</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>GROUP#<span> </span>THREAD#<span> </span>SEQUENCE#<span> </span>BYTES<span> </span>MEMBERS ARCHIVED STATUS<span> </span>FIRST_CHANGE# FIRST_TIME</span></p>
<p class="MsoNoSpacing"><span>&#8212;&#8212;&#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;&#8212;&#8212;&#8211;</span></p>
<p class="MsoNoSpacing"><span><span> </span>1<span> </span>1 <span> </span>108<span> </span>52428800<span> </span>1 NO<span> </span>CURRENT<span> </span>658611 4/9/2008 10</span></p>
<p class="MsoNoSpacing"><span><span> </span>2<span> </span>1<span> </span>106<span> </span>52428800<span> </span>1 YES<span> </span>ACTIVE<span> </span>658530 4/9/2008 10</span></p>
<p class="MsoNoSpacing"><span><span> </span>3<span> </span>1<span> </span>107<span> </span>52428800<span> </span>1 YES<span> </span><span> </span>ACTIVE<span> </span>658552 4/9/2008 10</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>SQL&gt; Select * from v$logfile;</span></p>
<p class="MsoNoSpacing"><span>GROUP# STATUS<span> </span>TYPE<span> </span>MEMBER<span> </span>IS_RECOVERY_DEST_FILE</span></p>
<p class="MsoNoSpacing"><span>&#8212;&#8212;&#8212;- &#8212;&#8212;- &#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#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;&#8212;&#8212;&#8212;</span></p>
<p class="MsoNoSpacing"><span><span> </span>3<span> </span>ONLINE<span> </span>C:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO03.LOG<span> </span>NO</span></p>
<p class="MsoNoSpacing"><span><span> </span>2<span> </span>ONLINE<span> </span>C:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO02.LOG<span> </span>NO</span></p>
<p class="MsoNoSpacing"><span><span> </span>1<span> </span>ONLINE<span> </span>C:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO01.LOG<span> </span>NO</span></p>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing">
<p class="MsoNoSpacing">Now we create the standby redologs</p>
<p class="MsoNoSpacing">
<pre>SQL&gt; alter database add standby logfile ‘C:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDOSTB01.LOG’
size 52428800;</pre>
<pre>SQL&gt; alter database add standby logfile ‘C:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDOSTB02.LOG’
size 52428800;</pre>
<pre>SQL&gt; alter database add standby logfile ‘C:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDOSTB03.LOG’
size 52428800;</pre>
<pre><span> </span></pre>
<pre><span>Once you mount standby you will have to open it in read only and issue the above commands
in the standby database location. </span></pre>
<pre><span>i.e –</span></pre>
<pre><span> </span></pre>
<pre>SQL&gt; alter database add standby logfile ‘C:\ORACLE\PRODUCT\10.2.0\ORADATA\TESTSTBY\REDOSTB01.LOG’ size 52428800;</pre>
<pre>--- Do this for all 3</pre>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><strong>Step 14:</strong></p>
<p class="MsoNoSpacing">Start up the standby database using its init.ora file that you created in step 7.</p>
<p class="MsoNoSpacing">Convert the init.ora file to a spfile.</p>
<p class="MsoNoSpacing">Shut down the database and restart it using the spfile.</p>
<p class="MsoNoSpacing"><strong> </strong></p>
<p class="MsoNoSpacing"><span>C:\&gt; set oracle_sid=teststby</span></p>
<p class="MsoNoSpacing"><span>C:\&gt; sqlplus</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>SQL&gt; startup nomount pfile=</span><span>C:\oracle\product\10.2.0\teststbyinit.ora;</span></p>
<p class="MsoNoSpacing"><span>ORACLE instance started.</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Total System Global Area<span> </span>612368384 bytes</span></p>
<p class="MsoNoSpacing"><span>Fixed Size<span> </span>1250428 bytes</span></p>
<p class="MsoNoSpacing"><span>Variable Size<span> </span>67111812 bytes</span></p>
<p class="MsoNoSpacing"><span>Database Buffers<span> </span>536870912 bytes</span></p>
<p class="MsoNoSpacing"><span>Redo Buffers<span> </span>7135232 bytes</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>SQL&gt; alter database mount standby database;</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Database altered.</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>SQL&gt; create spfile from pfile=c:\oracle\product\10.2.0\teststbyinit.ora;</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Database altered.</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>SQL&gt; Shutdown immediate;</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Database closed.</span></p>
<p class="MsoNoSpacing"><span>Database dismounted.</span></p>
<p class="MsoNoSpacing"><span>ORACLE instance shut down.</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>SQL&gt; Startup nomount;</span></p>
<p class="MsoNoSpacing"><span>ORACLE instance started.</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Total System Global Area<span> </span>612368384 bytes</span></p>
<p class="MsoNoSpacing"><span>Fixed Size<span> </span>1250428 bytes</span></p>
<p class="MsoNoSpacing"><span>Variable Size<span> </span>67111812 bytes</span></p>
<p class="MsoNoSpacing"><span>Database Buffers<span> </span>536870912 bytes</span></p>
<p class="MsoNoSpacing"><span>Redo Buffers<span> </span>7135232 bytes</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Now the standby database is started under the spfile.</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><strong> </strong></p>
<p class="MsoNoSpacing"><strong>Step 15:</strong></p>
<p class="MsoNoSpacing">Mount the standby database and recover it.</p>
<p class="MsoNoSpacing">This will bring the standby database into standby mode.</p>
<p class="MsoNoSpacing"><strong> </strong></p>
<p class="MsoNoSpacing"><span>SQL&gt; alter database mount standby database;</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Database altered.</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>SQL&gt; recover managed standby database disconnect from session;</span></p>
<p class="MsoNoSpacing"><span>Media recovery complete.</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>SQL&gt;</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>&#8212;- Go back to step 13 and add standby redo logs on standby database.</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing"><strong>Step 16:</strong></p>
<p class="MsoNormal"><span class="PioconBody"><span>Now that Data Guard is all configured, we set up the Broker component.</span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span>First, we create the configuration. </span></span></p>
<p class="MsoNormal"><span class="PioconBody"><span> </span></span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>C:\&gt;dgmgrl</span></p>
<p class="MsoNormal"><span>DGMGRL for 32-bit Windows: Version 10.2.0.1.0 - Production</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>Copyright (c) 2000, 2005, Oracle. All rights reserved.</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>Welcome to DGMGRL, type &#8220;help&#8221; for information.</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>DGMGRL&gt; connect sys@test</span></p>
<p class="MsoNormal"><span>Password:</span></p>
<p class="MsoNormal"><span>Connected.</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>DGMGRL&gt; CREATE CONFIGURATION ‘DGBTEST’ AS </span></p>
<p class="MsoNormal"><span><span> </span>PRIMARY DATABASE IS ‘TEST’</span></p>
<p class="MsoNormal"><span><span> </span>CONNECT IDENTIFIER IS TEST;</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>Configuration “DGBTEST’ created with primary database “TEST”</span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNoSpacing"><strong>Step 17:</strong></p>
<p class="MsoNoSpacing">We add the standby database to the broker configuration.</p>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing"><span>DGMGRL&gt; ADD DATABASE ‘TESTSTBY’ AS</span></p>
<p class="MsoNoSpacing"><span><span> </span>CONNECT IDENTIFIER IS TESTSTBY</span></p>
<p class="MsoNoSpacing"><span><span> </span>MAINTAINED AS PHYSICAL;</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Database “TESTSTBY” added.</span></p>
<p class="MsoNoSpacing"><strong> </strong></p>
<p class="MsoNoSpacing"><strong>Step 18:</strong></p>
<p class="MsoNoSpacing">Enable the configuration.</p>
<p class="MsoNoSpacing"><strong> </strong></p>
<p class="MsoNoSpacing"><span>DGMGRL&gt; enable configuration;</span></p>
<p class="MsoNoSpacing"><span>Enabled.</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>DGMGRL&gt;</span></p>
<p class="MsoNoSpacing"><strong> </strong></p>
<p class="MsoNoSpacing"><strong>Step 19:</strong></p>
<p class="MsoNoSpacing">Verify the broker configuration is set up correctly and running.</p>
<p class="MsoNoSpacing">
<p class="MsoNoSpacing"><span>DGMGRL&gt; show configuration</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Configuration</span></p>
<p class="MsoNoSpacing"><span><span> </span>Name:<span> </span>dgbtest</span></p>
<p class="MsoNoSpacing"><span><span> </span>Enabled:<span> </span>YES</span></p>
<p class="MsoNoSpacing"><span><span> </span>Protection Mode:<span> </span>MaxAvailability</span></p>
<p class="MsoNoSpacing"><span><span> </span>Fast-Start Failover: DISABLED</span></p>
<p class="MsoNoSpacing"><span><span> </span>Databases:</span></p>
<p class="MsoNoSpacing"><span><span> </span>test<span> </span>- Primary database</span></p>
<p class="MsoNoSpacing"><span><span> </span>teststby - Physical standby database</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>Current status for &#8220;dgbtest&#8221;:</span></p>
<p class="MsoNoSpacing"><span>SUCCESS</span></p>
<p class="MsoNoSpacing"><span> </span></p>
<p class="MsoNoSpacing"><span>DGMGRL&gt;</span></p>
<p class="MsoNoSpacing"><strong> </strong></p>
<p class="MsoNoSpacing"><span>Now we have a fully functional Data Guard and Broker configuration. If you have any questions or any ideas to make this document better please contact me at <a href="mailto:rlenihan@piocon.com">rlenihan@piocon.com</a></span></p>
<p class="MsoNoSpacing"><span> </span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.singlequery.com/2008/06/step-by-step-guide-to-installing-a-dataguard-enviroment/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Quick Hint:  Using LOBS with PL/SQL – Performance Problems</title>
		<link>http://www.singlequery.com/2008/05/quick-hint-using-lobs-with-plsql-%e2%80%93-performance-problems/</link>
		<comments>http://www.singlequery.com/2008/05/quick-hint-using-lobs-with-plsql-%e2%80%93-performance-problems/#comments</comments>
		<pubDate>Mon, 12 May 2008 19:13:00 +0000</pubDate>
		<dc:creator>gpike</dc:creator>
		
		<category><![CDATA[Database Tips]]></category>

		<category><![CDATA[PL/SQL]]></category>

		<category><![CDATA[Quick Tips]]></category>

		<category><![CDATA[Tuning]]></category>

		<guid isPermaLink="false">http://www.singlequery.com/?p=161</guid>
		<description><![CDATA[I just recently authored a PL/SQL Server Page designed to funnel large amounts of data via the htp.p function to a web application.  Because the volume of data could be very large, I wanted to minimize the individual calls to the htp.p function (which can only take a maximum of 32767 characters per call).
The [...]]]></description>
			<content:encoded><![CDATA[<p>I just recently authored a PL/SQL Server Page designed to funnel large amounts of data via the htp.p function to a web application.  Because the volume of data could be very large, I wanted to minimize the individual calls to the htp.p function (which can only take a maximum of 32767 characters per call).</p>
<p>The answer was obviously CLOBS! I proceeded to accumulate the full multi-megabyte response in a CLOB by concatenating the individual VARCHAR2 results line by line as they came out of the database.</p>
<p>Now I’ll be the first to admit that my experience with LOBs in Oracle has been very limited.  And with the onset of SecureFiles in 11g, maybe I will never really become very proficient with LOBs.  But in my LOB naivety, I assumed that if it COULD be done, it would probably work fine.  You would think that after 15 years of Oracle development, I would know better…nope.</p>
<pre>
DECLARE
    bigLob CLOB;
    CURSOR getVarchars2 IS
         SELECT singleColumn FROM table;
BEGIN
FOR v_rec IN getVarchars2 LOOP
    bigClob := bigClob||v_rec.singleRow||linebreak;
END LOOP;
    doStuffWithTheCLOB(bigCLOB);
END;
</pre>
<p>It looks so innocent.  Append the VARCHAR2 to the end of the CLOB.  Let the database do the data type conversion from VARCHAR2 to CLOB.  No problema!  10 rows, 100 rows, 1000 rows, all working just fine.  Then came the request for 44K rows of data.  The database became very angry and would not cooperate (“Stop asking for 44k rows!”).  The user community became very angry and would not cooperate (“We need our 44k rows!”).</p>
<p>The solution is of course found in an obscure part of the <a href="http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14249/adlob_performance.htm#i1007089">Oracle documentation</a>.</p>
<p>Here are the relevant entries:<br />
•	When Possible, Read/Write Large Data Chunks at a Time: Because LOBs are big, you can obtain the best performance by reading and writing large pieces of a LOB value at a time. This helps in several respects:<br />
&nbsp;&nbsp;&nbsp;&nbsp;o	Writing to the LOB creates a new version of the LOB chunk. Therefore, writing small amounts at a time will incur the cost of a new version for each small write. If logging is on, then the chunk is also stored in the redo log.</p>
<p>•	If you use the newly provided enhanced SQL semantics functionality in your applications, then there will be many more temporary LOBs created silently in SQL and PL/SQL than before. Ensure that temporary tablespace for storing these temporary LOBs is large enough for your applications. In particular, these temporary LOBs are silently created when you use the following:<br />
&nbsp;&nbsp;&nbsp;&nbsp;	o	SQL functions on LOBs<br />
&nbsp;&nbsp;&nbsp;&nbsp;	o	PL/SQL built-in character functions on LOBs<br />
&nbsp;&nbsp;&nbsp;&nbsp;	o	Variable assignments from VARCHAR2/RAW to CLOBs/BLOBs, respectively.<br />
&nbsp;&nbsp;&nbsp;&nbsp;	o	Perform a LONG-to-LOB migration</p>
<p>I highly recommend looking at this chapter in the LOB documentation prior to working with LOBs in SQL and PL/SQL.</p>
<table>
<tr>
<td width=40>
      <a href="http://www.singlequery.com/wp-content/uploads/2007/03/thepickle.png" title="Greg Pike"><br />
        <img src="http://www.singlequery.com/wp-content/uploads/2007/03/thepickle.png" alt="Greg Pike" width="40"/><br />
      </a>
    </td>
<td style="vertical-align: center; text-align: center;">
<br /><a href="mailto:gpike@piocon.com?subject=SingleQuery Direct Comment">Greg Pike</a><br />
      <a href="http://www.piocon.com" title="PIOCON Technologies Website"><img src="http://www.singlequery.com/wp-content/uploads/2007/04/pio-redonwhite100.jpg" alt="PIOCON Technologies Website" /></a>
    </td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.singlequery.com/2008/05/quick-hint-using-lobs-with-plsql-%e2%80%93-performance-problems/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Collaborate 2008: “Aces in the Hole” Presentation</title>
		<link>http://www.singlequery.com/2008/04/collaborate-2008-%e2%80%9caces-in-the-hole%e2%80%9d-presentation/</link>
		<comments>http://www.singlequery.com/2008/04/collaborate-2008-%e2%80%9caces-in-the-hole%e2%80%9d-presentation/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 05:22:25 +0000</pubDate>
		<dc:creator>gpike</dc:creator>
		
		<category><![CDATA[Collaborate]]></category>

		<guid isPermaLink="false">http://www.singlequery.com/?p=151</guid>
		<description><![CDATA[I just returned from Collaborate 2008 in beautiful Denver, Colorado where I gave a presentation extolling the virtues of the OTN SQL and PL/SQL Forum as a learning tool for beginners and experts alike.  The presentation was designed to both inform the audience about the incredible wealth of knowledge found on the Forums as [...]]]></description>
			<content:encoded><![CDATA[<p>I just returned from Collaborate 2008 in beautiful Denver, Colorado where I gave a presentation extolling the virtues of the OTN SQL and PL/SQL Forum as a learning tool for beginners and experts alike.  The presentation was designed to both inform the audience about the incredible wealth of knowledge found on the Forums as well as to highlight the most experienced and prodigious contributors along with their unique solutions.   </p>
<p>I focused a little on the Oracle Ace program (and invited Ace Director Dan Norris to give an overview) in an attempt to demonstrate the extraordinary talent and experience of the moderators.  Finally, I ended with a case study of a single post and the myriad of solutions that the Forum Gurus brought to bear to solve the problem.  The presentation itself can be downloaded <a href="http://www.singlequery.com/wp-content/uploads/2008_2035_pike_ppt.zip">here</a>, but as with most PowerPoints, it’s just not that informative without the commentary.  If you do view it, please play it in slide show mode as it contains significant animations.</p>
<p>The presentation was well attended (especially for a last-minute Collaborate addition) and the attendees were attentive and full of questions.  Several people found me later and reported returning to the Forums for the first time in years to both read and contribute.  Mission accomplished!</p>
<p>I want to thank all of the contributors to the SQL and PL/SQL Forum and especially those that provided the content for my case study. </p>
<table>
<tr>
<td width=40>
      <a href="http://www.singlequery.com/wp-content/uploads/2007/03/thepickle.png" title="Greg Pike"><br />
        <img src="http://www.singlequery.com/wp-content/uploads/2007/03/thepickle.png" alt="Greg Pike" width="40"/><br />
      </a>
    </td>
<td style="vertical-align: center; text-align: center;">
<br /><a href="mailto:gpike@piocon.com?subject=SingleQuery Direct Comment">Greg Pike</a><br />
      <a href="http://www.piocon.com" title="PIOCON Technologies Website"><img src="http://www.singlequery.com/wp-content/uploads/2007/04/pio-redonwhite100.jpg" alt="PIOCON Technologies Website" /></a>
    </td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.singlequery.com/2008/04/collaborate-2008-%e2%80%9caces-in-the-hole%e2%80%9d-presentation/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Collaborate 2008</title>
		<link>http://www.singlequery.com/2008/03/collaborate-2008/</link>
		<comments>http://www.singlequery.com/2008/03/collaborate-2008/#comments</comments>
		<pubDate>Mon, 31 Mar 2008 03:55:35 +0000</pubDate>
		<dc:creator>jsimmons</dc:creator>
		
		<category><![CDATA[Collaborate]]></category>

		<category><![CDATA[IOUG]]></category>

		<guid isPermaLink="false">http://www.singlequery.com/?p=149</guid>
		<description><![CDATA[Greg and I will be speaking at IOUG Collaborate 08!  Come hear us or the rest of the Piocon crew and stop by Piocon&#8217;s Booth # 1619.   



Monday, April 14




			Session 501
			



			9:15 - 11:30 AM&#160;&#160;&#160; Dan Norris and Matt Topper
			

			SSL, Load Balancers, Rewrite, Redirect and More Advanced Configuration&#160;
			



Tuesday, April 15




			Session 2035
			



			9:45 - 10:45 [...]]]></description>
			<content:encoded><![CDATA[<p>Greg and I will be speaking at IOUG Collaborate 08!  Come hear us or the rest of the Piocon crew and stop by Piocon&#8217;s Booth # 1619.   </p>
<table border="0" style="border: 1px solid black">
<tbody>
<tr>
<td colspan="2"><strong>Monday, April 14</strong></td>
</tr>
<tr style="background-color: #dddddd">
<td valign="top">
<p>
			Session 501
			</p>
</td>
<td valign="top">
<p>
			9:15 - 11:30 AM&nbsp;&nbsp;&nbsp; Dan Norris and Matt Topper
			</p>
<p>
			SSL, Load Balancers, Rewrite, Redirect and More Advanced Configuration&nbsp;
			</p>
</td>
</tr>
<tr>
<td colspan="2"><strong>Tuesday, April 15</strong></td>
</tr>
<tr style="background-color: #dddddd">
<td valign="top">
<p>
			Session 2035
			</p>
</td>
<td valign="top">
<p>
			9:45 - 10:45 PM&nbsp;&nbsp;&nbsp; Greg Pike
			</p>
<p>
		        Aces in the Hole: Learning Advanced SQL Techniques from the OTN Forum Pros
			</p>
</td>
</tr>
<tr style="background-color: #dddddd">
<td valign="top">
<p>
			Session 711
			</p>
</td>
<td valign="top">
<p>
			12:15 - 1:15 PM&nbsp;&nbsp;&nbsp; Dan Norris
			</p>
<p>
			RAC SIG Experts Panel
			</p>
</td>
</tr>
<tr style="background-color: #dddddd">
<td valign="top">
<p>
			Session 110
			</p>
</td>
<td valign="top">
<p>			1:45 - 2:45 PM &nbsp;&nbsp; Roger Lenihan&nbsp;
			</p>
<p>
			Remove Spreadsheets, Checklists and Stress Out Of A Switchover, Use Data Guard Broker
			</p>
</td>
</tr>
<tr style="background-color: #dddddd">
<td valign="top">
<p>
			Session 433
			</p>
</td>
<td valign="top">
<p>
			1:45 - 2:45 PM&nbsp;&nbsp;&nbsp; Rohit Badiyani, Karen Smudde, Winslow Troy
			</p>
<p>
			Fantastic Four:&nbsp; ADF Faces, WebCenter, AJAX and SOA
			</p>
</td>
</tr>
<tr style="background-color: #dddddd">
<td valign="top">
<p>
			Session 341
			</p>
</td>
<td valign="top">
<p>
			3:30 - 4:30 PM&nbsp;&nbsp;&nbsp; Dan Norris
			</p>
<p>			Building A RAC Test Environment On VMWare For Free 
			</p>
</td>
</tr>
<tr style="background-color: #dddddd">
<td valign="top">
<p>
			Session 513
			</p>
</td>
<td valign="top">
<p>
			3:30 - 4:30 PM&nbsp;&nbsp;&nbsp; Greg Pike
			</p>
<p>
			Leveraging Oracle Portal as an Enterprise Identity Management Repository
			</p>
</td>
</tr>
<tr>
<td colspan="2"><strong>Wednesday, April 16</strong></td>
</tr>
<tr style="background-color: #dddddd">
<td valign="top">
<p>
			Session 517
			</p>
</td>
<td valign="top">
<p>
			8:30 - 9:30 AM&nbsp;&nbsp;&nbsp; Dan Norris
			</p>
<p>
			Oracle Adaptive Access Manager: What, Why, How 
			</p>
</td>
</tr>
<tr style="background-color: #dddddd">
<td valign="top">
<p>
			Session 131
			</p>
</td>
<td valign="top">
<p>
			9:45 - 10:45 AM&nbsp;&nbsp;&nbsp; Jeremy Simmons
			</p>
<p>
			Oracle Application Server High-Availability Options 
			</p>
</td>
</tr>
<tr style="background-color: #dddddd">
<td valign="top">
<p>
			Session 712
			</p>
</td>
<td valign="top">
<p>
			1:30 - 2:30 PM&nbsp;&nbsp;&nbsp; Dan Norris
			</p>
<p>
			Oracle RAC SIG Birds-of-a-Feather
			</p>
</td>
</tr>
<tr style="background-color: #dddddd">
<td valign="top">
<p>
			Session 232
			</p>
</td>
<td valign="top">
<p>
			4:30 - 5:30 PM&nbsp;&nbsp;&nbsp; Matthew Vranicar
			</p>
<p>
			2008:&nbsp; A BI Odyssey
			</p>
</td>
</tr>
<tr>
<td colspan="2"><strong>Thursday, April 17</strong></td>
</tr>
<tr style="background-color: #dddddd">
<td valign="top">
<p>
			Session 379
			</p>
<p>
			&nbsp;
			</p>
</td>
<td valign="top">
<p>
			9:45 - 10:45 AM&nbsp;&nbsp;&nbsp; Dan Norris
			</p>
<p>
			To RAC or Not To RAC: What&#39;s Best For HA? </p>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.singlequery.com/2008/03/collaborate-2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SingleQuery had Wordpress Problems</title>
		<link>http://www.singlequery.com/2008/03/wordpress-problems/</link>
		<comments>http://www.singlequery.com/2008/03/wordpress-problems/#comments</comments>
		<pubDate>Mon, 31 Mar 2008 03:41:09 +0000</pubDate>
		<dc:creator>jsimmons</dc:creator>
		
		<category><![CDATA[About SingleQuery.com]]></category>

		<guid isPermaLink="false">http://www.singlequery.com/?p=148</guid>
		<description><![CDATA[SingleQuery was out of commission for a short (actually, long!) while but we&#8217;ve fixed the issues and upgraded to Wordpress 2.5!
Look for more posts soon.
Jeremy
]]></description>
			<content:encoded><![CDATA[<p>SingleQuery was out of commission for a short (actually, long!) while but we&#8217;ve fixed the issues and upgraded to Wordpress 2.5!</p>
<p>Look for more posts soon.</p>
<p>Jeremy</p>
]]></content:encoded>
			<wfw:commentRss>http://www.singlequery.com/2008/03/wordpress-problems/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Pivot and Unpivot in 11g</title>
		<link>http://www.singlequery.com/2007/12/pivot-and-unpivot-in-11g/</link>
		<comments>http://www.singlequery.com/2007/12/pivot-and-unpivot-in-11g/#comments</comments>
		<pubDate>Wed, 19 Dec 2007 16:53:31 +0000</pubDate>
		<dc:creator>malam</dc:creator>
		
		<category><![CDATA[Oracle 11g]]></category>

		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.singlequery.com/?p=146</guid>
		<description><![CDATA[
Pivot
The Pivot clause is a new feature that has been introduced with the introduction of 11g.The simple logic behind the Pivot clause is that it enables the user to rotate rows into columns in the output of a query and at the same time enable the user to run aggregate functions on the data.
Unpivot
Unpivot clause [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>Pivot</p></div>
<div>The Pivot clause is a new feature that has been introduced with the introduction of 11g.The simple logic behind the Pivot clause is that it enables the user to rotate rows into columns in the output of a query and at the same time enable the user to run aggregate functions on the data.</p>
<p>Unpivot</p></div>
<div>Unpivot clause is also a new built in Analytical function that is introduced with the release of 11g,unpivot clause lets the user rotate columns into rows in the output from a query.</p>
<p>Examples to illustrate the use of Pivot clause</p>
<p>If you can log in to the Scott schema of the database then skip step 2 and 3 to execute the query directly</p>
<p>However , If you want to create the table in your database and then run the query please follow steps 1 through 3</p>
<p>1.
</p></div>
<pre></pre>
<pre>
<div>CREATE TABLE emp
( empno    NUMBER(4,0),
  ename    VARCHAR2(10 BYTE),
  job      VARCHAR2(9 BYTE),
  mgr      NUMBER(4,0),
  hiredate DATE,
  sal      NUMBER(7,2),
  comm     NUMBER(7,2),
  deptno   NUMBER(2,0)
); </div>
<div></div>
</pre>
<p>2.Insert Script</p>
<p>The script below can be used to insert data into the table created in step 1.</p>
<pre></pre>
<pre>INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno)VALUES ('7369','SMITH','CLERK','7902',TO_DATE('17-Dec-80','DD-MON-RR'),'800','0','30');</pre>
<pre>INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno)VALUES ('7499','ALLEN','SALESMAN','7698',TO_DATE('20-Feb-81','DD-MON-RR'),'1600','300','30');</pre>
<pre>INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno)VALUES ('7521','WARD','SALESMAN','7698',TO_DATE('22-Feb-81','DD-MON-RR'),'1250','500','30');</pre>
<pre>INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno)VALUES ('7525','JACK','SALESMAN','7690',TO_DATE('26-Sep-81','DD-MON-RR'),'1550','500','20');</pre>
<pre>INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno)VALUES ('7527','JONES','CLERK','7622',TO_DATE('22-Feb-81','DD-MON-RR'),'1000','300','20');</pre>
<pre>INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno)VALUES ('7521','KANYE','PRESIDENT','',TO_DATE('28-Feb-81','DD-MON-RR'),'5000','500','20');</pre>
<pre>INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno)VALUES ('7500','SAM','SALESMAN','7689',TO_DATE('23-Feb-81','DD-MON-RR'),'1257','500','10');</pre>
<pre>INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno)VALUES ('7400','JOE','MANAGER','7607',TO_DATE('22-Feb-81','DD-MON-RR'),'1540','300','10');</pre>
<pre>INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno)VALUES ('7521','WARD','SALESMAN','7698',TO_DATE('22-Feb-81','DD-MON-RR'),'1250','500','10');
COMMIT;
/
</pre>
<pre>3.Pivot Query
</pre>
<pre>
<pre>
SELECT *
FROM (SELECT deptno,sal
      FROM emp
      WHERE deptno &gt; 0
)
PIVOT (SUM(sal) AS SUM_AMOUNT FOR (deptno) IN (10 AS ACCOUNTING ,20 AS RESEARCH,30 AS SALES,40 AS OPERATIONS));
</pre>
</pre>
<p>/*<br />
General Form of query using PIVOT clause<br />
SELECT * FROM (INNER QUERY)<br />
PIVOT (<br />
AGGREGATE_FUNCTION<br />
FOR (COLUMN TO BE PIVOTED) IN (LIST OF VALUES));<br />
*/ </p>
<p>A single Pivot clause can also support multiple Aggregate Functions.<br />
PIVOT CLAUSE provides great support to businesses which would like to do a detailed analysis on their Sales methodology and help them make future decisions on their sales and marketing strategies.</p>
<p>Using the UNPIVOT clause</p>
<p>The UNPIVOT clause rotates columns into rows.UNPIVOT clause is useful when a user has to execute a query that returns many columns , using the UNPIVOT clause the user can view those columns as rows.</p>
<p>Lets Illustrate the concept discussed above</p>
<p>1.Create a table pivot_emp_data using the query in step 3 as</p>
<pre>
CREATE TABLE pivot_emp_data AS
SELECT *
FROM (SELECT deptno,sal
              FROM emp
              WHERE deptno &gt; 0
)
PIVOT (SUM(sal) AS SUM_AMOUNT
FOR (deptno)
IN (10 AS ACCOUNTING ,20 AS RESEARCH,30 AS SALES,40 AS OPERATIONS);
</pre>
<p>2.Once the table has been created we can run the query below</p>
<pre>
SELECT *
  FROM pivot_emp_data
  UNPIVOT
(sal FOR deptno
IN(ACCOUNTING_SUM_AMOUNT,RESEARCH_SUM_AMOUNT,SALES_SUM_AMOUNT,OPERATIONS_SUM_AMOUNT))
</pre>
<p>The Query rotates the pivoted Data .Also , do realize that If you are working with pivoted data, an UNPIVOT operation cannot reverse any aggregations that have been made by PIVOT or any other means.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.singlequery.com/2007/12/pivot-and-unpivot-in-11g/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Oracle VM</title>
		<link>http://www.singlequery.com/2007/11/oracle-vm/</link>
		<comments>http://www.singlequery.com/2007/11/oracle-vm/#comments</comments>
		<pubDate>Sun, 18 Nov 2007 06:12:28 +0000</pubDate>
		<dc:creator>jsimmons</dc:creator>
		
		<category><![CDATA[OpenWorld]]></category>

		<category><![CDATA[Virtualization]]></category>

		<guid isPermaLink="false">http://www.singlequery.com/?p=145</guid>
		<description><![CDATA[One of the big announcements at Oracle OpenWorld last week was Oracle VM. I&#8217;m a big fan of virtualization and have worked a lot with VMWare, but honestly I&#8217;ve never paid much attention to Xen (which Oracle VM is based on).
Here&#8217;s some item&#8217;s I found interesting:
Oracle VM (based on Xen) requires the linux guest OS [...]]]></description>
			<content:encoded><![CDATA[<p>One of the big announcements at Oracle OpenWorld last week was <a href="http://www.oracle.com/technology/tech/virtualization/index.html">Oracle VM</a>. I&#8217;m a big fan of virtualization and have worked a lot with <a href="http://www.vmware.com">VMWare</a>, but honestly I&#8217;ve never paid much attention to <a href="http://www.xensource.com">Xen</a> (which Oracle VM is based on).</p>
<p>Here&#8217;s some item&#8217;s I found interesting:</p>
<p><strong>Oracle VM (based on Xen) requires the linux guest OS to be modified with paravirtualization drivers, Windows requires Hardware Assist and will likely run slower then OEL or RedHat until suitable paravirtualization drivers are delivered.<br />
</strong></p>
<p>From: VMWare&#8217;s &#8220;<a href="http://www.vmware.com/pdf/hypervisor_performance.pdf">A Performance Comparison of Hypervisors</a>&#8221;</p>
<blockquote><p>The <strong>full virtualization</strong> approach allows datacenters to run an unmodified guest operating system, thus maintaining the existing investments in operating systems and applications and providing a nondisruptive migration to virtualized environments. VMware uses a combination of direct execution and binary translation techniques to achieve full virtualization of an x86 system </p>
<p>The <strong>paravirtualization</strong> approach modifies the guest operating system to eliminate the need for binary translation. Therefore it offers potential performance advantages for certain workloads but requires using specially modified operating system kernels. The Xen open source project [and there by Oracle VM] was designed initially to support paravirtualized operating systems. While it is possible to modify open source operating systems, such as Linux and OpenBSD, it is not possible to modify “closed” source operating systems such as Microsoft Windows . It is also not practical to modify older versions of open source operating systems that are already in use. As it turns out, Microsoft Windows is the most widely deployed operating system in enterprise datacenters. For such unmodified guest operating systems, a virtualization hypervisor must either adopt the full virtualization approach or rely on hardware virtualization in the processor architecture. </p>
<p>The <strong>hardware virtualization</strong> support enabled by AMD-V and Intel VT technologies introduces virtualization in the x86 processor architecture itself. While first-generation hardware assist support includes CPU virtualization only, later generations are expected to include memory and I/O virtualization as well. The emergence of virtualization hardware assist reduces the need to paravirtualize guest operating systems. In fact, Xen vendors such as Virtual Iron have announced that they are supporting only full virtualization using AMD-V and Intel VT processors and are not supporting paravirtualization </p>
</blockquote>
<p>It looks like paravirtualization and hardware assist are the future for the hypervisor until then check out:</p>
<p><a href="http://blogs.vmware.com/performance/2007/11/ten-reasons-why.html">Ten Reasons Why Oracle Databases Run Best on VMware</a> (this is an interesting read but it does point out that a lot of important features relative to Oracle are not coming until the 3.5 ESX release)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.singlequery.com/2007/11/oracle-vm/feed/</wfw:commentRss>
		</item>
		<item>
		<title>When Logging Off Crashes Your OC4J Container</title>
		<link>http://www.singlequery.com/2007/11/when-logging-off-crashes-your-oc4j-container/</link>
		<comments>http://www.singlequery.com/2007/11/when-logging-off-crashes-your-oc4j-container/#comments</comments>
		<pubDate>Fri, 02 Nov 2007 03:31:24 +0000</pubDate>
		<dc:creator>jsimmons</dc:creator>
		
		<category><![CDATA[App Server]]></category>

		<guid isPermaLink="false">http://www.singlequery.com/?p=144</guid>
		<description><![CDATA[Dan and I were at a client whose custom OC4J Containers running in Windows 2003 SE on VMWare were crashing randomly. To make the situation more complex the default containers (Home and WebCenter) from Oracle were not crashing.
Eventually we correlated the bulk of the OC4J crashes to admins logging out of VMWare Console and Remote [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dannorris.com">Dan</a> and I were at a client whose custom OC4J Containers running in Windows 2003 SE on VMWare were crashing randomly. To make the situation more complex the default containers (Home and WebCenter) from Oracle were not crashing.</p>
<p>Eventually we correlated the bulk of the OC4J crashes to admins logging out of VMWare Console and Remote Desktop with /console option.</p>
<p>Turns out that when you create a custom OC4J container in Application Server Control Oracle does not include -Xrs as a Java option even though it is included with the standard containers they deliver with 10.1.3.x.</p>
<p>The -Xrs option tells the JVM to ignore most signals from the OS level otherwise the JVM will exit thereby unexpectedly terminating the OC4J container and all running threads running within it.</p>
<p>Based on this Metalink article this appears to be a known issue since at least 2003. Maybe in 11g Oracle will include this option by default.<br />
Subject: Unexpected JVM Termination in Response to Logout From Windows Console<br />
Doc ID: Note:245609.1<br />
Last Revision Date: 11-AUG-2003</p>
<p>Below is a <a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/java.html">snippet</a> of the Java application launcher detail on the -Xrs option </p>
<p><em>-Xrs<br />
    Reduces usage of operating-system signals by the Java virtual machine (JVM). This option is available beginning with J2SE 1.3.1.</p>
<p>    In J2SE 1.3.0, the Shutdown Hooks facility was added to allow orderly shutdown of a Java application. The intent was to allow user cleanup code (such as closing database connections) to run at shutdown, even if the JVM terminates abruptly.</p>
<p>    The JVM watches for console control events to implement shutdown hooks for abnormal JVM termination. Specifically, the JVM registers a console control handler which begins shutdown-hook processing and returns TRUE for CTRL_C_EVENT, CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT, and CTRL_SHUTDOWN_EVENT.</p>
<p>    The JVM uses a similar mechanism to implement the pre-1.2 feature of dumping thread stacks for debugging purposes. Sun&#8217;s JVM uses CTRL_BREAK_EVENT to perform thread dumps.</p>
<p>    If the JVM is run as a service (for example, the servlet engine for a web server), it can receive CTRL_LOGOFF_EVENT but should not initiate shutdown since the operating system will not actually terminate the process. To avoid possible interference such as this, the -Xrs command-line option has been added beginning with J2SE 1.3.1. When the -Xrs option is used on Sun&#8217;s JVM, the JVM does not install a console control handler, implying that it does not watch for or process CTRL_C_EVENT, CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT, or CTRL_SHUTDOWN_EVENT.</p>
<p>    There are two consequences of specifying -Xrs:</p>
<p>        * Ctrl-Break thread dumps are not available.<br />
        * User code is responsible for causing shutdown hooks to run, for example by calling System.exit() when the JVM is to be terminated. </em></p>
<p>Jeremy Simmons<br />
<a href='http://www.piocon.com' title='PIOCON Technologies'><img src='http://www.singlequery.com/wp-content/uploads/2007/04/pio-redonwhite100.jpg' alt='PIOCON Technologies Logo' /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.singlequery.com/2007/11/when-logging-off-crashes-your-oc4j-container/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
