<?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>Le blog - Guireg CAPITAINE &#187; Explain plan</title>
	<atom:link href="http://www.guiregcapitaine.com/tag/explain-plan/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.guiregcapitaine.com</link>
	<description>Le blog de mes expériences</description>
	<lastBuildDate>Sun, 30 May 2010 10:08:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Générer des traces sur votre instance Oracle</title>
		<link>http://www.guiregcapitaine.com/2009/11/07/generer-des-traces-sur-votre-instance-oracle/</link>
		<comments>http://www.guiregcapitaine.com/2009/11/07/generer-des-traces-sur-votre-instance-oracle/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 11:48:52 +0000</pubDate>
		<dc:creator>Guireg CAPITAINE</dc:creator>
				<category><![CDATA[Mes expériences personnelles]]></category>
		<category><![CDATA[10G]]></category>
		<category><![CDATA[11G]]></category>
		<category><![CDATA[Base de données]]></category>
		<category><![CDATA[Explain plan]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle Database]]></category>
		<category><![CDATA[Plan d'exécution]]></category>
		<category><![CDATA[tkprof]]></category>
		<category><![CDATA[Traces]]></category>

		<guid isPermaLink="false">http://www.guiregcapitaine.com/?p=355</guid>
		<description><![CDATA[
Introduction
Imaginez-vous dans cette situation : un programmeur vous appelle &#171;&#160;Monsieur CAPITAINE, j&#8217;ai des problèmes avec un de mes traitements sur l&#8217;instance de Dèv, c&#8217;est très lent. Pouvez-vous me dire ce qui est lent ?&#160;&#187;. Qu&#8217;allez-vous faire ? Vous allez lancer des traces.
C&#8217;est un des outils les plus pratiques du DBA Oracle. Une trace est un [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" style="border: 0pt none;" src="http://www.guiregcapitaine.com/wp-content/uploads/2009/10/traces_inversed.jpeg" alt="" width="182" height="182" /></p>
<h1>Introduction</h1>
<p>Imaginez-vous dans cette situation : un programmeur vous appelle &laquo;&nbsp;Monsieur CAPITAINE, j&#8217;ai des problèmes avec un de mes traitements sur l&#8217;instance de Dèv, c&#8217;est très lent. Pouvez-vous me dire ce qui est lent ?&nbsp;&raquo;. Qu&#8217;allez-vous faire ? Vous allez lancer des traces.</p>
<p>C&#8217;est un des outils les plus pratiques du DBA Oracle. Une trace est un fichier plat qui recense tous les ordres SQL passés entre un laps de temps que vous définirez. Dans l&#8217;exemple plus haut, l&#8217;intervalle serait <em>Début du traitement &#8211; Fin du traitement</em> .</p>
<h1>Un peu de technique</h1>
<p>Voici une trace : <a href="http://www.guiregcapitaine.com/wp-content/uploads/orcl_ora_3428.trc" target="_blank">Cliquez ici pour la voir</a></p>
<p>Première impression : &laquo;&nbsp;Gné ?&nbsp;&raquo; . Vous avez tout à fait raison. Les traces, en elle-même, sans être parsées par l&#8217;utilitaire tkprof sont globalement illisibles sauf pour les DBA très expérimentés qui se feront une joie de vous les déchiffrer.</p>
<p>Pour satisfaire votre curiosité, voici la même trace qu&#8217;au dessus mais à la différence d&#8217;être parsées par TKPROF : <a href="http://www.guiregcapitaine.com/wp-content/uploads/trace.txt" target="_blank">Cliquez ici pour la voir</a></p>
<h1>Comment on trace ?</h1>
<p>Il y a plusieurs façons de générer des traces. Vous pouvez les générer pour &laquo;&nbsp;vous&nbsp;&raquo; au niveau session, mais vous pouvez aussi les générer pour une session différente de la vôtre.</p>
<h2>Tracer votre propre session</h2>
<p>Tout d&#8217;abord au niveau de votre de votre session, la solution la plus simple est l&#8217;ALTER SESSION :</p>
<blockquote><p>ALTER SESSION SET EVENTS &#8216;10046 trace name context forever,level 12&#8242;;</p></blockquote>
<p>Vous n&#8217;avez plus qu&#8217;à exécuter votre traitement qui pose des soucis de performance. Une fois terminée, vous n&#8217;avez qu&#8217;à entrer cette commande :</p>
<blockquote><p>ALTER SESSION SET EVENTS &#8216;10046 trace name context off&#8217;;</p></blockquote>
<p><strong>Tiens d&#8217;ailleurs en parlant de ça je pourrais les trouver où mes traces ?</strong></p>
<p>Pour trouver l&#8217;emplacement de vos traces, il suffit d&#8217;ouvrir SQL*plus et de copier la commande</p>
<blockquote><p>show parameter user_dump_dest</p></blockquote>
<p>Le résultat est le dossier exact où se trouve toutes vos traces générées.</p>
<h2>Tracer une session distante</h2>
<p>Maintenant, pour tracer des sessions distantes, vous pouvez utiliser le package DBMS_SYSTEM comme ceci :</p>
<blockquote>
<pre style="line-height: 18pt;">EXECUTE DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION (sid=&gt;[sid],serial#=&gt;[serial],sql_trace=&gt;TRUE);</pre>
</blockquote>
<p>Exécutez votre traitement puis pour stopper les traces :</p>
<blockquote>
<pre style="line-height: 18pt;">EXECUTE DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION (sid=&gt;[sid],serial#=&gt;[serial],sql_trace=&gt;FALSE);</pre>
</blockquote>
<p><span style="color: #ff0000;">Attention :</span> Votre utilisateur doit avoir le droit EXECUTE sur le package DBMS_SYSTEM pour faire ceci.</p>
<p><strong>Je fais comment pour récupérer le SID et le SERIAL ?</strong></p>
<p>Le SID (Session ID) et le Serial# sont des identifiants uniques attachés à chaque session sur votre base de données Oracle. Pour récupérer le SID de la session visée, exécutez cette requête :</p>
<blockquote>
<pre style="line-height: 18pt;">SELECT SYS_CONTEXT('userenv','SID') SID FROM DUAL;</pre>
</blockquote>
<p>Ensuite, avec un utilisateur qui a les privilèges de SELECT sur la vue V$SESSION, vous pouvez retrouver le serial avec cette requête :</p>
<blockquote>
<pre style="line-height: 18pt;">SELECT serial# FROM V$SESSION WHERE sid=[SID précédemment trouvé];</pre>
</blockquote>
<h1>Conclusion</h1>
<p>Maintenant que vous savez lancer des traces de votre session et d&#8217;une distante, il vous faut les rendre lisibles. Pour ceci, la page suivante vous apprendra à manipuler l&#8217;utilitaire<em> tkprof.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.guiregcapitaine.com/2009/11/07/generer-des-traces-sur-votre-instance-oracle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
