<?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>Stormsail &#187; Oracle</title>
	<atom:link href="http://www.stormsail.com/category/oracle/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.stormsail.com</link>
	<description>The future&#039;s bright, the futures Harrison Land...</description>
	<lastBuildDate>Sun, 08 Jan 2012 22:46:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>New job</title>
		<link>http://www.stormsail.com/2010/12/06/new-job/</link>
		<comments>http://www.stormsail.com/2010/12/06/new-job/#comments</comments>
		<pubDate>Mon, 06 Dec 2010 22:35:23 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Solaris]]></category>

		<guid isPermaLink="false">http://www.stormsail.com/?p=1024</guid>
		<description><![CDATA[That&#8217;s right, I&#8217;ve finally changed jobs at Oracle and am now about to embark on supporting Solaris on Exadata in RPE (Revenue Product Engineering) when it&#8217;s released sometime next year. It was a decision I had to really think about &#8230; <a href="http://www.stormsail.com/2010/12/06/new-job/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>That&#8217;s right, I&#8217;ve finally changed jobs at <a href="http://www.oracle.com">Oracle</a> and am now about to embark on supporting Solaris on <a href="http://en.wikipedia.org/wiki/Oracle_Exadata">Exadata</a> in RPE (Revenue Product Engineering) when it&#8217;s released sometime next year. It was a decision I had to really think about but glad I did make it as a change was needed and I love a new challenge. Further updates might continue on this blog or on my work one (which is also subject to change due to upcoming blog migrations).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stormsail.com/2010/12/06/new-job/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upgrading Oracle 10g on OpenSolaris</title>
		<link>http://www.stormsail.com/2009/07/14/upgrading-oracle-10g-on-opensolaris/</link>
		<comments>http://www.stormsail.com/2009/07/14/upgrading-oracle-10g-on-opensolaris/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 17:45:31 +0000</pubDate>
		<dc:creator>andy</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.stormsail.com/2009/07/14/upgrading-oracle-10g-on-opensolaris/</guid>
		<description><![CDATA[Ran into a problem trying to upgrade my Oracle instance from 10.2.0.1 to 10.2.0.4: &#8220;Preparing to launch Oracle Universal Installer from /tmp/OraInstall2009-07-14_10-28-22AM. Please wait &#8230;oracle@dbserver:/u04/database$ Exception in thread &#8220;main&#8221; java.lang.UnsatisfiedLinkError: /tmp/OraInstall2009-07-14_10-28-22AM/jre/1.4.2/lib i386/motif21/libmawt.so: ld.so.1: java: fatal: libXm.so.4: open failed: No such &#8230; <a href="http://www.stormsail.com/2009/07/14/upgrading-oracle-10g-on-opensolaris/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ran into a problem trying to upgrade my Oracle instance from 10.2.0.1 to 10.2.0.4:</p>
<p>&#8220;Preparing to launch Oracle Universal Installer from /tmp/OraInstall2009-07-14_10-28-22AM. Please wait &#8230;oracle@dbserver:/u04/database$ Exception in thread &#8220;main&#8221; java.lang.UnsatisfiedLinkError: /tmp/OraInstall2009-07-14_10-28-22AM/jre/1.4.2/lib i386/motif21/libmawt.so: ld.so.1: java: fatal: libXm.so.4: open failed: No such file or directory&#8221;</p>
<p>but looks like it&#8217;s been seen before from looking at this thread on <a href="http://opensolaris.org/jive/thread.jspa?messageID=382732">OpenSolaris.org</a></p>
<p>The workaround is to use the Java version that comes with OpenSolaris:</p>
<p>./runInstaller -jreLoc /usr/java/jre -ignoreSysPrereqs</p>
<p>Once that was complete it was easy to complete the upgrade:</p>
<p>SQL> STARTUP UPGRADE<br />
SQL> SPOOL patch.log<br />
SQL> @?/rdbms/admin/catupgrd.sql<br />
SQL> SPOOL OFF</p>
<p>Some time later:</p>
<p><snip><br />
TIMESTAMP<br />
&#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;<br />
COMP_TIMESTAMP UPGRD_END  2009-07-14 11:19:21<br />
.<br />
Oracle Database 10.2 Upgrade Status Utility           07-14-2009 11:19:21<br />
.<br />
Component                                Status         Version  HH:MM:SS<br />
Oracle Database Server                    VALID      10.2.0.4.0  00:14:04<br />
JServer JAVA Virtual Machine              VALID      10.2.0.4.0  00:02:48<br />
Oracle XDK                                VALID      10.2.0.4.0  00:00:34<br />
Oracle Database Java Packages             VALID      10.2.0.4.0  00:00:30<br />
Oracle Text                               VALID      10.2.0.4.0  00:00:51<br />
Oracle XML Database                       VALID      10.2.0.4.0  00:02:28<br />
Oracle Workspace Manager                  VALID      10.2.0.4.3  00:00:41<br />
Oracle Data Mining                        VALID      10.2.0.4.0  00:00:24<br />
OLAP Analytic Workspace                   VALID      10.2.0.4.0  00:00:27<br />
OLAP Catalog                              VALID      10.2.0.4.0  00:01:04<br />
Oracle OLAP API                           VALID      10.2.0.4.0  00:00:57<br />
Oracle interMedia                         VALID      10.2.0.4.0  00:03:22<br />
Spatial                                   VALID      10.2.0.4.0  00:01:29<br />
Oracle Expression Filter                  VALID      10.2.0.4.0  00:00:14<br />
Oracle Enterprise Manager                 VALID      10.2.0.4.0  00:01:10<br />
Oracle Rule Manager                       VALID      10.2.0.4.0  00:00:11<br />
.<br />
Total Upgrade Time: 00:31:22<br />
DOC>#######################################################################<br />
DOC>#######################################################################<br />
DOC><br />
DOC>   The above PL/SQL lists the SERVER components in the upgraded<br />
DOC>   database, along with their current version and status.<br />
DOC><br />
DOC>   Please review the status and version columns and look for<br />
DOC>   any errors in the spool log file.  If there are errors in the spool<br />
DOC>   file, or any components are not VALID or not the current version,<br />
DOC>   consult the Oracle Database Upgrade Guide for troubleshooting<br />
DOC>   recommendations.<br />
DOC><br />
DOC>   Next shutdown immediate, restart for normal operation, and then<br />
DOC>   run utlrp.sql to recompile any invalid application objects.<br />
DOC><br />
DOC>#######################################################################<br />
DOC>#######################################################################</p>
<p>Next stop will be documenting using <a href="http://www.dominicgiles.com/swingbench.php">Swingbench</a> to benchmark Oracle.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stormsail.com/2009/07/14/upgrading-oracle-10g-on-opensolaris/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t forget truss for diagnosing issues</title>
		<link>http://www.stormsail.com/2009/03/28/dont-forget-truss-for-diagnosing-issues/</link>
		<comments>http://www.stormsail.com/2009/03/28/dont-forget-truss-for-diagnosing-issues/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 02:50:43 +0000</pubDate>
		<dc:creator>hippy</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.stormsail.com/2009/03/28/dont-forget-truss-for-diagnosing-issues/</guid>
		<description><![CDATA[Oracle came to us via the VOSJEC channel for help in diagnosing a customer getting the following error in the alert log during various DML queries: ORA-27505: IPC error destroying a port ORA-27300: OS system dependent operation:close failed with status: &#8230; <a href="http://www.stormsail.com/2009/03/28/dont-forget-truss-for-diagnosing-issues/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Oracle came to us via the VOSJEC channel for help in diagnosing a customer getting the following error in the alert log during various <a href="http://en.wikipedia.org/wiki/Data_Manipulation_Language">DML</a> queries:</p>
<p>ORA-27505: IPC error destroying a port<br />
ORA-27300: OS system dependent operation:close failed with status: 9<br />
ORA-27301: OS failure message: Bad file number<br />
ORA-27302: failure occurred at: skgxpdelpt1<br />
ORA-03135: connection lost contact</p>
<p>and</p>
<p>ORA-27509: IPC error receiving a message<br />
ORA-27300: OS system dependent operation:recvmsg failed with status: 95<br />
ORA-27301: OS failure message: Socket operation on non-socket<br />
ORA-27302: failure occurred at: sskgxp_rcvms<br />
Non critical error ORA-00001 caught while writing to trace file<br />
&quot;/opt/oracle/diag/rdbms/tacor3p/tacor3p2/trace/tacor3p2_ora_5758.trc&quot;<br />
Error message: SVR4 Error: 9: Bad file number</p>
<p>Interestingly enough Oracle commented that the customer was not running out of file descriptors and also had enough UDP ports available for their load. Oracle were also unable to replicate this in house but appeared to be consistent at the customer site and only happened when the customer enabled Oracle auditing with the syslog audit trail option. So why did Oracle believe this was an interoperability issue? Well they provided the following truss data:</p>
<p>27873: open(&quot;/var/run/syslog_door&quot;, O_RDONLY)<br />
= 0<br />
-&gt;the bad code now opens the syslog file again, at free fd 0<br />&lt;snip&gt;<br />
27873: door_info(0, 0xFFFFFFFF7FFF78D8) = 0<br />
27873: getpid() = 27873 [27340]<br />
27873: door_call(0, 0xFFFFFFFF7FFF78A8) = 0<br />
27873: close(0) = 0<br />
-&gt;the bad code now closes 0 since it opened the file at 0<br />
&lt;snip&gt;<br />
27873: close(0) Err#9 EBADF<br />
-&gt;again, closes fd 0 incorrectly, it is no longer open to anyone<br />
&lt;snip&gt;<br />
27873: recvmsg(0, 0xFFFFFFFF7FFF6F88, 0) Err#95 ENOTSOCK<br />
-&gt;SKGXP now tries to use its socket without knowing someone else<br />
closed it and fails<br />
&lt;snip&gt;</p>
<p>So Oracle believed that the open(&quot;/var/run/syslog_door&quot; seemed suspicious as the call didn&#8217;t originate from the rdbms code and hence some help was required from Sun to progress. Unfortunately that limited truss output didn&#8217;t actually show us the where in the process lifecycle we were going wrong so we needed to collect some more data from the customer to work it all out. With truss you can use the -u option to do user level function call tracing i.e:</p>
<p></br><br />truss -faeo /var/tmp/out -u a.out:: -u libc:: ./a.out </p>
<p>So, what did this new data actually show us:</p>
<p>5389:<br />
execve(&quot;/opt/oracle/product/11.1.0/bin/sqlplus&quot;, 0xFFFFFFFF7FFFFB38,<br />
0xFFFFFFFF7FFFFB48) argc = 1<br />
5389: argv: sqlplus<br />
6085/1@1: -&gt; libc:_open(0xffffffff7b3e7498, 0&#215;0, 0&#215;0, 0&#215;0)<br />
6085/1@1: -&gt; libc:__open(0xffffffff7b3e7498, 0&#215;0, 0&#215;0, 0&#215;0)<br />
6085/1: open(&quot;/var/run/syslog_door&quot;, O_RDONLY) = 0<br />
6085/1@1: &lt;- libc:__open() = 0<br />
6085/1@1: &lt;- libc:_open() = 0<br />
6085/1@1: -&gt; libc:_door_info(0&#215;0, 0xffffffff7fff7978, 0&#215;0, 0&#215;2000)<br />
6085/1: door_info(0, 0xFFFFFFFF7FFF7978) = 0<br />
6085/1@1: &lt;- libc:_door_info() = 0<br />
6085/1@1: -&gt; libc:getpid(0&#215;0, 0xffffffff7fff7978, 0&#215;0, 0&#215;2000)<br />
6085/1: getpid() = 6085 [5389]<br />
6085/1@1: &lt;- libc:getpid() = 6085<br />
6085/1@1: -&gt; libc:_door_call(0&#215;0, 0xffffffff7fff7948, 0&#215;0, 0&#215;2000)<br />
6085/1: door_call(0, 0xFFFFFFFF7FFF7948) = 0<br />
6085/1@1: &lt;- libc:_door_call() = 0<br />
6085/1@1: -&gt; libc:_close(0&#215;0, 0xffffffff7fff7948, 0&#215;0, 0&#215;2000)<br />
6085/1: close(0) = 0<br />
6085/1@1: &lt;- libc:_close() = 0<br />
6085/1@1: &lt;- libc:syslogd_ok() = 1<br />
6085/1@1: &lt;- libc:vsyslog() = 0xffffffff7fff83c8<br />
6085/1@1: -&gt; libc:gettimeofday(0xffffffff7fff8540, 0&#215;0, 0&#215;0, 0&#215;0)<br />
6085/1@1: -&gt; libc:_cancelon(0&#215;0, 0&#215;0, 0&#215;0, 0&#215;0)<br />
6085/1@1: &lt;- libc:_cancelon() = -19<br />
6085/1@1: -&gt; libc:_close(0&#215;0, 0&#215;1, 0&#215;0, 0&#215;0)<br />
6085/1: close(0) Err#9 EBADF<br />
6085/1@1: -&gt; libc:_cerror(0&#215;9, 0&#215;1, 0&#215;0, 0&#215;0)<br />
6085/1@1: -&gt; libc:___errno(0&#215;0, 0&#215;0, 0&#215;0, 0&#215;0)<br />
6085/1@1: &lt;- libc:___errno() = 0xffffffff7b4fc9bc<br />
6085/1@1: &lt;- libc:_close() = -1<br />
6085/1@1: -&gt; libc:_canceloff(0xffffffffffffffff, 0&#215;1, 0&#215;0, 0&#215;0)<br />
6085/1@1: &lt;- libc:_canceloff() = 0<br />
6085/1@1: -&gt; libc:times(0xffffffff7fff9460, 0x108c65000, 0x108c65,<br />
0x108c00)<br />
6085/1: times(0xFFFFFFFF7FFF9460) = 86657683<br />
6085/1@1: -&gt; libc:gethrtime(0&#215;0, 0x108c00, 0x10a0c7, 0&#215;400)<br />
6085/1@1: -&gt; libc:setjmp(0xffffffff7fffa7e0, 0x10a1025b0,<br />
0x10a0bc4b0, 0&#215;46100)<br />
6085/1@1: -&gt; libc:setjmp(0xffffffff7fffa5f0, 0x10a1025b0,<br />
0x10a0bc4b0, 0&#215;46100)<br />
6085/1@1: -&gt; libc:setjmp(0xffffffff7fffa5f0, 0x10a1025b0,<br />
0x10a0bc4b0, 0&#215;46100)<br />
6085/1@1: -&gt; libc:setjmp(0xffffffff7fffa5f0, 0x10a1025b0,<br />
0x10a0bc4b0, 0&#215;46100)<br />
6085/1@1: -&gt; libc:setjmp(0xffffffff7fffa5f0, 0x10a1025b0,<br />
0x10a0bc4b0, 0&#215;46100)<br />
6085/1@1: -&gt; libc:setjmp(0xffffffff7fffa5f0, 0x10a1025b0,<br />
0x10a0bc4b0, 0&#215;46100)<br />
6085/1@1:<br />
-&gt; libc:gettimeofday(0xffffffff7fffa620, 0&#215;0, 0xffffffffffffffff,<br />
0xfffffffffffffff8)<br />
6085/1@1: -&gt; libc:localtime_r(0xffffffff7fffa618,<br />
0xffffffff7fffa5f4, 0&#215;0, 0xec23d)<br />
6085/1@1: -&gt; libc:getsystemTZ(0xffffffff7fffa528, 0&#215;0, 0&#215;0, 0&#215;0)<br />
6085/1@1: -&gt; libc:getenv(0xffffffff7b3e5b68, 0&#215;0, 0&#215;0, 0&#215;0)</p>
<p> <a href="http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/gen/syslog.c" class="moz-txt-link-freetext">http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/gen/syslog.c</a></p>
<p>384 /*<br />
385 * Use a door call to syslogd to see if it&#8217;s alive.<br />
386 */<br />
387 static int<br />
388 syslogd_ok(void)<br />
389 {<br />
390 int d;<br />
391 int s;<br />
392 door_arg_t darg;<br />
393 door_info_t info;<br />
394 <br />
395 if ((d = open(DOORFILE, O_RDONLY)) &lt; 0)<br />
396 return (0);<br />
397 /*<br />
398 * see if our pid matches the pid of the door server.<br />
399 * If so, syslogd has called syslog(), probably as<br />
400 * a result of some name service library error, and<br />
401 * we don&#8217;t want to let syslog continue and possibly<br />
402 * fork here.<br />
403 */<br />
404 info.di_target = 0;<br />
405 if (__door_info(d, &amp;info) &lt; 0 || info.di_target == getpid())<br />
{<br />
406 (void) close(d);<br />
407 return (0);<br />
408 }<br />
409 darg.data_ptr = NULL;<br />
410 darg.data_size = 0;<br />
411 darg.desc_ptr = NULL;<br />
412 darg.desc_num = 0;<br />
413 darg.rbuf = NULL;<br />
414 darg.rsize = 0;<br />
415 s = __door_call(d, &amp;darg);<br />
416 (void) close(d);<br />
417 if (s &lt; 0)<br />
418 return (0); /* failure &#8211; syslogd dead */<br />
419 else<br />
420 return (1);<br />
421 }</p>
<p> <a href="http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/gen/syslog.c" class="moz-txt-link-freetext">http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/gen/syslog.c</a></p>
<p>340 /* output the message to the local logger */<br />
341 if ((putmsg(LogFile, &amp;ctl, &amp;dat, 0) &gt;= 0) &amp;&amp;<br />
syslogd_ok())<br />
342 return;<br />
343 if (!(LogStat &amp; LOG_CONS))<br />
344 return;</p>
<p>so syslogd_ok returns 1 and then we return out of vsyslog():</p>
<p> <a href="http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/gen/syslog.c" class="moz-txt-link-freetext">http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/gen/syslog.c</a></p>
<p>158 void<br />
159 syslog(int pri, const char *fmt, &#8230;)<br />
160 {<br />
161 va_list ap;<br />
162 <br />
163 va_start(ap, fmt);<br />
164 vsyslog(pri, fmt, ap);<br />
165 va_end(ap);<br />
166 }</p>
<p>
So we&#8217;ve returned from vsyslog() then into gettimeofday() and then our<br />
second close() returns EBADF. </p>
<p>6085/1@1: -&gt; libc:gettimeofday(0xffffffff7fff8540, 0&#215;0, 0&#215;0, 0&#215;0)<br />
6085/1@1: -&gt; libc:_cancelon(0&#215;0, 0&#215;0, 0&#215;0, 0&#215;0)<br />
6085/1@1: &lt;- libc:_cancelon() = -19<br />
6085/1@1: -&gt; libc:_close(0&#215;0, 0&#215;1, 0&#215;0, 0&#215;0)<br />
6085/1: close(0) Err#9 EBADF<br />
6085/1@1: -&gt; libc:_cerror(0&#215;9, 0&#215;1, 0&#215;0, 0&#215;0)<br />
6085/1@1: -&gt; libc:___errno(0&#215;0, 0&#215;0, 0&#215;0, 0&#215;0)<br />
6085/1@1: &lt;- libc:___errno() = 0xffffffff7b4fc9bc<br />
6085/1@1: &lt;- libc:_close() = -1<br />
6085/1@1: -&gt; libc:_canceloff(0xffffffffffffffff, 0&#215;1, 0&#215;0, 0&#215;0)<br />
6085/1@1: &lt;- libc:_canceloff() = 0<br />
6085/1@1: -&gt; libc:times(0xffffffff7fff9460, 0x108c65000, 0x108c65,<br />
0x108c00)<br />
6085/1: times(0xFFFFFFFF7FFF9460) = 86657683</p>
<p>So<br />
we&#8217;ve returned from syslog() and are now somewhere else in the code so<br />
nothing to do with the door_calls from my understanding. With that, Oracle development did some further digging and then announced they&#8217;d found a new defect in the Oracle code and was logged as Oracle bug 7519558. If Oracle hadn&#8217;t have come back then I would have probably used the following Dtrace script to confirm where the EBADF was actually being returned from close():</p>
<p>root@hippy-1 # more badclose.d<br />
syscall::close:return<br />
/pid == $target &amp;&amp; errno == EBADF/<br />
{<br />
@badf_ustack[execname,ustack(20)] = count();<br />
stop_pids[pid] = 1;<br />
}</p>
<p>syscall::rexit:entry<br />
/stop_pids[pid] != 0/<br />
{<br />
printf(&quot;stopping pid %d&quot;, pid);<br />
stop();<br />
system(&quot;prun %d&quot;, pid);<br />
stop_pids[pid] = 0;<br />
}</p>
<p>END<br />
{<br />
printa(@badf_ustack);<br />
}</p>
<p>root@hippy-1 # dtrace -ws badclose.d -c ./p<br />
dtrace: script &#8216;badclose.d&#8217; matched 3 probes<br />
dtrace: allowing destructive actions<br />
andy1<br />
CPU ID FUNCTION:NAME<br />
0 28735 rexit:entry stopping pid 27953<br />
dtrace: pid 27953 exited with status 6<br />
1 2 :END<br />
p libc.so.1`_close+0&#215;4<br />
p`poo+0&#215;8<br />
p`main+0x4c<br />
p`_start+0x5c<br />
1</p>
<p>So, another happy ending for all, in that VOSJEC managed to get to the bottom of it using plain old truss rather than Dtrace. It&#8217;s worth remembering that although Dtrace is a fantastic diagnosis tool, don&#8217;t forget the other great tools available in Solaris in trying to observe and diagnose problems you&#8217;re investigating! <img src='http://www.stormsail.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.stormsail.com/2009/03/28/dont-forget-truss-for-diagnosing-issues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Capturing data on Oracle &#8220;WARNING: aiowait timed out&#8221; events</title>
		<link>http://www.stormsail.com/2009/01/16/capturing-data-on-oracle-warning-aiowait-timed-out-events/</link>
		<comments>http://www.stormsail.com/2009/01/16/capturing-data-on-oracle-warning-aiowait-timed-out-events/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 07:20:19 +0000</pubDate>
		<dc:creator>hippy</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.stormsail.com/2009/01/16/capturing-data-on-oracle-warning-aiowait-timed-out-events/</guid>
		<description><![CDATA[Oracle &#34;WARNING: aiowait timed out&#34; error messages in the alert log are always something that needs further investigation as it can indicate some kind of I/O or system resource issue that stopping valuable I/O&#8217;s down to storage. Now there could &#8230; <a href="http://www.stormsail.com/2009/01/16/capturing-data-on-oracle-warning-aiowait-timed-out-events/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Oracle &quot;WARNING: aiowait timed out&quot; error messages in the alert log are always something that needs further investigation as it can indicate some kind of I/O or system resource issue that stopping valuable I/O&#8217;s down to storage. Now there could be a whole bunch of reasons why our asynchronous I/O as got stuck. Oracle reports &quot;WARNING: aiowait timed out&quot; messages after 10 mins of non-response since our I/O was queued by aioread(3) or aiowrite(3). It&#8217;s also worth being aware of the two method of by which Asynchronous I/O is handled by Solaris. This is either via kernel asynchronous I/O (KAIO) if the underlying filesystem supports it (raw or filesystems with added s/w which give raw access) or the standard userland library implementation. For further background reading then have a look at the Solaris™ Internals: Core Kernel Components book by Jim Mauro; Richard McDougall, chapter 11.4. Asynchronous I/O.</p>
<p>So, to help understand the where in our life cycle we&#8217;re stuck we&#8217;ll need to collect some data. This also might help us define a better problem statement, which is obviously vitally important in our rational troubleshooting process. See my previous <a href="http://www.stormsail.com/hippy/entry/what_s_the_answer_to">post</a> about the importance of defining a good problem statement </p>
<h4>Enabling the trigger environment</h4>
<p>A full crash dump is much more preferred over a live core as things tend to change on the fly whilst the dump is being taken and corrupts some of the structures in the dump so we can get strange results. In this example I&#8217;m going to assume that we don&#8217;t really want to take down the entire box as it&#8217;ll result in all services being effected other than Oracle. Obviously, try the live method first and if that doesn&#8217;t yield results then try a full dump. So, here&#8217;s the steps in enabling a triggered live savecore on an aiowait timed out error message in an Oracle alert log. </p>
<p>1/ You&#8217;ll need to setup a dedicated dump device to collect a live savecore. You&#8217;ll either need a spare raw partition or have to create a large file using mkfile, see the man page dumpadm(1M) for details on how to do this.</p>
<p>2/ Download <a href="http://www.stormsail.com/hippy/resource/livecore_aio">livecore_aio</a> and <a href="http://www.stormsail.com/hippy/resource/guds_2.8.4">guds</a> script.</p>
<p>3/ Create collect_data.sh:</p>
<p>root@hippy-1 # more collect_data.sh <br />#!/bin/sh<br />/var/tmp/guds_2.8.4 -q -c30 -i1 -n5&nbsp; -w0 -s&lt;case ref&gt; -X2 -D /var/tmp &amp;<br />/usr/bin/savecore -L<br />echo &quot;aiowait coredump event &#8211; please guds output and crash dump to Sun&quot; | mailx -s &quot;AIOWAIT TIMED OUT EVENT&quot; root</p>
<p>In my case I&#8217;m going to fire off collecting guds to gather some performance stats on the box, but you could add anything else you want to run here including a &quot;reboot -d&quot; to take a full crash dump before rebooting the box. </p>
<p>4/ Change perms on binary and script before copying to /var/tmp</p>
<p>chmod +x livecore_aio collect_data.sh <br />cp collect_data.sh to /var/tmp</p>
<p>note: livecore_aio expects collect_data.sh to be in /var/tmp for it to work correctly</p>
<p>Test run</p>
<p>Test the program and script (as root):</p>
<p># touch dummy_file<br />#./livecore_aio dummy_file &amp;<br /># echo &quot;WARNING: aiowait timed out&quot; &gt;&gt; dummy_file</p>
<p>This should produce a live savecore dump and kick off guds.</p>
<p>Deploy</p>
<p>*execute the livecore_aio binary<br />#./livecore_aio &lt;full path of alert_log&gt; &amp;</p>
<p>When issue happens, upload the live core dump and guds data to Sun for analysis.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stormsail.com/2009/01/16/capturing-data-on-oracle-warning-aiowait-timed-out-events/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle parallel query performance on a T5140</title>
		<link>http://www.stormsail.com/2008/10/25/oracle-parallel-query-performance-on-a-t5140/</link>
		<comments>http://www.stormsail.com/2008/10/25/oracle-parallel-query-performance-on-a-t5140/#comments</comments>
		<pubDate>Sat, 25 Oct 2008 12:02:02 +0000</pubDate>
		<dc:creator>hippy</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.stormsail.com/2008/10/25/oracle-parallel-query-performance-on-a-t5140/</guid>
		<description><![CDATA[Being an engineer it&#8217;s always a good feeling getting to the bottom of a problem and none so as this one. Take a T5140, create a 3 way RAID 0 LUN using the internal disks and stick Oracle on top &#8230; <a href="http://www.stormsail.com/2008/10/25/oracle-parallel-query-performance-on-a-t5140/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Being an engineer it&#8217;s always a good feeling getting to the bottom of a problem and none so as this one. Take a T5140, create a 3 way RAID 0 LUN using the internal disks and stick Oracle on top so you can do something useful with it for your application&#8230;&#8230;&#8230;..and what do you get&#8230;&#8230;&#8230; a problem. I suspect after that opening some of you are thinking &quot;where&#8217;s he going with this?&quot; &#8230;. the answer nowhere, I&#8217;m not picking holes in either the T5140 or Oracle&#8230;..good, I&#8217;m glad we got that one clear! <img src='http://www.stormsail.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p>Anyhow, so a customer came to us complaining that their application wasn&#8217;t running as expected on this platform and really wanted to know if there was a hardware fault /&nbsp; bug with platform or operating system running on it. From the tests that the customer had been doing themselves they believed that the bottleneck was the underlying I/O subsystem and in this case the LSI H/W RAID. Essentially,&nbsp; the customer had configured a 3 disk RAID 0 stripe using the default 64k stripe width like thus:</p>
<p>bash-3.00# raidctl -l c1t1d0<br />Volume&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Size&nbsp;&nbsp;&nbsp; Stripe&nbsp; Status&nbsp;&nbsp; Cache&nbsp; RAID<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Level<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Disk<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />c1t1d0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 409.9G&nbsp; 64K&nbsp;&nbsp;&nbsp;&nbsp; OPTIMAL&nbsp; OFF&nbsp;&nbsp;&nbsp; RAID0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.1.0&nbsp;&nbsp; 136.6G&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GOOD<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.2.0&nbsp;&nbsp; 136.6G&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GOOD<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.3.0&nbsp;&nbsp; 136.6G&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GOOD</p>
<p>They had then created a single slice for which Oracle was installed and configured for Direct I/O (which is a good thing anyway if you&#8217;ve a UFS filesystem) so we were avoiding the filesystem buffer cache and double buffering. So for a 64k stripe per disk and three disks gives us a total stripe width of 192k. The throughput performance of each of this disks is between 50-60mb per second which means we have a theoretical throughput on all stripes of 150-&gt;180mb per second for reads. We can forget writes as Oracle is pwrite()&#8217;ing in 8k synchronous chunks to a non-write enabled volume and only hits one disk (because 8K is less than the 64k stripe size) and hence why we saw a 1Gb tablespace creation take 18 seconds and an average through put of 56mb per second which is what we would have expected for a single disk. </p>
<p>SQL&gt; set timing on<br />SQL&gt; create tablespace andy3<br />&nbsp;2&nbsp; datafile &#8216;/u01/oracle/oradata/SUN/andy03.dbf&#8217;<br />&nbsp;3&nbsp; size 1g;</p>
<p>Tablespace created.</p>
<p>Elapsed: 00:00:18.12</p>
<p>and iostat -xnz 1 shows us</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp; 13.0&nbsp; 128.0&nbsp; 104.0 56369.0&nbsp; 0.0&nbsp; 1.6&nbsp;&nbsp;&nbsp; 0.0&nbsp;&nbsp; 11.2&nbsp;&nbsp; 1&nbsp; 93 c1t1d0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp; 14.0&nbsp;&nbsp; 78.0&nbsp; 112.0 56281.3&nbsp; 0.0&nbsp; 1.2&nbsp;&nbsp;&nbsp; 0.1&nbsp;&nbsp; 13.5&nbsp;&nbsp; 0&nbsp; 93 c1t1d0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp; 13.0&nbsp;&nbsp; 93.0&nbsp; 112.0 53734.0&nbsp; 0.0&nbsp; 1.4&nbsp;&nbsp;&nbsp; 0.0&nbsp;&nbsp; 13.4&nbsp;&nbsp; 1&nbsp; 93 c1t1d0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp; 13.0&nbsp;&nbsp; 95.0&nbsp; 104.0 58397.6&nbsp; 0.0&nbsp; 1.4&nbsp;&nbsp;&nbsp; 0.0&nbsp;&nbsp; 12.7&nbsp;&nbsp; 1&nbsp; 92 c1t1d0</p>
<p>This result was the same as the customers but things then get interesting when we start looking at full table scan parallel queries. The customer ended up with these results:</p>
</p>
<table cellspacing="1" cellpadding="1" border="1" style="width: 100%;">
<tbody>
<tr>
<td align="center" style="width: 25%;">&nbsp;Parallelism</td>
<td align="center" style="width: 25%;">Time </td>
<td align="center" style="width: 25%;">Throughput (Mb per second) </td>
<td align="center" style="width: 25%;">db_file_multiblock_read_count </td>
</tr>
<tr>
<td style="width: 25%;">&nbsp;0</td>
<td style="width: 25%;"> 719</td>
<td style="width: 25%;">13.8</td>
<td style="width: 25%;">16 (16 x 8k = 128k)</td>
</tr>
<tr>
<td style="width: 25%;">&nbsp;2</td>
<td style="width: 25%;"> 195</td>
<td style="width: 25%;"> 50.9</td>
<td style="width: 25%;"> 16</td>
</tr>
<tr>
<td style="width: 25%;">&nbsp;4</td>
<td style="width: 25%;"> 208</td>
<td style="width: 25%;"> 47.7</td>
<td style="width: 25%;"> 16</td>
</tr>
<tr>
<td style="width: 25%;">&nbsp;0</td>
<td style="width: 25%;"> 420</td>
<td style="width: 25%;">23.6</td>
<td style="width: 25%;"> 32 (32 x 8k = 256k)</td>
</tr>
<tr>
<td style="width: 25%;">&nbsp;2</td>
<td style="width: 25%;"> 163</td>
<td style="width: 25%;">60.9</td>
<td style="width: 25%;"> 32</td>
</tr>
<tr>
<td style="width: 25%;">&nbsp;4</td>
<td style="width: 25%;"> 208</td>
<td style="width: 25%;">53.9</td>
<td style="width: 25%;"> 32</td>
</tr>
</tbody>
</table>
<p>Now, they look bad especially if you think that theoretically we should be able to achieve 150mb -&gt;180mb based on a three disk stripe (3 x 60mb). </p>
<p>Using the same parallel test plan as the customer:</p>
<p>oracle@v4v-t5140a-gmp03~$more para.sql</p>
<p>set timing on;</p>
<p>select /*+ FULL(t) */ count(*) from contact_methods t;</p>
<p>select /*+ FULL(t) PARALLEL(t,2) */ count(*) from contact_methods t;</p>
<p>select /*+ FULL(t) PARALLEL(t,4) */ count(*) from contact_methods t;</p>
<p>select /*+ FULL(t) PARALLEL(t,64) */ count(*) from contact_methods t;</p>
<p>oracle@v4v-t5140a-gmp03~/oradata/SUN$ls -alh test01.dbf<br />-rw-r&#8212;&#8211;&nbsp;&nbsp; 1 oracle&nbsp;&nbsp; dba&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9.7G Oct 24 08:25 test01.dbf</p>
<p>I got these:</p>
<p>SQL&gt; @para</p>
<p>&nbsp;COUNT(*)<br />&#8212;&#8212;&#8212;-<br />&nbsp;15700000</p>
<p>Elapsed: 00:00:47.85</p>
<p>&nbsp;COUNT(*)<br />&#8212;&#8212;&#8212;-<br />&nbsp;15700000</p>
<p>Elapsed: 00:00:32.53</p>
<p>&nbsp;COUNT(*)<br />&#8212;&#8212;&#8212;-<br />&nbsp;15700000</p>
<p>Elapsed: 00:00:34.68</p>
<p>&nbsp;COUNT(*)<br />&#8212;&#8212;&#8212;-<br />&nbsp;15700000</p>
<p>Elapsed: 00:00:42.17</p>
<p>whilst the first full table scan is running I see the following in iostat -xnz 1:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp;108.0&nbsp;&nbsp;&nbsp; 0.0 93122.4&nbsp;&nbsp;&nbsp; 0.0&nbsp; 0.0&nbsp; 0.4&nbsp;&nbsp;&nbsp; 0.1&nbsp;&nbsp;&nbsp; 4.0&nbsp;&nbsp; 1&nbsp; 35 c1t1d0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp;151.0&nbsp;&nbsp;&nbsp; 3.0 95796.9&nbsp;&nbsp; 48.0&nbsp; 0.0&nbsp; 0.5&nbsp;&nbsp;&nbsp; 0.1&nbsp;&nbsp;&nbsp; 3.0&nbsp;&nbsp; 1&nbsp; 34 c1t1d0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp;115.0&nbsp;&nbsp;&nbsp; 0.0 103367.6&nbsp;&nbsp;&nbsp; 0.0&nbsp; 0.0&nbsp; 0.3&nbsp;&nbsp;&nbsp; 0.1&nbsp;&nbsp;&nbsp; 2.6&nbsp;&nbsp; 1&nbsp; 28 c1t1d0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp;116.0&nbsp;&nbsp;&nbsp; 0.0 102232.7&nbsp;&nbsp;&nbsp; 0.0&nbsp; 0.0&nbsp; 0.3&nbsp;&nbsp;&nbsp; 0.1&nbsp;&nbsp;&nbsp; 3.0&nbsp;&nbsp; 1&nbsp; 29 c1t1d0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp;122.0&nbsp;&nbsp;&nbsp; 3.0 105326.4&nbsp;&nbsp; 48.0&nbsp; 0.0&nbsp; 0.3&nbsp;&nbsp;&nbsp; 0.1&nbsp;&nbsp;&nbsp; 2.5&nbsp;&nbsp; 1&nbsp; 29 c1t1d0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp;116.0&nbsp;&nbsp;&nbsp; 0.0 96467.2&nbsp;&nbsp;&nbsp; 0.0&nbsp; 0.0&nbsp; 0.5&nbsp;&nbsp;&nbsp; 0.1&nbsp;&nbsp;&nbsp; 4.1&nbsp;&nbsp; 1&nbsp; 34 c1t1d0</p>
<p>and then</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp;193.0&nbsp;&nbsp;&nbsp; 0.0 159383.3&nbsp;&nbsp;&nbsp; 0.0&nbsp; 0.0&nbsp; 8.0&nbsp;&nbsp;&nbsp; 0.1&nbsp;&nbsp; 41.4&nbsp;&nbsp; 1 100 c1t1d0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp;195.5&nbsp;&nbsp;&nbsp; 3.0 163681.0&nbsp;&nbsp; 48.1&nbsp; 0.0&nbsp; 8.1&nbsp;&nbsp;&nbsp; 0.1&nbsp;&nbsp; 40.8&nbsp;&nbsp; 1 100 c1t1d0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp;220.1&nbsp;&nbsp;&nbsp; 0.0 188770.3&nbsp;&nbsp;&nbsp; 0.0&nbsp; 0.0&nbsp; 7.7&nbsp;&nbsp;&nbsp; 0.1&nbsp;&nbsp; 34.8&nbsp;&nbsp; 3 100 c1t1d0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp;192.0&nbsp;&nbsp;&nbsp; 0.0 168156.9&nbsp;&nbsp;&nbsp; 0.0&nbsp; 0.0&nbsp; 7.2&nbsp;&nbsp;&nbsp; 0.1&nbsp;&nbsp; 37.8&nbsp;&nbsp; 1 100 c1t1d0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp;191.0&nbsp;&nbsp;&nbsp; 3.0 162361.2&nbsp;&nbsp; 48.0&nbsp; 0.0&nbsp; 7.4&nbsp;&nbsp;&nbsp; 0.1&nbsp;&nbsp; 38.1&nbsp;&nbsp; 1 100 c1t1d0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp;190.0&nbsp;&nbsp;&nbsp; 0.0 162776.0&nbsp;&nbsp;&nbsp; 0.0&nbsp; 0.0&nbsp; 7.3&nbsp;&nbsp;&nbsp; 0.1&nbsp;&nbsp; 38.7&nbsp;&nbsp; 1 100 c1t1d0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp;192.0&nbsp;&nbsp;&nbsp; 0.0 162737.6&nbsp;&nbsp;&nbsp; 0.0&nbsp; 0.0&nbsp; 6.9&nbsp;&nbsp;&nbsp; 0.1&nbsp;&nbsp; 35.9&nbsp;&nbsp; 1 100 c1t1d0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp;186.0&nbsp;&nbsp;&nbsp; 3.0 153754.2&nbsp;&nbsp; 48.0&nbsp; 0.0&nbsp; 8.4&nbsp;&nbsp;&nbsp; 0.1&nbsp;&nbsp; 44.4&nbsp;&nbsp; 1 100 c1t1d0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extended device statistics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r/s&nbsp;&nbsp;&nbsp; w/s&nbsp;&nbsp; kr/s&nbsp;&nbsp; kw/s wait actv wsvc_t asvc_t&nbsp; %w&nbsp; %b device<br />&nbsp;191.0&nbsp;&nbsp;&nbsp; 1.0 160412.4&nbsp;&nbsp;&nbsp; 8.0&nbsp; 0.0&nbsp; 7.7&nbsp;&nbsp;&nbsp; 0.1&nbsp;&nbsp; 40.1&nbsp;&nbsp; 1 100 c1t1d0</p>
<p>when the parallel jobs are running.</p>
<p>This is because I changed the db_file_multiblock_read_count to 128 (128 * 8k = 1M) and in fact I saw improvements using 192k (64k*3) to match the s<br />
tripe width. I also went with some recommendations from <a href="http://www.sun.com/servers/coolthreads/tnb/applications_oracle.jsp">here</a> which also helped along with running the latest T5140 firmware and latest KJP 137111-08 to avoid some known performance issues.</p>
<p>It&#8217;s amazing that tuning one little option can have such a dramatic effect on the results and also shows that just because you don&#8217;t get the results you&#8217;re expecting not to assume that there is a fault with the hardware or software. For me personally, it&#8217;s always good to understand the results and how you got there, although as in all performance related issues you can sometimes get sidetracked from what&#8217;s gone on before and end going down the wrong path. To avoid that,&nbsp; make sure you chat with you&#8217;re colleagues when you feel like you&#8217;re not going anywhere as a fresh set of eyes can bring you back on the path and closer to resolution. </p>
</p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.stormsail.com/2008/10/25/oracle-parallel-query-performance-on-a-t5140/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Capturing Snoop Data On An Oracle Event</title>
		<link>http://www.stormsail.com/2008/10/01/capturing-snoop-data-on-an-oracle-event/</link>
		<comments>http://www.stormsail.com/2008/10/01/capturing-snoop-data-on-an-oracle-event/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 06:29:07 +0000</pubDate>
		<dc:creator>hippy</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.stormsail.com/2008/10/01/capturing-snoop-data-on-an-oracle-event/</guid>
		<description><![CDATA[Following from my previous article about capturing TNF data on an Oracle event, I thought I&#8217;d also mention that you can do something similar with capturing snoop data.&#160; This really came about because of trying to troubleshooting ORA-29740 issues with &#8230; <a href="http://www.stormsail.com/2008/10/01/capturing-snoop-data-on-an-oracle-event/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Following from my previous article about capturing TNF data on an Oracle event, I thought I&#8217;d also mention that you can do something similar with capturing snoop data.&nbsp; This really came about because of trying to troubleshooting ORA-29740<br />
issues with Oracle RAC. Most of the time you really want to have a look at these Sunsolve documents for giving hints: </p>
</p>
<ul>
<li> Solution  230303 : SunCluster[TM] 3.x: Troubleshooting ORA-29740 in a RAC environment
</li>
<li> Solution  205145 : Oracle error ORA-29740 (reason 3) resolved with network tuning
</li>
</ul>
<p>But, if you think that network is perhaps something worth chasing and the<br />
actual physical switches &amp; hubs etc don&#8217;t hint at a fault then we<br />
could enable the <a href="http://blogs.sun.com/hippy/resource/lantracer-1.5">lantracer</a> script to snoop on an interconnect and terminate when Oracle receives an ORA-29740. To do this you&#8217;ll need to do the following:
</p>
<p>
1) in $ORACLE_HOME/bin, place a script called oradbg containing:
</p>
</p>
<p><pre><pre>#!/bin/sh
echo &quot;stopping Lantracer&quot; &amp;gt;&amp;gt; /tmp/oradbg.$$
/usr/bin/rm /usr/tmp/lan/running
echo `/bin/date` &amp;gt; /tmp/oradbg.$$
echo &quot;done\.&quot; &amp;gt;&amp;gt; /tmp/oradbg.$$
</pre></pre></p>
<p>
2) in an sqlplus &quot;/ as sysdba&quot; session run the following:
</p>
</p>
<p><pre><pre>alter system set &quot;_oradbg_pathname&quot;=&quot;&amp;lt;$ORACLE_HOME&amp;gt;/bin/oradbg&quot; scope=spfile;
alter system set event=&quot;29740 debug&quot; scope=spfile;
</pre></pre></p>
<p>
where $ORACLE_HOME is the expanded path of the $ORACLE_HOME env var
</p>
<p>
3) add execute to the oradbg script
</p>
<p>
4) restart the instance
</p>
<p>
5/ create /var/tmp/lan and copy lantracer script to it. chmod 755 lantracer
</p>
<p>
6/ start lantracer
</p>
</p>
<p><pre><pre>cd /var/tmp/lan; ./lantracer &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 &amp;amp;
</pre></pre></p>
<p>
7/ check oracle can stop lantracer by using it to detect a 942 event:
</p>
</p>
<p><pre><pre> sqlplus &amp;lt;user&amp;gt;/&amp;lt;password&amp;gt;
alter session set events &#039;942 debug&#039;;
select * from &amp;lt;a table that doesn&#039;t exist&amp;gt;;
</pre></pre></p>
<p>
This should remove /var/tmp/lan/running and leave us with some snoop<br />
scripts which should hopefully have captured data during the event.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stormsail.com/2008/10/01/capturing-snoop-data-on-an-oracle-event/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Capturing TNF Data On An Oracle Event</title>
		<link>http://www.stormsail.com/2008/10/01/capturing-tnf-data-on-an-oracle-event/</link>
		<comments>http://www.stormsail.com/2008/10/01/capturing-tnf-data-on-an-oracle-event/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 05:56:06 +0000</pubDate>
		<dc:creator>hippy</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.stormsail.com/2008/10/01/capturing-tnf-data-on-an-oracle-event/</guid>
		<description><![CDATA[Recently, I got involved in an interesting VOSJEC problem in which Oracle was core dumping at intermittent times with ORA-7445 on a large Solaris 8 system with no known root cause. Unfortunately the core dump from Oracle or the trace &#8230; <a href="http://www.stormsail.com/2008/10/01/capturing-tnf-data-on-an-oracle-event/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Recently, I got involved in an interesting VOSJEC problem in which Oracle was core dumping at intermittent times with ORA-7445 on a large Solaris 8 system with no known root cause. Unfortunately the core dump from Oracle or the trace files helped either Oracle or us to working out the issue so a colleague of mine <a href="http://www.stormsail.com/timatworkhomeandinbetween/">Tim Uglow</a> managed to create a <a href="http://developers.sun.com/solaris/articles/tnf.html">TNF</a> package to collect <a href="http://developers.sun.com/solaris/articles/tnf.html">TNF</a> data constantly and then stop/dump the <a href="http://developers.sun.com/solaris/articles/tnf.html">TNF</a> kernel buffer out to disk at the time that the Oracle event happened. That way we&#8217;d be able to see what led up to the event. </p>
<p>To allow oracle processes running as user &quot;oracle&quot; to stop the tnf kernel tracing we need to change the permissions on the tnf driver. Currently you have ..</p>
<p><pre># ls -alL /dev/tnf*</pre><br />
<pre>crw-------&amp;nbsp;&amp;nbsp; 1 root&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 114,&amp;nbsp; 0 Apr 10 22:02 /dev/tnfctl</pre><br />
<pre>crw-------&amp;nbsp;&amp;nbsp; 1 root&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 114,&amp;nbsp; 1 Apr 10 22:02 /dev/tnfmap</pre><br />and we need to change it to &#8230;</p>
<p><pre># ls -alL /dev/tnf*</pre><br />
<pre>crw-rw-rw-&amp;nbsp;&amp;nbsp; 1 root&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 114,&amp;nbsp; 0 Jun 27 15:57 /dev/tnfctl</pre><br />
<pre>crw-rw-rw-&amp;nbsp;&amp;nbsp; 1 root&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 114,&amp;nbsp; 1 Jun 27 15:57 /dev/tnfmap</pre><br />This is done by the following two commands&#8230;</p>
<p><pre># rem_drv tnf</pre><br />
<pre># add_drv -m &#039;* 0666 root sys&#039; tnf</pre><br />the install script for <a href="http://www.stormsail.com/hippy/resource/JAVAtnfd.datastream.pkg">JAVAtnfd.datastream.pkg</a> package will do this for you and the uninstall script will put it back to its original state. This change would allow ordinary users to affect the kernel tracing but most users don&#8217;t know about the subsystem and the only information they can gather is kernel events, there is no actual data visible.</p>
<h3>Installing the scripts</h3>
<p>1) copy <a href="http://www.stormsail.com/hippy/resource/JAVAtnfd.datastream.pkg">JAVAtnfd.datastream.pkg</a> to /tmp on your machine<br />2) pkgadd -d&nbsp; /tmp/JAVAtnfd.datastream.pkg </p>
<p>You may get warning messages like ..</p>
<p><pre>&quot;Device busy</pre><br />
<pre>Cannot unload module: tnf</pre><br />
<pre>Will be unloaded upon reboot.&quot;</pre><br />These can be ignored.. devfsadm will have changed the permissions.</p>
<p>To start the tnf tracing..</p>
<p>as root please run &#8230;</p>
<p><pre># cd /opt/JAVAtnfd/data </pre><br />
<pre># /usr/bin/nohup /opt/JAVAtnfd/bin/tnfscript &amp;amp;</pre><br />then check in /opt/JAVAtnfd/data/nohup.out for errors, every time you start it it will append to nohup.out.</p>
<p>If you needed to stop the tracing ..</p>
<p>looking in /opt/JAVAtnfd/data/nohup.out for the last line like &quot;tnfscript pid XXXX starting&quot; and then run &#8230;</p>
<p><pre># kill XXXX</pre><br />should stop it.</p>
<p>When the oracle debug executes it will touch /opt/JAVAtnfd/data/stop and stop the tnf tracing and that will cause the tnfscript to exit at the end of its 10 minute loop &#8211; look at the end of /opt/JAVAtnfd/data/nohup.out for &quot;tnfscript pid XXXX exiting as requested by Oracle&quot;. Before it exits it will extract the required files into /opt/JAVAtnfd/data/*.&#8217;date&#8217; and email root the location of the four files that need to be sent to support together with the Oracle alert log and the trace file that will be mentioned in the alert.log file, something like&#8230;.</p>
<p><pre>Errors in file &amp;lt;path to trace file&amp;gt;</pre><br />
<pre>ORA-7445...</pre><br />
<pre>&amp;lt;path to trace file&amp;gt; is also required.</pre></p>
<h3>Instructions from Oracle to get Oracle processes to stop the tnf on a ORA-7445 error.</h3>
<p>1) in init.ora define the following 2 parameters:</p>
<p><pre>&amp;nbsp; event=&quot;7445 debug&quot;</pre><br />
<pre>&amp;nbsp; _oradbg_pathname=&amp;lt;$ORACLE_HOME&amp;gt;/bin/oradbg</pre><br />or you can set via and sqlplus session:</p>
<p><pre>SQL&amp;gt; alter system set &quot;_oradbg_pathname&quot;=&quot;/u01/oracle/product/10.2.0/db/bin/oradbg&quot; scope=both;</pre><br />
<pre>System altered.</pre><br />
<pre>SQL&amp;gt; alter system set event=&quot;7445 debug&quot; scope=spfile;</pre><br />
<pre>System altered.</pre><br />where $ORACLE_HOME is the expanded path of the $ORACLE_HOME environment variable</p>
<p>2) in $ORACLE_HOME/bin, place a script called oradbg containing:</p>
<p><pre>&amp;nbsp; #!/bin/sh</pre><br />
<pre>&amp;nbsp; echo &quot;stopping TNF collection using prex&quot; &amp;gt;&amp;gt; /tmp/oradbg.$$</pre><br />
<pre>&amp;nbsp; echo &quot;ktrace off&quot; | /usr/bin/prex -k</pre><br />
<pre>&amp;nbsp; echo $$ &amp;gt; /opt/JAVAtnfd/data/stop</pre><br />
<pre>&amp;nbsp; echo `/bin/date` &amp;gt; /tmp/oradbg.$$</pre><br />
<pre>&amp;nbsp; echo &quot;done\.&quot; &amp;gt;&amp;gt; /tmp/oradbg.$$</pre><br />3) add execute to the oradbg script</p>
<p>4) restart the instance</p>
<p>Upon a 7445 error being encountered (whereby oracle&#8217;s signal handler spots a sigsegv/core dump) we will disable the prex via the built-in oracle &#8216;debug&#8217; event and a file will be written to /tmp containing the date and time and a note that we stopped prex. It willalso touch the file /opt/JAVAtnfd/data/stop which will signal the Sun tnf script to stop. Obviously if the customer has any path differences for any of the bins they should modify accordingly. This can easily be tested after restarting the instance by running:</p>
<p><pre>sqlplus &amp;lt;user&amp;gt;/&amp;lt;password&amp;gt;</pre><br />
<pre>&amp;nbsp;alter session set events &#039;942 debug&#039;;</pre><br />
<pre>&amp;nbsp;select * from &amp;lt;a table that doesn&#039;t exist&amp;gt;;</pre><br />This will generate an error along the lines: &lt;</p>
<p><pre>ERROR at line 1:</pre><br />
<pre>ORA-00942: table or view does not exist</pre><br />and the debug event will fire on the temporary session-level dummy version of the event and will run the prex command. They can then check /tmp for a new file with the details called oradbg. Obviously you can trace any other Oracle event by just changing the events debug in sqlplus which might make problem resolution potentially a little easier on Solaris prior to Solaris 10 and the world of Dtrace! <img src='http://www.stormsail.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.stormsail.com/2008/10/01/capturing-tnf-data-on-an-oracle-event/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Served from: www.stormsail.com @ 2012-02-06 13:33:39 -->
