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

<channel>
	<title>Tanel Poder's blog: Core IT for Geeks and Pros &#187; Oracle 11g</title>
	<atom:link href="http://blog.tanelpoder.com/category/oracle-11g/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tanelpoder.com</link>
	<description>Oracle troubleshooting, internals and performance tuning</description>
	<lastBuildDate>Sat, 31 Jul 2010 05:44:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>The full power of Oracle&#8217;s diagnostic events, part 2: ORADEBUG DOC and 11g improvements</title>
		<link>http://blog.tanelpoder.com/2010/06/23/the-full-power-of-oracles-diagnostic-events-part-2-oradebug-doc-and-11g-improvements/</link>
		<comments>http://blog.tanelpoder.com/2010/06/23/the-full-power-of-oracles-diagnostic-events-part-2-oradebug-doc-and-11g-improvements/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 11:46:31 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Cool stuff]]></category>
		<category><![CDATA[Internals]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle 11g]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Troubleshooting]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/?p=697</guid>
		<description><![CDATA[I haven&#8217;t written any blog entries for a while, so here&#8217;s a very sweet treat for low-level Oracle troubleshooters and internals geeks out there :) Over a year ago I wrote that Oracle 11g has a completely new low-level kernel diagnostics &#38; tracing infrastructure built in to it. I wanted to write a longer article [...]]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t written any blog entries for a while, so here&#8217;s a very sweet treat for low-level Oracle troubleshooters and internals geeks out there :)</p>
<p>Over a year ago <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vMjAwOS8wMy8wMy90aGUtZnVsbC1wb3dlci1vZi1vcmFjbGVzLWRpYWdub3N0aWMtZXZlbnRzLXBhcnQtMS1zeW50YXgtZm9yLWtzZC1kZWJ1Zy1ldmVudC1oYW5kbGluZy8=" target=\"_blank\">I wrote</a> that Oracle 11g has a completely new low-level kernel diagnostics &amp; tracing infrastructure built in to it. I wanted to write a longer article about it with comprehensive examples and use cases, but by now I realize I won&#8217;t ever have time for this, so I&#8217;ll just point you to the right direction :)</p>
<p>Basically, since 11g, you can use SQL_Trace, kernel undocumented traces, various dumps and other actions at much better granularity than before.</p>
<p>For example, you can enable SQL_Trace for a specific SQL_ID only:</p>
<pre>SQL&gt; alter session set events 'sql_trace[<strong>SQL: 32cqz71gd8wy3</strong>] 
<span style="font-size: 11.6667px;">{<strong>pgadep: exactdepth 0</strong>} {<strong>callstack: fname opiexe</strong>}
plan_stat=all_executions,wait=true,bind=true';</span>
<span style="font-size: 11.6667px;">
</span>
<span style="font-size: 11.6667px;">Session altered.</span></pre>
<p><span style="font-size: 13.3333px;">Actually I have done more in above example, I have also said that trace only when the PGA depth (the dep= in tracefile) is zero. This means that trace only top-level calls, issued directly by the client application and not recursively by some PL/SQL or by dictionary cache layer. Additionally I have added a check whether we are currently servicing opiexe function (whether the current call stack contains opiexe as a (grand)parent function) &#8211; this allows to trace &amp; dump only in specific cases of interest!</span></p>
<p>The syntax is actually more powerful than that, in this example I&#8217;m running kernel tracing for a kernel component plus instructing Oracle to dump various other things at level 1 (callstack,process state and query block debug info) whenever a tracepoint (event) in the SQL Transformation component family is hit:</p>
<pre>SQL&gt; alter session set events 'trace[<strong>RDBMS.SQL_Transform</strong>] <span style="font-size: 11.6667px;">[<strong>SQL: 32cqz71gd8wy3</strong>]
disk=high <strong>RDBMS.query_block_dump(1) processstate(1) callstack(1)</strong>';</span>
<span style="font-size: 11.6667px;">
</span>
<span style="font-size: 11.6667px;">Session altered.</span></pre>
<p>And by now you are probably asking that where is this syntax formally documented? Google and MOS searches don&#8217;t return anything useful. Well, as with many other things, a good reference is stored within Oracle kernel itself!</p>
<p>Just log on as sysdba and type ORADEBUG DOC:</p>
<p><strong>ORADEBUG DOC</strong></p>
<pre>SQL&gt; oradebug doc</pre>
<pre>Internal Documentation
<span style="font-size: 11.6667px;">**********************
</span><span style="font-size: 11.6667px;">EVENT                           Help on events (syntax, event list, ...)
</span><span style="font-size: 11.6667px;">COMPONENT       [&lt;comp_name&gt;]   List all components or describe &lt;comp_name&gt;</span></pre>
<p>This gives you the index page, now you can navigate on by running ORADEBUG DOC EVENT and take it from there. There&#8217;s lots of documentation there!</p>
<p><span style="font-size: 13.3333px;">I have put the output with some comments and examples into my website too:</span></p>
<p><span style="font-size: 13.3333px;"><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3RlY2guZTJzbi5jb20vb3JhY2xlL3Ryb3VibGVzaG9vdGluZy9vcmFkZWJ1Zy1kb2M=" target=\"_blank\">http://tech.e2sn.com/oracle/troubleshooting/oradebug-doc</a></span></p>
<p>Note that this feature is quite fresh, almost not used at all in the real (production) world, so I consider this quite experimental. I have managed to crash my session with some tests, so take the usual advice about any undocumented stuff (and oradebug) &#8211; don&#8217;t use it in production without thinking first and if you do use it, then use it at your own risk!</p>
<div class="facebook_like_button"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.tanelpoder.com%2F2010%2F06%2F23%2Fthe-full-power-of-oracles-diagnostic-events-part-2-oradebug-doc-and-11g-improvements%2F&amp;layout=standard&amp;show-faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="padding: 0px 0px; border:none; overflow:hidden; width:450px; height:70px;"></iframe></div> <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=697" width="1" height="1" style="display: none;" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.tanelpoder.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2010/06/23/the-full-power-of-oracles-diagnostic-events-part-2-oradebug-doc-and-11g-improvements/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>cursor: pin S waits, sporadic CPU spikes and systematic troubleshooting</title>
		<link>http://blog.tanelpoder.com/2010/04/21/cursor-pin-s-waits-sporadic-cpu-spikes-and-systematic-troubleshooting/</link>
		<comments>http://blog.tanelpoder.com/2010/04/21/cursor-pin-s-waits-sporadic-cpu-spikes-and-systematic-troubleshooting/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 21:55:09 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Internals]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle 11g]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Troubleshooting]]></category>
		<category><![CDATA[Unix/Linux]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/?p=673</guid>
		<description><![CDATA[I recently consulted one big telecom and helped to solve their sporadic performance problem which had troubled them for some months. It was an interesting case as it happened in the Oracle / OS touchpoint and it was a product of multiple &#8220;root causes&#8221;, not just one, an early Oracle mutex design bug and a [...]]]></description>
			<content:encoded><![CDATA[<p>I recently consulted one big telecom and helped to solve their sporadic performance problem which had troubled them for some months. It was an interesting case as it happened in the Oracle / OS touchpoint and it was a product of multiple &#8220;root causes&#8221;, not just one, an early Oracle mutex design bug and a Unix scheduling issue &#8211; that&#8217;s why it had been hard to resolve earlier despite multiple SRs opened etc.</p>
<p><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL21hcnRpbm1leWVyLmJsb2dzcG90LmNvbS8=" target=\"_blank\">Martin Meyer</a>, their lead DBA, posted some info about the problem and technical details, so before going on, you should read his blog entry and read my comments below after this:</p>
<ul>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL21hcnRpbm1leWVyLmJsb2dzcG90LmNvbS8yMDEwLzA0L2xvbmctd2FpdC10aW1lcy1mb3ItY3Vyc29yLXBpbi1zLWFuZC5odG1s" target=\"_blank\">http://martinmeyer.blogspot.com/2010/04/long-wait-times-for-cursor-pin-s-and.html</a></li>
</ul>
<p><strong>Problem:</strong></p>
<p>So, the problem was, that occasionally the critical application transactions which should have taken very short time in the database (&lt;1s), took 10-15 seconds or even longer and timed out.</p>
<p><strong>Symptoms:</strong></p>
<ol>
<li>When the problem happened, the CPU usage also jumped up to 100% for the problem duration (from few tens of seconds up to few minutes).</li>
<li>In AWR snapshots (taken every 20 minutes), the &#8220;cursor: pin S&#8221; popped into top TOP5 waits (around 5-10% of total instance wait time) and sometimes also &#8220;cursor: pin S wait on X&#8221; which is a different thing, also &#8220;latch: library cache&#8221; and interestingly &#8220;log file sync&#8221;. These waits had then much higher average wait times per wait occurrence than normal (tens or hundreds of milliseconds per wait, on average).</li>
<li>The V$EVENT_HISTOGRAM view showed lots of cursor: pin S waits taking very long time (over a second, some even 30+ seconds) and this certainly isn&#8217;t normal (Martin has these numbers in his blog entry)</li>
</ol>
<p>AWR and OS CPU usage measurement tools are system-wide tools (as opposed to session-wide tools).</p>
<p><strong>Troubleshooting:</strong></p>
<p><em>I can&#8217;t give you exact numbers or AWR data here, but will explain the flow of troubleshooting and reasoning.</em></p>
<ul>
<li>As the symptoms involved CPU usage spikes, I first checked whether there were perhaps<em> logon storms</em> going on due a bad application server configuration, where the app server suddenly decides to fire up hundreds of more connections at the same time (that happens quite often, so it&#8217;s a usual suspect when troubleshooting such issues). A logon storm can consume lots of CPU as all these new processes need to be started up in OS, they attach to SGA (syscalls, memory pagetable set-up operations) and eventually they need to find &amp; allocate memory from shared pool and initialize session structures. This all takes CPU.However the <em>logons cumulative</em> statistic in AWR didn&#8217;t go up almost at all during the 20 minute snapshot, so that ruled out a logon storm. As the number of sessions in the end of AWR snapshot (compared to the beginning of it) did not go down, this ruled out a <em>logoff</em> storm too (which also consumes CPU as now the exiting processes need to release their resources etc).</li>
</ul>
<ul>
<li>It&#8217;s worth mentioning that <em>log file sync</em> waits also went up by over an order of magnitude (IIRC from 1-2ms to 20-60 ms per wait) during the CPU spikes. However as <em>log file parallel write</em> times didn&#8217;t go up so radically, this indicated that the log file sync wait time was wasted somewhere else too &#8211; which is very likely going to be CPU scheduling latency (waiting on the CPU runqueue) when CPUs are busy.</li>
</ul>
<ul>
<li>As one of the waits which popped up during the problem was cursor: pin S, then I chcecked V$MUTEX_SLEEP_HISTORY and it did not show any specific cursor as a significant contention point (all contention recorded in that sleep history buffer was evenly spread across many different cursors), so that indicated to me that the problem was likely not related to a single cursor related issue (a bug or just too heavy usage of that cursor). Note that this view was not queried during the worst problem time, so there was a chance that some symptoms were not in there anymore (V$MUTEX_SLEEP_HISTORY is a circular buffer of few hundred last mutex sleeps).</li>
</ul>
<ul>
<li>So, we had CPU starvation and very long cursor: pin S waits popping up at the same time. cursor: pin S operation should happen really fast as it&#8217;s a very simple operation (few tens of instructions only) of marking the cursor&#8217;s mutex <em>in-flux </em>so its reference count could be bumped up for a shared mutex get.</li>
</ul>
<ul>
<li>Whenever you see CPU starvation (CPUs 100% busy and runqueues are long) <em>and </em>latch or mutex contention, then the CPU starvation should be resolved first, as the contention may just be a symptom of the CPU starvation. The problem is that if you get unlucky and a latch or mutex holder process is preempted and taken off CPU by the scheduler, the latch/mutex holder can&#8217;t release the latch before it gets back onto CPU to complete its operation! But OS doesn&#8217;t have a clue about this, as latches/mutexes are just Oracle&#8217;s memory structures in SGA. So the latch/mutex holder is off CPU and everyone else who gets onto CPU may want to take the same latch/mutex. They can&#8217;t get it and spin shortly in hope that the holder releases it in next few microseconds, which isn&#8217;t gonna happen in this case, as the latch/mutex holder is still off CPU!</li>
</ul>
<ul>
<li>And now comes a big difference between latches and mutexes in Oracle 10.2: When a latch getter can&#8217;t get the latch after spinning, it will go to sleep to release the CPU. Even if there are many latch getters in the CPU runqueue before the latch holder, they all spin quickly and end up sleeping again. But when a mutex getter doesn&#8217;t get the mutex after spinning, it will not go to sleep!!! It will yield() the CPU instead, which means that it will go to the end of runqueue and try to get back onto CPU as soon as possible. So, mutex getters in 10.2 are much less graceful, they can burn a lot of CPU when the mutex they want is held by someone else for long time.</li>
<li>But so what, if a mutex holder is preempted and taken off CPU by OS scheduler &#8211; it should get back onto CPU pretty fast, once it works its way through the CPU runqueue?</li>
</ul>
<ul>
<li>Well, yes IF all the processes in the system have the same priority.</li>
</ul>
<ul>
<li>This is where a second problem comes into play &#8211; Unix process priority decay. When a process eats a lot of CPU (and does little IO / voluntary sleeping) then the OS lowers that processes CPU scheduling priority so that other, less CPU hungry processes would still get their fair share of CPU (especially when coming back from an IO wait for example etc).</li>
</ul>
<ul>
<li>When a mutex holder has a lower priority than most other processes and is now taken off CPU, a thing called <em>priority inversion</em> happens. Even though other processes do have higher priority, they can not proceed, as the critical lock or resource they need, is already held by the other process with a lower priority who can&#8217;t complete its work as the &#8220;high priority&#8221; processes keep the CPUs busy.</li>
</ul>
<ul>
<li>In case of latches, the problem is not that bad as the latch getters go to sleep until they are posted when the latch is released by the holder process (I&#8217;ve written about it <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vMjAwOS8wMS8yMC9yZWxpYWJsZS1sYXRjaC13YWl0cy1hbmQtYS1uZXctYmxvZy8=" target=\"_blank\">here</a>). But the priority inversion takes a crazy turn in case of mutexes &#8211; as their getters don&#8217;t sleep (not even for a short time) by default, but yield the CPU and try to get back to it immediately and so on until they get the mutex. That can lead to huge CPU runqueue spikes, unresponsive systems and even hangs.</li>
</ul>
<ul>
<li>This is why starting from Oracle 11g the mutex getters do sleep instead of just yielding the CPU and also Oracle has backported the fix into Oracle 10.2.0.4, where a patch must be applied and where the <em>_first_spare_parameter</em> will specify the sleep duration in centiseconds.</li>
</ul>
<ul>
<li>So, knowing how mutexes worked in 10.2, all the symptoms led me to suspect this priority inversion problem, greatly amplified by how the mutex getters do never sleep by default. And we checked the effective priorities of all Oracle processes in the server, and we hit the jackpot &#8211; there was a number of processes with significantly lower priorities than all other processes had. And it takes only one process with low priority to cause all this trouble, just wait until it starts modifying a mutex and is preempted while doing this.</li>
</ul>
<ul>
<li>So, in order to fix both of the problems which amplified each other, we had to enable HPUX_SCHED_NOAGE Oracle parameter, to prevent priority decay of the processes and set the _first_spare_parameter to 10, which meant that default mutex sleep time will be 10 centiseconds (which is pretty long time in mutex/latching world, but better than crazily retrying without any sleeping at all). That way no process (the mutex holder) is pushed back and kept away from CPU for long periods of time.</li>
</ul>
<p>This was not a trivial problem, as it happened in Oracle / OS touchpoint and happened not because a single reason, but as a product of multiple separate reasons, amplifying each other.</p>
<p>There are few interesting, non-technical points here:</p>
<ol>
<li>When troubleshooting, don&#8217;t let performance tools like AWR (or any other tool!) tell you what your <em>problem</em> is! Your business, your users should tell you what the problem is and the tools should only be used for symptom drilldown (This is what <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2NhcnltaWxsc2FwLmJsb2dzcG90LmNvbS8=" target=\"_blank\">Cary Millsap</a> has been constantly telling us). Note how I mentioned the problem and symptoms separately in the beginning of my post &#8211; and the problem was that some business transactions (systemwide) timed out because the database response time was 5-15 seconds!</li>
<li>The detail and scope of your performance data must have <em>at least </em>as good detail and scope of your performance problem!<br />
In other words, if your problem is measured in few seconds, then your performance data should also be sampled at least every few seconds in order to be fully systematic.</p>
<p>The classic issue in this case was that the 20 minute AWR reports still showed IO wait times as main DB time consumers, but that was averaged over 20 minutes. But our <em>problem</em> happened severely and shortly within few seconds in that 20 minutes, so the averaging and aggregation over long period of time did hide the extreme performance issue that happened in a very short time.</li>
</ol>
<p>Next time when it seems to be impossible to diagnose a problem and if the troubleshooting effort ends up going in circles, then you should ask, &#8220;what&#8217;s the real problem and who and how is experiencing it&#8221; and see if your performance data&#8217;s detail and scope matches that problem!</p>
<p>Oh, this is a good point to mention that in addition to my Advanced Oracle Troubleshooting/SQL Tuning <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3RlY2guZTJzbi5jb20vb3JhY2xlLXRyYWluaW5nLXNlbWluYXJz">seminars</a> I also actually perform advanced Oracle troubleshooting <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vY29udGFjdC8=">consulting</a> too! I eat mutexes for breakfast ;-)</p>
<div class="facebook_like_button"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.tanelpoder.com%2F2010%2F04%2F21%2Fcursor-pin-s-waits-sporadic-cpu-spikes-and-systematic-troubleshooting%2F&amp;layout=standard&amp;show-faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="padding: 0px 0px; border:none; overflow:hidden; width:450px; height:70px;"></iframe></div> <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=673" width="1" height="1" style="display: none;" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.tanelpoder.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2010/04/21/cursor-pin-s-waits-sporadic-cpu-spikes-and-systematic-troubleshooting/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>New seminars and dates announced</title>
		<link>http://blog.tanelpoder.com/2010/01/27/new-seminars-and-dates-announced/</link>
		<comments>http://blog.tanelpoder.com/2010/01/27/new-seminars-and-dates-announced/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 11:40:31 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Cool stuff]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle 11g]]></category>
		<category><![CDATA[Oracle 11gR2]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Troubleshooting]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/?p=592</guid>
		<description><![CDATA[I have been very busy over last months (as you see from the lack of blog entries). Part of the reason is that I&#8217;ve been building new seminar material and now I&#8217;m pleased to announce some first seminar dates! I have updated new seminar dates and cities in m new webpage: http://tech.e2sn.com/oracle-training-seminars From April 2010 [...]]]></description>
			<content:encoded><![CDATA[<p>I have been very busy over last months (as you see from the lack of blog entries). Part of the reason is that I&#8217;ve been building new seminar material and now I&#8217;m pleased to announce some first seminar dates!</p>
<p>I have updated new seminar dates and cities in m new webpage:</p>
<ul>
<li><strong><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3RlY2guZTJzbi5jb20vb3JhY2xlLXRyYWluaW5nLXNlbWluYXJz" target=\"_blank\">http://tech.e2sn.com/oracle-training-seminars</a></strong></li>
</ul>
<p>From April 2010 I offer total 3 different seminars</p>
<ul>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3RlY2guZTJzbi5jb20vb3JhY2xlLXRyYWluaW5nLXNlbWluYXJz" target=\"_blank\">Advanced Oracle Troubleshooting v2.0</a> (3 days)</li>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3RlY2guZTJzbi5jb20vb3JhY2xlLXRyYWluaW5nLXNlbWluYXJz" target=\"_blank\">Advanced Oracle SQL Tuning</a> (3 days)</li>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3RlY2guZTJzbi5jb20vb3JhY2xlLXRyYWluaW5nLXNlbWluYXJz" target=\"_blank\">Partitioning and Parallel Execution for Performance</a> (1 day)</li>
</ul>
<p>I have rearranged the Advanced Oracle Troubleshooting class based on customer feedback, removed some content, added new content and I think this deserves a new version number, 2.0.</p>
<p>Also, I created an entirely new class <strong>Advanced Oracle SQL Tuning</strong> which should provide the same for SQL tuners that my Advanced Oracle Troubleshooting class has provided for database troubleshooters. This class will <em>not</em> start with CBO concepts and how SQL execution might work in theory, insead we will start from going very deep into understanding how Oracle <em>really</em> executes SQL execution plans and what is the data flow order and hierarchy in the execution plan tree.</p>
<p>From there we go on into learning how to read execution plans of any complexity and how to control SQL execution plans &#8211; how to make them do exactly what we want. And CBO topics will come in the end &#8211; by then the CBO fundamental concepts such as Cardinality, Density and IO/CPU Cost will make good sense and are not just some arbitrary names for some magic numbers coming from the optimizer ;-)</p>
<p>In addition, I separated Parallel Execution and Partitioning topics (which not everyone is using) into a separate 1-day seminar, <strong>Oracle Partitioning and Parallel Execution for Performance</strong>, which I usually deliver right after the 3-day SQL tuning seminar.</p>
<p>In coming days I also plan to upload some SQL tuning related content to tech.e2sn.com to show the quality of the upcoming seminar ;-)</p>
<p>So, feel free to check out the seminar dates and descriptions here:</p>
<ul>
<li><strong><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3RlY2guZTJzbi5jb20vb3JhY2xlLXRyYWluaW5nLXNlbWluYXJz" target=\"_blank\">http://tech.e2sn.com/oracle-training-seminars</a> </strong></li>
</ul>
<div class="facebook_like_button"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.tanelpoder.com%2F2010%2F01%2F27%2Fnew-seminars-and-dates-announced%2F&amp;layout=standard&amp;show-faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="padding: 0px 0px; border:none; overflow:hidden; width:450px; height:70px;"></iframe></div> <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=592" width="1" height="1" style="display: none;" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.tanelpoder.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2010/01/27/new-seminars-and-dates-announced/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Oracle 11gR2 has been released &#8211; and with column oriented storage option</title>
		<link>http://blog.tanelpoder.com/2009/09/01/oracle-11gr2-has-been-released-and-with-column-oriented-storage-option/</link>
		<comments>http://blog.tanelpoder.com/2009/09/01/oracle-11gr2-has-been-released-and-with-column-oriented-storage-option/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 18:07:05 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle 11g]]></category>
		<category><![CDATA[Oracle 11gR2]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/?p=429</guid>
		<description><![CDATA[You may already have noticed that Oracle 11gR2 for Linux is available for download on Oracle.com website, with documentation. And this document ends speculation about whether Oracle 11.2 will support column-oriented storage &#8211; yes it will: http://www.oracle.com/technology/products/database/oracle11g/pdf/oracle-database-11g-release2-overview.pdf However, this is apparently available on Exadata storage only as a new error message below indicates: ORA-64307: hybrid [...]]]></description>
			<content:encoded><![CDATA[<p>You may already have noticed that Oracle 11gR2 for Linux is available for <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2hub2xvZ3kvc29mdHdhcmUvcHJvZHVjdHMvZGF0YWJhc2UvaW5kZXguaHRtbA==">download</a> on Oracle.com website, with <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5vcmFjbGUuY29tL3Bscy9kYjExMi9ob21lcGFnZQ==">documentation</a>.</p>
<p>And this document ends speculation about whether Oracle 11.2 will support column-oriented storage &#8211; yes it will:</p>
<p><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2hub2xvZ3kvcHJvZHVjdHMvZGF0YWJhc2Uvb3JhY2xlMTFnL3BkZi9vcmFjbGUtZGF0YWJhc2UtMTFnLXJlbGVhc2UyLW92ZXJ2aWV3LnBkZg==">http://www.oracle.com/technology/products/database/oracle11g/pdf/oracle-database-11g-release2-overview.pdf</a></p>
<p>However, this is apparently available on Exadata storage only as a new error message below indicates:</p>
<p><strong>ORA-64307: hybrid columnar compression is only supported in tablespaces residing on Exadata storage<br />
</strong> Cause: An attempt was made to use hybrid columnar compression on unsupported storage.<br />
Action: Create this table in a tablespace residing on Exadata storage or use a different compression type.</p>
<p><strong>Update:</strong> Kevin Closson mentioned that 11gR2 doesn&#8217;t really have column oriented storage as some other products like Vertica&#8217;s and Sybase IQ use, but its rather just column oriented compression option where storage is still organized by row but individual fields in these rows use compression dictionaries whichcan span multiple block boundaries (we&#8217;ll thats my interpretation at least).</p>
<p>The 11gR2 release overview doc seems to be wrong in this case, as it says:</p>
<p><em>Hybrid columnar compression is a new method for organizing how data is stored. Instead of<br />
storing the data in traditional rows, the data is grouped, ordered and stored one column at a time.</em></p>
<p>Read Kevin&#8217;s note here:</p>
<p><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2tldmluY2xvc3Nvbi53b3JkcHJlc3MuY29tLzIwMDkvMDkvMDEvb3JhY2xlLXN3aXRjaGVzLXRvLWNvbHVtbmFyLXN0b3JlLXRlY2hub2xvZ3ktd2l0aC1vcmFjbGUtZGF0YWJhc2UtMTFnLXJlbGVhc2UtMi8=">http://kevinclosson.wordpress.com/2009/09/01/oracle-switches-to-columnar-store-technology-with-oracle-database-11g-release-2/</a></p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">
<dl>
<dt><span class="msg">ORA-64307: hybrid columnar compression is only supported in tablespaces residing on Exadata storage</span> <!-- class="msg" --></dt>
<dd>
<div class="msgexplan"><span class="msgexplankw">Cause:</span> An attempt was made to use hybrid columnar compression on unsupported storage.</div>
<p><!-- class="msgexplan" --></p>
</dd>
<dd>
<div class="msgaction"><span class="msgactionkw">Action:</span> Create this table in a tablespace residing on Exadata storage or use a different compression type.</div>
<p><!-- class="msgaction" --></p>
</dd>
</dl>
<p><!-- class="msgentry" --> <!-- class="msgset" --> <!-- class="ind" --></p>
<div id="comment_block" class="footer">
<div id="comment_form" class="comments">
<h1>User Comments</h1>
<dl>
<dt><span class="msg">ORA-64307: hybrid columnar compression is only supported in tablespaces residing on Exadata storage</span> <!-- class="msg" --></dt>
<dd>
<div class="msgexplan"><span class="msgexplankw">Cause:</span> An attempt was made to use hybrid columnar compression on unsupported storage.</div>
<p><!-- class="msgexplan" --></p>
</dd>
<dd>
<div class="msgaction"><span class="msgactionkw">Action:</span> Create this table in a tablespace residing on Exadata storage or use a different compression type.</div>
<p><!-- class="msgaction" --></p>
</dd>
</dl>
<p><!-- class="msgentry" --> <!-- class="msgset" --> <!-- class="ind" --></p>
<div id="comment_block" class="footer">
<div id="comment_form" class="comments">
<h1>User Comments</h1>
</div>
</div>
</div>
</div>
</div>
<div class="facebook_like_button"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.tanelpoder.com%2F2009%2F09%2F01%2Foracle-11gr2-has-been-released-and-with-column-oriented-storage-option%2F&amp;layout=standard&amp;show-faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="padding: 0px 0px; border:none; overflow:hidden; width:450px; height:70px;"></iframe></div> <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=429" width="1" height="1" style="display: none;" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.tanelpoder.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2009/09/01/oracle-11gr2-has-been-released-and-with-column-oriented-storage-option/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>How to detect when a cursor was closed from SQL trace output?</title>
		<link>http://blog.tanelpoder.com/2009/07/09/how-to-detect-when-a-cursor-was-closed-from-sql-trace-output/</link>
		<comments>http://blog.tanelpoder.com/2009/07/09/how-to-detect-when-a-cursor-was-closed-from-sql-trace-output/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 11:50:07 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Internals]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle 11g]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Troubleshooting]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/?p=381</guid>
		<description><![CDATA[After Randolf&#8217;s comment on my last post about identifying cursor SQL text from sql trace file I think one thing needs elaboration. I mentioned earlier in this post that this cursor dumping technique works &#8220;as long as the cursor of interest is still open&#8221;. So how do you know whether this cursor of interest is [...]]]></description>
			<content:encoded><![CDATA[<p>After Randolf&#8217;s comment on my last post about <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vMjAwOS8wNy8wOS9pZGVudGlmeS10aGUtc3FsLXN0YXRlbWVudC1jYXVzaW5nLXRob3NlLXdhaXQteC1saW5lcy1pbi1hLXRvcC10cnVuY2F0ZWQtc3FsLXRyYWNlZmlsZQ==" target=\"_blank\">identifying cursor SQL text from sql trace file</a> I think one thing needs elaboration.</p>
<p>I mentioned earlier in this post that this cursor dumping technique works &#8220;as long as the cursor of interest is still open&#8221;.</p>
<p>So how do you know whether this cursor of interest is still open or has been closed and that slot reused by some other statement instead? You would not want to get misled to wrong SQL statement&#8230;</p>
<p>Luckily all the info you need is in SQL tracefile.</p>
<p>In 11g you would see &#8220;CLOSE #2&#8243; line appearing in tracefile when a cursor is closed.</p>
<p>Before 11g you would see &#8220;STAT #2&#8243; lines dumping out SQL plan execution stats &#8211; before 11g this is done when cursor is closed, so when you see STAT #2 lines, you know that at that location the cursor in slot #2 was closed.</p>
<p>There are few cases when the stat lines are not printed even if the cursor is closed &#8211; for example when the cursor&#8217;s library cache lookup (finding suitable shared cursor) happened before SQL trace was enabled. In this case the cursor would not use the extra instrumentation rowsources which generate the STAT lines.</p>
<p>In such case you would just grep the tracefile for PARSING IN CURSOR #2 <em>after</em> your WAIT #2&#8242;s. Whenever someone is parsing in a new cursor into slot #2, this means that existing cursor in slot #2 must have been closed somewhere between the PARSING IN CURSOR #2 line and last WAIT/FETCH/EXEC #2 line.</p>
<p>However, there&#8217;s one more special case; when the cursor was parsed in <em>before</em> SQL trace was enabled <em>and</em> another OPI call (like EXEC,FETCH) against this cursor is executed, then <em>some</em> Oracle versions actually retrieve the current SQL text and still dump it into trace just like before parsing. This means that if you just have lots of WAIT lines appearing in the trace for a SQL parsed in past, you won&#8217;t see the PARSING IN CURSOR lines dumped into tracefile, but if some OPI call is executed against this cursor, then the PARSING IN CURSOR line is dumped just before that OPI call.</p>
<p>I don&#8217;t in which exact version this appeared, but in my 10.2.0.1 test instance  this feature gives such output (I ran a select from dba_objects which started fetching lots of rows and then enabled SQL trace from another session):</p>
<pre><strong>PARSING IN CURSOR</strong> #1 len=29 dep=0 uid=0 oct=3 lid=0 tim=558589701689 hv=3336193532 ad='24f2e864'
select owner from dba_objects
END OF STMT
<strong>FETCH</strong> #1:c=0,e=5362,p=0,cr=102,cu=0,mis=0,r=500,dep=0,og=1,tim=558589701683
WAIT #1: nam='SQL*Net more data to client' ela= 23 driver id=1111838976 #bytes=2047 p3=0 obj#=39 tim=558589703066
WAIT #1: nam='SQL*Net message from client' ela= 57993 driver id=1111838976 #bytes=1 p3=0 obj#=39 tim=558589761409
WAIT #1: nam='SQL*Net message to client' ela= 3 driver id=1111838976 #bytes=1 p3=0 obj#=39 tim=558589761753
WAIT #1: nam='SQL*Net more data to client' ela= 13 driver id=1111838976 #bytes=2001 p3=0 obj#=39 tim=558589762331
FETCH #1:c=0,e=1193,p=0,cr=93,cu=0,mis=0,r=500,dep=0,og=1,tim=558589762865
WAIT #1: nam='SQL*Net message from client' ela= 60762 driver id=1111838976 #bytes=1 p3=0 obj#=39 tim=558589823801
WAIT #1: nam='SQL*Net message to client' ela= 2 driver id=1111838976 #bytes=1 p3=0 obj#=39 tim=558589824139
WAIT #1: nam='SQL*Net more data to client' ela= 19 driver id=1111838976 #bytes=2001 p3=0 obj#=39 tim=558589825284</pre>
<p>Do you notice something missing?</p>
<p>The PARSE #1 and EXEC #1 lines are missing as the actual parsing and execute calls happened way before the SQL trace was enabled. But Oracle was helpful enough to dump out the SQL text when next OPI call (FETCH) was issued under SQL tracing mode (it &#8220;noticed&#8221; that the SQL text corresponding to cursor #1 had not been dumped to trace yet).</p>
<p>This is helpful, but of course can cause some confusion, as this PARSING IN CURSOR doesn&#8217;t really mean <em>parsing</em> as such (as parsing is done under PARSE call), the PARSING IN CURSOR should probably be named as &#8220;ABOUT TO PARSE CURSOR&#8221; or something like that.</p>
<div class="facebook_like_button"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.tanelpoder.com%2F2009%2F07%2F09%2Fhow-to-detect-when-a-cursor-was-closed-from-sql-trace-output%2F&amp;layout=standard&amp;show-faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="padding: 0px 0px; border:none; overflow:hidden; width:450px; height:70px;"></iframe></div> <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=381" width="1" height="1" style="display: none;" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.tanelpoder.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2009/07/09/how-to-detect-when-a-cursor-was-closed-from-sql-trace-output/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>&#8220;Free&#8221; DBA_HIST AWR views in 11g&#8230;</title>
		<link>http://blog.tanelpoder.com/2009/05/06/free-dba_hist-awr-views-in-11g/</link>
		<comments>http://blog.tanelpoder.com/2009/05/06/free-dba_hist-awr-views-in-11g/#comments</comments>
		<pubDate>Wed, 06 May 2009 15:36:12 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle 11g]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Troubleshooting]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/2009/05/06/free-dba_hist-awr-views-in-11g/</guid>
		<description><![CDATA[I just noticed this in 11g Licensing doc ( http://download.oracle.com/docs/cd/B28359_01/license.111/b28287/options.htm#sthref69 ): All data dictionary views beginning with the prefix DBA_HIST_ are part of this pack, along with their underlying tables.The only exception are the views: DBA_HIST_SNAPSHOT, DBA_HIST_DATABASE_INSTANCE, DBA_HIST_SNAP_ERROR, DBA_HIST_SEG_STAT, DBA_HIST_SEG_STAT_OBJ, and DBA_HIST_UNDOSTAT. They can be used without the Diagnostic Pack license. This exception is not [...]]]></description>
			<content:encoded><![CDATA[<p>I just noticed this in 11g Licensing doc ( <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Rvd25sb2FkLm9yYWNsZS5jb20vZG9jcy9jZC9CMjgzNTlfMDEvbGljZW5zZS4xMTEvYjI4Mjg3L29wdGlvbnMuaHRtI3N0aHJlZjY5">http://download.oracle.com/docs/cd/B28359_01/license.111/b28287/options.htm#sthref69</a> ):</p>
<ul>
<li>All data dictionary views beginning with the prefix DBA_HIST_ are part of this pack, along with their underlying tables.<strong>The only exception are the views:</strong> DBA_HIST_SNAPSHOT, DBA_HIST_DATABASE_INSTANCE, DBA_HIST_SNAP_ERROR, DBA_HIST_SEG_STAT, DBA_HIST_SEG_STAT_OBJ, and DBA_HIST_UNDOSTAT. <strong>They can be used without the Diagnostic Pack license.</strong></li>
</ul>
<p>This exception is not present in 10.2 license guide, so before 11g you can query V$SEGMENT_STATISTICS and V$UNDOSTAT&#8217;s history &#8220;for free&#8221; :)</p>
<p>Of course, collecting this data manually with a 1-line PL/SQL loop script isn&#8217;t hard either :)</p>
<div class="facebook_like_button"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.tanelpoder.com%2F2009%2F05%2F06%2Ffree-dba_hist-awr-views-in-11g%2F&amp;layout=standard&amp;show-faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="padding: 0px 0px; border:none; overflow:hidden; width:450px; height:70px;"></iframe></div> <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=286" width="1" height="1" style="display: none;" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.tanelpoder.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2009/05/06/free-dba_hist-awr-views-in-11g/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Oracle 11g: Reading alert log via SQL</title>
		<link>http://blog.tanelpoder.com/2009/03/21/oracle-11g-reading-alert-log-via-sql/</link>
		<comments>http://blog.tanelpoder.com/2009/03/21/oracle-11g-reading-alert-log-via-sql/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 01:38:15 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle 11g]]></category>
		<category><![CDATA[Troubleshooting]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/2009/03/21/oracle-11g-reading-alert-log-via-sql/</guid>
		<description><![CDATA[Oracle has done some major improvements in the diagnosability infrastructure in version 11g. Here&#8217;s one little detail. Before Oracle 11g it is possible to access the alert log via SQL using an external table or a pipelined function which in turn uses utl_file. After reading the text you need to parse it to extract the [...]]]></description>
			<content:encoded><![CDATA[<p>Oracle has done some major improvements in the diagnosability infrastructure in version 11g. Here&#8217;s one little detail.</p>
<p>Before Oracle 11g it is possible to access the alert log via SQL using an external table or a pipelined function which in turn uses utl_file.<br />
After reading the text you need to parse it to extract the information you need from there.</p>
<p>Starting from 11g Oracle does all this work for you. There is a fixed table X$DBGALERTEXT, when you query it, Oracle reads the <em>log.xml</em> from alert directory (which contains all the data what alert.log does), parses it and returns the details back as rows:</p>
<pre><code>SQL&gt; select <strong>message_text</strong> from <strong>X$DBGALERTEXT</strong> where rownum &lt;= 20;

MESSAGE_TEXT
-----------------------------------------------------------------------------------------------------------------
Starting ORACLE instance (normal)
LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
Shared memory segment for instance monitoring created
Picked latch-free SCN scheme 2
Using LOG_ARCHIVE_DEST_10 parameter default value as USE_DB_RECOVERY_FILE_DEST
Autotune of undo retention is turned on.
IMODE=BR
ILAT =18
LICENSE_MAX_USERS = 0
SYS auditing is disabled
Starting up ORACLE RDBMS Version: 11.1.0.7.0.
Using parameter settings in client-side pfile /u01/app/oracle/admin/LIN11G/pfile/init.ora on machine linux03
System parameters with non-default values:
  processes                = 150
  memory_target            = 404M
  control_files            = "/u01/oradata/LIN11G/control01.ctl"
  control_files            = "/u01/oradata/LIN11G/control02.ctl"
  control_files            = "/u01/oradata/LIN11G/control03.ctl"
  db_block_size            = 8192

20 rows selected.

</code></pre>
<p>This is the text representation, but you can get individual details from other columns as listed below:</p>
<p><span id="more-267"></span></p>
<pre><code>SQL&gt; desc X$DBGALERTEXT
           Name                            Null?    Type
           ------------------------------- -------- ----------------------------
    1      ADDR                                     RAW(4)
    2      INDX                                     NUMBER
    3      INST_ID                                  NUMBER
    4      ORIGINATING_TIMESTAMP                    TIMESTAMP(3) WITH TIME ZONE
    5      NORMALIZED_TIMESTAMP                     TIMESTAMP(3) WITH TIME ZONE
    6      ORGANIZATION_ID                          VARCHAR2(64)
    7      COMPONENT_ID                             VARCHAR2(64)
    8      HOST_ID                                  VARCHAR2(64)
    9      HOST_ADDRESS                             VARCHAR2(16)
   10      MESSAGE_TYPE                             NUMBER
   11      MESSAGE_LEVEL                            NUMBER
   12      MESSAGE_ID                               VARCHAR2(64)
   13      MESSAGE_GROUP                            VARCHAR2(64)
   14      CLIENT_ID                                VARCHAR2(64)
   15      MODULE_ID                                VARCHAR2(64)
   16      PROCESS_ID                               VARCHAR2(32)
   17      THREAD_ID                                VARCHAR2(64)
   18      USER_ID                                  VARCHAR2(64)
   19      INSTANCE_ID                              VARCHAR2(64)
   20      DETAILED_LOCATION                        VARCHAR2(160)
   21      PROBLEM_KEY                              VARCHAR2(64)
   22      UPSTREAM_COMP_ID                         VARCHAR2(100)
   23      DOWNSTREAM_COMP_ID                       VARCHAR2(100)
   24      EXECUTION_CONTEXT_ID                     VARCHAR2(100)
   25      EXECUTION_CONTEXT_SEQUENCE               NUMBER
   26      ERROR_INSTANCE_ID                        NUMBER
   27      ERROR_INSTANCE_SEQUENCE                  NUMBER
   28      VERSION                                  NUMBER
   29      MESSAGE_TEXT                             VARCHAR2(2048)
   30      MESSAGE_ARGUMENTS                        VARCHAR2(128)
   31      SUPPLEMENTAL_ATTRIBUTES                  VARCHAR2(128)
   32      SUPPLEMENTAL_DETAILS                     VARCHAR2(128)
   33      PARTITION                                NUMBER
   34      RECORD_ID                                NUMBER

</code></pre>
<p>There&#8217;s also a fixed table X$DBGDIREXT, which returns all file and directory names under <em>[diagnostic_dest]</em>/diag directory:</p>
<pre><code>SQL&gt; select lpad(' ',lvl,' ')||logical_file file_name
  2  from <strong>X$DBGDIREXT</strong>
  3  where rownum &lt;=20;

FILE_NAME
--------------------------------------------------------
asm
lsnrctl
diagtool
rdbms
 lin11g
  lin11g
   ir
    recovery_history.ir
   incident
    incdir_33815
     lin11g_ora_10330_i33815.trc
     lin11g_ora_10330_i33815.trm
    incdir_25347
     lin11g_ora_32614_i25347.trc
     lin11g_ora_32614_i25347.trm
    incdir_25417
     lin11g_ora_1225_i25417.trm
     lin11g_ora_1225_i25417.trc
    incdir_43459
     lin11g_ora_9467_i43459.trm

20 rows selected.

</code></pre>
<p>If you&#8217;re building some custom alert log monitoring, then starting from 11g these x$ tables can help you. On the other hand, I would prefer to monitor logfiles using plain and simple scripts as accessing this X$ table requires the instance to be up and operational. The better use case I see is that if you don&#8217;t have access to OS filesystem and nevertheless want to see alert log contents, that can be the easiest option in 11g&#8230;</p>
<div class="facebook_like_button"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.tanelpoder.com%2F2009%2F03%2F21%2Foracle-11g-reading-alert-log-via-sql%2F&amp;layout=standard&amp;show-faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="padding: 0px 0px; border:none; overflow:hidden; width:450px; height:70px;"></iframe></div> <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=267" width="1" height="1" style="display: none;" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.tanelpoder.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2009/03/21/oracle-11g-reading-alert-log-via-sql/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Miladin Modrakovic&#8217;s blog: lots of undocumented Oracle stuff</title>
		<link>http://blog.tanelpoder.com/2009/03/16/miladin-modrakovics-blog-lots-of-undocumented-oracle-stuff/</link>
		<comments>http://blog.tanelpoder.com/2009/03/16/miladin-modrakovics-blog-lots-of-undocumented-oracle-stuff/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 09:19:36 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Cool stuff]]></category>
		<category><![CDATA[Internals]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle 11g]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/2009/03/16/miladin-modrakovics-blog-lots-of-undocumented-oracle-stuff/</guid>
		<description><![CDATA[If you get a kick out of learning Oracle internals, especially undocumented commands then check out Miladin&#8217;s blog: http://www.oraclue.com/ His blog uses the same wordpress template as mine, but the content and authors are different! He has also published detailed notes about Oracle diagnostic events and about some serious improvements in 11g event syntax (as [...]]]></description>
			<content:encoded><![CDATA[<p>If you get a kick out of learning Oracle internals, especially undocumented commands then check out Miladin&#8217;s blog:</p>
<p><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5vcmFjbHVlLmNvbS8=">http://www.oraclue.com/</a></p>
<p>His blog uses the same wordpress template as mine, but the content and authors are different!</p>
<p>He has also published detailed notes about Oracle diagnostic events and about some serious improvements in 11g event syntax (as the whole diagnostics infrastructure got a major upgrade in 11g).</p>
<p>Just beware to not run anything in your non-toy databases without seriously thinking &#038; testing why should the feature help and whether it&#8217;s safe to use it at all. Most undocumented stuff (in anyone&#8217;s blogs, including mine) should be used only in those rare cases where conventional, documented or at least widely used methods dont help.</p>
<div class="facebook_like_button"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.tanelpoder.com%2F2009%2F03%2F16%2Fmiladin-modrakovics-blog-lots-of-undocumented-oracle-stuff%2F&amp;layout=standard&amp;show-faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="padding: 0px 0px; border:none; overflow:hidden; width:450px; height:70px;"></iframe></div> <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=261" width="1" height="1" style="display: none;" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.tanelpoder.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2009/03/16/miladin-modrakovics-blog-lots-of-undocumented-oracle-stuff/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>New presentation slides plus AOT seminars in Hong-Kong and Dallas</title>
		<link>http://blog.tanelpoder.com/2009/03/14/new-presentation-slides-plus-aot-seminars-in-hong-kong-and-dallas/</link>
		<comments>http://blog.tanelpoder.com/2009/03/14/new-presentation-slides-plus-aot-seminars-in-hong-kong-and-dallas/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 06:16:24 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Cool stuff]]></category>
		<category><![CDATA[Internals]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle 11g]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Troubleshooting]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/?p=257</guid>
		<description><![CDATA[Conferences &#38; Slides Here are the slides of my recent presentations at Hotsos Symposium and UTOUG events: Advanced Oracle Troubleshooting (and scripts I&#8217;ve used) Latch, Lock and Mutex Contention Troubleshooting Oracle SQL Plan Execution: How It Really Works Advanced Oracle Troubleshooting Seminar I have added Dallas, Salt Lake City, Denver and Hong-Kong to my Advanced [...]]]></description>
			<content:encoded><![CDATA[<h3 class="MsoNormal">Conferences &amp; Slides</h3>
<p class="MsoNormal">Here are the slides of my recent presentations at Hotsos Symposium and UTOUG events:</p>
<ul>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vc2VtaW5hci9zZW1pbmFyLWZpbGVzLw==">Advanced Oracle Troubleshooting (and scripts I&#8217;ve used)<br />
</a></li>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy50YW5lbHBvZGVyLmNvbS9maWxlcy9MYXRjaF9Mb2NrX0FuZF9NdXRleF9Db250ZW50aW9uX1Ryb3VibGVzaG9vdGluZy5wZGY=">Latch, Lock and Mutex Contention Troubleshooting</a></li>
<li><a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy50YW5lbHBvZGVyLmNvbS9maWxlcy9PcmFjbGVfU1FMX1BsYW5fRXhlY3V0aW9uLnBkZg==">Oracle SQL Plan Execution: How It Really Works</a></li>
</ul>
<h3 class="MsoNormal">Advanced Oracle Troubleshooting Seminar</h3>
<p class="MsoNormal">I have added Dallas, Salt Lake City, Denver and Hong-Kong to my Advanced Oracle Troubleshooting seminar list for first half of 2009, the full list is below. Check <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cudGFuZWxwb2Rlci5jb20vc2VtaW5hci8=">http://blog.tanelpoder.com/seminar/</a> for outline, scripts, example slides and details.</p>
<h3 class="MsoNormal">Seminar dates and locations 2009:</h3>
<p><strong>2-3. April &#8211; Miracle @ Utrecht, Netherlands</strong> &#8211; <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5taXJhY2xlYmVuZWx1eC5ubC90YW5lbC8=">http://www.miraclebenelux.nl/tanel/</a></p>
<p><strong>13-14. April &#8211; Oracle @ Singapore</strong> &#8211; <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5vcmFjbGUuY29tL2VkdWNhdGlvbi9hcGFjL3NnX3RhbmVsX3BvZGVyLmh0bWw=">http://www.oracle.com/education/apac/sg_tanel_poder.html</a></p>
<p><strong>16-17. April &#8211; Oracle @ Sydney</strong> &#8211; <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5vcmFjbGUuY29tL2VkdWNhdGlvbi9hcGFjL2F1X3RhbmVsX3BvZGVyLmh0bWw=">http://www.oracle.com/education/apac/au_tanel_poder.html</a></p>
<p><strong>20-21. April &#8211; Oracle @ Melbourne</strong> &#8211; <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5vcmFjbGUuY29tL2VkdWNhdGlvbi9hcGFjL2F1X3RhbmVsX3BvZGVyLmh0bWw=">http://www.oracle.com/education/apac/au_tanel_poder.html</a></p>
<p><strong>23-24. April Oracle @ Hong-Kong</strong> &#8211; <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5vcmFjbGUuY29tL2VkdWNhdGlvbi9hcGFjL2hrX3RhbmVsX3BvZGVyLmh0bWw=">http://www.oracle.com/education/apac/hk_tanel_poder.html</a></p>
<p><strong>27.-28. April &#8211; PiSec Ltd @ Edinburgh</strong> &#8211; <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5waXNlYy5vcmcvaW5kZXgucGhwP29wdGlvbj1jb21fY29udGVudCZhbXA7dmlldz1hcnRpY2xlJmFtcDtpZD02JmFtcDtJdGVtaWQ9MTI=">http://www.pisec.org/index.php?option=com_content&amp;view=article&amp;id=6&amp;Itemid=12</a></p>
<p><strong>11-12. May &#8211; Oracle @ Spain</strong> &#8211; <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VkdWNhdGlvbi5vcmFjbGUuY29tL3Bscy93ZWJfcHJvZC1wbHEtZGFkL3Nob3dfZGVzYy5yZWRpcmVjdD9kYz1ENzAzNjVfMTA2MDI0NSZhbXA7cF9vcmdfaWQ9NTEmYW1wO2xhbmc9RSZhbXA7c291cmNlX2NhbGw9">http://education.oracle.com/pls/web_prod-plq-dad/show_desc.redirect?dc=D70365_1060245&amp;p_org_id=51&amp;lang=E&amp;source_call=</a></p>
<p><strong>18-19. May &#8211; Miracle @ Denmark</strong> &#8211; <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5taXJhY2xlYXMuZGsvaW5kZXgucGhwP29wdGlvbj1jb21fY29udGVudCZhbXA7dmlldz1hcnRpY2xlJmFtcDtpZD0xMDA6YWR2YW5jZWQtb3JhY2xlLXRyb3VibGVzaG9vdGluZyZhbXA7Y2F0aWQ9MTk6aW5mbyZhbXA7SXRlbWlkPTcx">http://www.miracleas.dk/index.php?option=com_content&amp;view=article&amp;id=100:advanced-oracle-troubleshooting&amp;catid=19:info&amp;Itemid=71</a></p>
<p><strong>3.-5. June &#8211; Method-R @ Dallas, TX</strong> &#8211; <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5tZXRob2Qtci5jb20v">http://www.method-r.com</a></p>
<p><strong>10-12. June &#8211; Trutek @ Salt Lake City, UT</strong> &#8211; <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy50cnV0ZWsuY29tL2luZGV4LnBocD9pZD0xNjU=">http://www.trutek.com/index.php?id=165</a></p>
<p><strong>15-17. June &#8211; Trutek @ Denver, CO</strong> &#8211; <a href="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy50cnV0ZWsuY29tL2luZGV4LnBocD9pZD0xNjU=">http://www.trutek.com/index.php?id=165</a></p>
<div class="facebook_like_button"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.tanelpoder.com%2F2009%2F03%2F14%2Fnew-presentation-slides-plus-aot-seminars-in-hong-kong-and-dallas%2F&amp;layout=standard&amp;show-faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="padding: 0px 0px; border:none; overflow:hidden; width:450px; height:70px;"></iframe></div> <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=257" width="1" height="1" style="display: none;" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.tanelpoder.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2009/03/14/new-presentation-slides-plus-aot-seminars-in-hong-kong-and-dallas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Oracle, Timesten and PL/SQL support</title>
		<link>http://blog.tanelpoder.com/2009/03/06/oracle-timesten-and-plsql-support/</link>
		<comments>http://blog.tanelpoder.com/2009/03/06/oracle-timesten-and-plsql-support/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 01:09:56 +0000</pubDate>
		<dc:creator>Tanel Poder</dc:creator>
				<category><![CDATA[Internals]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle 11g]]></category>
		<category><![CDATA[TimesTen]]></category>

		<guid isPermaLink="false">http://blog.tanelpoder.com/2009/03/06/oracle-timesten-and-plsql-support/</guid>
		<description><![CDATA[I thought to post about another new interest of mine, TimestTen, as I&#8217;ve worked with it in past and I have become a fan of it, especially after Oracle bought the company. Oracle has announced that TimesTen in-memory database will support PL/SQL in the upcoming release. That&#8217;s in 11gR2, where TimesTen is named the &#8220;in-memory [...]]]></description>
			<content:encoded><![CDATA[<p>I thought to post about another new interest of mine, TimestTen, as I&#8217;ve worked with it in past and I have become a fan of it, especially after Oracle bought the company.</p>
<p>Oracle has announced that TimesTen in-memory database will support PL/SQL in the upcoming release. That&#8217;s in 11gR2, where TimesTen is named the &#8220;in-memory database cache&#8221;.</p>
<p>I&#8217;m happy to see the deep level of integration Oracle is doing with it. It looks like both classic Oracle RDBMS and the TimesTen based code will have a (partially) shared PL/SQL code base.<br />
There&#8217;s already a package called UTL_IDENT in Oracle 11.1.0.7 which stores couple variables used for conditional compilation depedent on the database product the packages are installed:</p>
<pre><code>SQL&gt; select dbms_metadata.get_ddl('PACKAGE', 'UTL_IDENT') from dual;

DBMS_METADATA.GET_DDL('PACKAGE','UTL_IDENT')
--------------------------------------------------------------------

  CREATE OR REPLACE PACKAGE "SYS"."UTL_IDENT" is

  /* A typical usage of these boolean constants is

         $if utl_ident.is_oracle_server $then
           code supported for Oracle Database
         $elsif utl_ident.is_timesten $then
           code supported for TimesTen Database
         $end
   */

  is_oracle_server     constant boolean := TRUE;
  is_oracle_client     constant boolean := FALSE;
<strong>  is_timesten          constant boolean := FALSE;
</strong>
end utl_ident;
/

</code></pre>
<p>It looks that there will be at least some utility packages which share common code base with classic Oracle RDBMS and just use different code internally if needed, based on the UTL_IDENT variables.</p>
<p>This was a nice surprise as such approach promises to have full PL/SQL utilities in TimesTen cache and no discrepancy between the PL/SQL utility capabilities available in different platforms. So (I hope) there will be just one PL/SQL, not one PL/SQL version for Oracle and other for the cache.<br />
Back before 9i days, it was quite annoying to hit the SQL interface discrepancies between PL/SQL and native SQL engines. So there&#8217;s hope that there are gonna be less porting issues between Oracle classic RDBMS and TimesTen cache (both for application developers and TimesTen coders as only low level interfaces need to be changed).</p>
<p>Well, at least in theory it&#8217;s like that&#8230; But I hope Oracle/TimesTen coders will do a good job with this as I&#8217;ve worked with some algorithmic trading apps doing extreme transaction processing and in this world you don&#8217;t even like wasted microseconds as this directly translates to lost trading opportunities and lost potential revenue. The legacy solutions for such apps are usually some in-memory data stores, often built in house and lots of C++ code around it for procedural work. The data is then loaded / dumped to some disk-based RDBMS asynchronously (as the multi-millisecond response times of a classic RDBMS take ages!!!)</p>
<p>I&#8217;m waiting to get my hands on the 11gR2 (as everyone who&#8217;s reading this blog I suspect :), but especially the integrated in-memory database cache engine as it promises to make the life easier for a lot of algorithmic trading systems developers (and also the ability adapt quicker to ever-changing markets and growing complexity of products for investment banks and trading houses).</p>
<div class="facebook_like_button"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.tanelpoder.com%2F2009%2F03%2F06%2Foracle-timesten-and-plsql-support%2F&amp;layout=standard&amp;show-faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="padding: 0px 0px; border:none; overflow:hidden; width:450px; height:70px;"></iframe></div> <img src="http://blog.tanelpoder.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=251" width="1" height="1" style="display: none;" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://blog.tanelpoder.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blog.tanelpoder.com/2009/03/06/oracle-timesten-and-plsql-support/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
