<?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>GuiregCAPITAINE.com &#187; 10G</title>
	<atom:link href="http://www.guiregcapitaine.com/tag/10g/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.guiregcapitaine.com</link>
	<description>Mon blog, mes expériences ! Un fan incontesté des produits Oracle au p&#039;tit soin pour ses lecteurs !</description>
	<lastBuildDate>Tue, 07 Feb 2012 13:44:27 +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>Restaurer votre Base de données Oracle dans quelques situations avec RMAN !</title>
		<link>http://www.guiregcapitaine.com/2011/03/13/restaurer-votre-base-de-donnees-oracle-dans-quelques-situations-avec-rman/</link>
		<comments>http://www.guiregcapitaine.com/2011/03/13/restaurer-votre-base-de-donnees-oracle-dans-quelques-situations-avec-rman/#comments</comments>
		<pubDate>Sat, 12 Mar 2011 23:16:57 +0000</pubDate>
		<dc:creator>Guireg CAPITAINE</dc:creator>
				<category><![CDATA[Sauvegarde / Restauration]]></category>
		<category><![CDATA[10G]]></category>
		<category><![CDATA[10GR2]]></category>
		<category><![CDATA[11G]]></category>
		<category><![CDATA[11GR2]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle Database]]></category>
		<category><![CDATA[restauration]]></category>
		<category><![CDATA[restore]]></category>
		<category><![CDATA[rman]]></category>
		<category><![CDATA[sauvegarde]]></category>

		<guid isPermaLink="false">http://www.guiregcapitaine.com/?p=733</guid>
		<description><![CDATA[Introduction Une goutte de sueur froide qui coule, le palpitant qui va sortir de votre poitrine et les mains moites comme un automne anglais, ça y est vous [..]]]></description>
			<content:encoded><![CDATA[<h1><a href="http://www.guiregcapitaine.com/wp-content/uploads/2010/10/repair.jpg" rel="lightbox[733]"><img class="alignright size-medium wp-image-748" title="repair" src="http://www.guiregcapitaine.com/wp-content/uploads/2010/10/repair-300x240.jpg" alt="" width="233" height="186" /></a>Introduction</h1>
<p>Une goutte de sueur froide qui coule, le palpitant qui va sortir de votre poitrine et les mains moites comme un automne anglais, ça y est vous êtes au moment fatidique : la restauration de votre base de données.</p>
<p>Si il y a bien quelquechose qui doit être maîtriser quand on est Administrateur de bases de données, c&#8217;est la restauration des données en cas de panne de votre base de données. Qu&#8217;ils s&#8217;agissent d&#8217;un disque dur cassé, d&#8217;un contrôleur raid mort etc&#8230; vous devez pouvoir restaurer vos données sinon vous pourrez y laisser votre job assez rapidement.</p>
<p>Pour ça, Oracle vous fournit un outil formidable qui répond au doux nom de RMAN (Recovery Manager) et qui permet de gérer complètement ses sauvegardes et ses restaurations en quelques lignes de commandes.</p>
<p><span id="more-733"></span></p>
<h1>Mise en situation</h1>
<p>Avant de faire quelques scénarios de restauration, il est important de positionner notre situation. Nous avons une base de données Oracle avec les ControlFiles et les RedoLogs multiplexés.Nous allons nous baser sur le schéma classique HR en y ajoutant quelques lignes pour voir la restauration.</p>
<p>On admet que la base de données est en ArchiveLog Mode et qu&#8217;il n&#8217;y a pas de catalogue RMAN installé. Nous avons un volume de données risible et un environnement très basique donc il est bon</p>
<p>Tout d&#8217;abord, nous allons rajouter une ligne dans la table countries :</p>
<blockquote><p>SQL&gt; INSERT INTO hr.countries (country_id,country_name,region_id) VALUES (&#8216;BZ&#8217;,'Bretagne&#8217;,1);</p>
<p>SQL &gt; COMMIT;</p></blockquote>
<p>Ensuite, on va faire une backup entière de notre base de données avec RMAN :</p>
<blockquote><p>$ bin/rman target /</p>
<p>RMAN &gt; backup full database;</p></blockquote>
<p>Enfin, nous allons rajouter une autre ligne dans la table employees après cette sauvegarde :</p>
<blockquote><p>SQL&gt; INSERT INTO hr.employees (employee_id,first_name,last_name,email,hire_date,job_id) VALUES (hr.employees_seq.nextval,&#8217;Guireg&#8217;,'CAPITAINE&#8217;,'guireg@company.com&#8217;,sysdate,&#8217;MK_MAN&#8217;);</p>
<p>SQL &gt; COMMIT;</p></blockquote>
<p>Maintenant que notre scénario est là, on va essayer de couvrir le plus de situations possibles pour retrouver nos données. Il est important de savoir que même si notre dernière ligne a été enregistrée après la sauvegarde, nous DEVONS absolument la retrouver une fois la restauration faite.</p>
<h1>Les différents scénarios</h1>
<h2>Perte d&#8217;un ou plusieurs datafiles</h2>
<p>Le scénario le plus simple, nous perdons un datafile, celui qui contient notre nouvelle ligne : la base se monte mais ne pas s&#8217;ouvrir.</p>
<blockquote><p>SQL&gt; startup;<br />
ORACLE instance started.</p>
<p>Total System Global Area  422670336 bytes<br />
Fixed Size                  1336960 bytes<br />
Variable Size             327158144 bytes<br />
Database Buffers           88080384 bytes<br />
Redo Buffers                6094848 bytes<br />
Database mounted.<br />
ORA-01157: cannot identify/lock data file 4 &#8211; see DBWR trace file<br />
ORA-01110: data file 4: &#8216;/app/oracle/oradata/orcl/users01.dbf&#8217;</p></blockquote>
<p>Du coup, nous ouvrons RMAN et nous lançons la restauration de notre datafile perdu.</p>
<blockquote><p>$ bin/rman target /</p>
<p>RMAN&gt; restore datafile 4;</p>
<p>RMAN&gt; recover datafile 4;</p></blockquote>
<p>Puis on ouvre la base de données.</p>
<blockquote><p>SQL&gt; alter database open;</p></blockquote>
<h3>Comment connaît-on le numéro du datafile à restaurer ?</h3>
<p>Il est tout simplement indiqué dans le message d&#8217;erreur lorsque nous démarrons la base de données (Cannot identify data file 4) <img src='http://www.guiregcapitaine.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>On vérifie si notre employés est toujours présent :</p>
<blockquote><p>SQL&gt; select last_name from hr.employees where first_name=&#8217;Guireg&#8217;;</p>
<p>LAST_NAME<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
CAPITAINE</p></blockquote>
<p>Tout est bon !</p>
<h2>Perte d&#8217;un controlfiles</h2>
<p>Par défaut, les controlfiles sont multiplexés en 2 exemplaires. Si vous perdez un seul controlfile, il vous suffira de copier votre controlfile restant dans l&#8217;emplacement de celui perdu.</p>
<p>Par défaut, un controlfile est situé dans le répertoire oradata et le deuxième la flash_recovery_area.</p>
<h2>Perte de tous les controlfiles</h2>
<p>Lorsque vous perdez tous les controlfiles, votre base ne peut même pas être montée et dans notre cas, nous avons aussi perdus notre &laquo;&nbsp;catalogue&nbsp;&raquo; RMAN rendant impossible une multitude de commande RMAN qui automatise la restauration. Qu&#8217;est-ce qu&#8217;on va alors faire ? Dans l&#8217;hypothèse que vous aviez sauvegardé votre DBID et votre controlfile dans votre dernière backup RMAN, nous sommes sauvés !</p>
<p>On ouvre RMAN puis on renseigne le DBID et on restore notre controlfile à partir de notre sauvegarde faites la veille :</p>
<blockquote><p>$ bin/rman target /</p>
<p>RMAN&gt; set DBID=1256634398</p>
<p>RMAN&gt; restore controlfile from &#8216;/app/oracle/flash_recovery_area/ORCL/backupset/2010_10_03/o1_mf_ncsnf_TAG20101003T175944_6bkb9tc1_.bkp&#8217;;<br />
Starting restore at 04-OCT-10<br />
using target database control file instead of recovery catalog<br />
allocated channel: ORA_DISK_1<br />
channel ORA_DISK_1: SID=20 device type=DISK</p>
<p>channel ORA_DISK_1: restoring control file<br />
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01<br />
output file name=/app/oracle/oradata/orcl/control01.ctl<br />
output file name=/app/oracle/flash_recovery_area/orcl/control02.ctl<br />
Finished restore at 04-OCT-10</p></blockquote>
<p>Ensuite, il faut qu&#8217;on synchronise le controlfile avec l&#8217;état actuel de la base de données car il a quelques heures de retard !</p>
<p>On monte la base de données puis on fait un recover de la base. Ensuite, on finit par l&#8217;ouvrir en mode resetlogs.</p>
<blockquote><p>RMAN&gt; alter database mount;</p>
<p>RMAN&gt; recover database;</p>
<p>RMAN&gt; alter database open resetlogs;</p></blockquote>
<p>Notre base est ouverte. Il ne reste plus qu&#8217;à vérifier que notre ligne ajoutée après la sauvegarde est toujours là :</p>
<blockquote><p>SQL&gt; select last_name from hr.employees where first_name=&#8217;Guireg&#8217;;</p>
<p>LAST_NAME<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
CAPITAINE</p></blockquote>
<p>C&#8217;est encore un coup gagnant !</p>
<h3>Où je trouve le DBID ?</h3>
<p>Le DBID est un identifiant que vous pourrez trouver en exécutant cette requête :</p>
<blockquote><p>SQL&gt; SELECT DBID FROM v$database;</p></blockquote>
<p>Il est aussi renseigné à chaque login sur RMAN. Il doit être impérativement écrit quelque part lorsque vous installez une base de données en cas de perte de votre catalogue RMAN.</p>
<h3>Où je trouve ma sauvegarde ?</h3>
<p>Par défaut, les sauvegardes se trouvent dans $ORACLE_BASE/flash_recovery_area/[SID]/backupset/[Date]/xxx.bkp.</p>
<h2>Perte de vos archivelog</h2>
<p>Si vous perdez l&#8217;ensemble de vos archiveLog, vous ne pourrez restaurer votre base de données qu&#8217;à la date de votre dernière sauvegarde. Aucune modification entre votre sauvegarde et le moment où votre base a crashée pourra être restaurée.</p>
<h1>Utilisateurs de la 11G</h1>
<p>Pour les utilisateurs de Oracle 11G, vous pouvez restaurer votre base en 3 commandes grâce à l&#8217;utilitaire Data Recovery Advisor. Voici un article pour savoir comment l&#8217;utilisateur : <a href="http://www.guiregcapitaine.com/2010/10/16/restaurer-votre-base-oracle-en-3-lignes-avec-data-recovery-advisor/">Restaurer votre base Oracle en 3 lignes avec Data Recovery Advisor </a></p>
<h1>Conclusion</h1>
<p>Les backups sont une grande part du travail du DBA. Il est crucial de multiplexer vos redo logs , vos control files et vos archive log dans votre base de données si vous voulez perdre absolument aucune donnée lors d&#8217;une restauration. N&#8217;hésitez surtout pas à tester vos sauvegardes même si tout va bien en ce moment car ce n&#8217;est pas le jour J qu&#8217;il faudra vous rendre compte que vos backups sont corrompus.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guiregcapitaine.com/2011/03/13/restaurer-votre-base-de-donnees-oracle-dans-quelques-situations-avec-rman/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Le tuning SQL avec des vues matérialisées</title>
		<link>http://www.guiregcapitaine.com/2011/02/17/le-tuning-sql-avec-des-vues-materialisees/</link>
		<comments>http://www.guiregcapitaine.com/2011/02/17/le-tuning-sql-avec-des-vues-materialisees/#comments</comments>
		<pubDate>Wed, 16 Feb 2011 23:37:01 +0000</pubDate>
		<dc:creator>Guireg CAPITAINE</dc:creator>
				<category><![CDATA[Tuning]]></category>
		<category><![CDATA[10G]]></category>
		<category><![CDATA[10g2]]></category>
		<category><![CDATA[11G]]></category>
		<category><![CDATA[11GR2]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[dba]]></category>
		<category><![CDATA[materialized view]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Vue matérialisée]]></category>

		<guid isPermaLink="false">http://www.guiregcapitaine.com/?p=777</guid>
		<description><![CDATA[Introduction Dans le monde de la base de données, notamment en DataWareHouse, il arrive fréquemment d’avoir à exécuter de très grosses requêtes SQL sur de très gros volumes [..]]]></description>
			<content:encoded><![CDATA[<h1><a href="http://www.guiregcapitaine.com/wp-content/uploads/2011/02/how-to-calculate-your-name.jpg" rel="lightbox[777]"><img class="alignright size-full wp-image-782" title="how-to-calculate-your-name" src="http://www.guiregcapitaine.com/wp-content/uploads/2011/02/how-to-calculate-your-name.jpg" alt="" width="206" height="155" /></a>Introduction</h1>
<p>Dans le monde de la base de données, notamment en DataWareHouse, il arrive fréquemment d’avoir à exécuter de très grosses requêtes SQL sur de très gros volumes de données combinant des jointures, des aggrégats etc…</p>
<p>Ces requêtes sont très consommatrices de ressources et peuvent ralentir votre base de données pendant un petit bout de temps.</p>
<p>Pour pallier à ce problème, Oracle dispose d’une fonctionnalité qui s’appelle les vues matérialisées. Ces objets vont permettre de prendre les résultats d’une requête et d’en créer une table pour pouvoir par la suite juste consulter la table et non plus calculer les résultats.</p>
<p>Les plus fins d’entre vous se demanderont comment ça se passe lorsque les données sont mises à jour sur une des tables concernées. Oracle a tout prévu pour ça et propose plusieurs rafraichissement de votre vue matérialisée.</p>
<p>Cet article couvrira seulement le côté « Tuning » des vues matérialisées mais ne couvrira pas entièrement tout sur les vues matérialisées. Pour ce dernier, la doc officielle Oracle est très bien faite ;)</p>
<h1>Création d’une vue matérialisée</h1>
<p>Tout d’abord un petit rappel, nous allons voir comment créer une vue matérialisée.  Ceci se passe grâce à la DDL <em>CREATE MATERIALIZED VIEW</em> avec la syntaxe ci-contre :</p>
<p><a href="http://www.guiregcapitaine.com/wp-content/uploads/2011/02/create_materialized_view1.gif" rel="lightbox[777]"><img class="alignnone size-full wp-image-781" title="create_materialized_view" src="http://www.guiregcapitaine.com/wp-content/uploads/2011/02/create_materialized_view1.gif" alt="" width="744" height="567" /></a></p>
<p>(Source : Oracle.com)</p>
<p>Voici un exemple très simple de création d’une vue matérialisée qui ferait la jointure entre la table Employees et Departments</p>
<pre class="brush: sql">
CREATE MATERIALIZED VIEW hr.mymv AS
SELECT employee_id, first_name, last_name, department_name
FROM employees e
JOIN departments d on (e.department_id=d.department_id);</pre>
<h1>La clause QUERY REWRITE</h1>
<p>La clause QUERY REWRITE est sans aucun doute le plus gros avantage des vues matérialisées. Cette petite clause qui va s’ajoute dans notre DDL de création de vue matérialisée va nous permettre d’autoriser Oracle à s’appuyer le plus possible sur nos VMs pour exécuter nos requêtes SQL.</p>
<p>Késako ? Vous avez rien compris à ce que je voulais dire ? Voici un exemple pour mieux comprendre.</p>
<p>Tout d’abord, nous allons observer le plan d’exécution de notre requête qui a servi à faire notre vue matérialisée :</p>
<p><a href="http://www.guiregcapitaine.com/wp-content/uploads/2011/02/Capture1.png" rel="lightbox[777]"><img class="size-full wp-image-792 alignnone" title="Capture1" src="http://www.guiregcapitaine.com/wp-content/uploads/2011/02/Capture1.png" alt="" width="557" height="139" /></a></p>
<p>Tout va bien, l’optimizer fait la jointure et la requête a un coût de 6 . Maintenant, nous allons supprimer notre ancienne vue matérialisée et la recréer en prenant soin de positionner le paramètre QUERY REWRITE à ENABLE.</p>
<pre class="brush: sql">
DROP MATERIALIZED VIEW hr.myMV;
CREATE MATERIALIZED VIEW hr.myMV
ENABLE QUERY REWRITE
AS
SELECT employee_id, first_name, last_name, department_name
FROM hr.employees e
JOIN hr.departments d on (e.department_id=d.department_id);</pre>
<p>Puis on re-regarde le plan d’exécution de notre requête :</p>
<p><a href="http://www.guiregcapitaine.com/wp-content/uploads/2011/02/Capture2.png" rel="lightbox[777]"><img class="alignnone size-full wp-image-793" title="Capture2" src="http://www.guiregcapitaine.com/wp-content/uploads/2011/02/Capture2.png" alt="" width="557" height="59" /></a></p>
<p>Surprise ! On voit que notre requête ne recalcule plus la jointure mais va carrément consulter notre vue matérialisée de façon complètement transparente. Ceci a fait diviser le coût par 2 pour atteindre un coût de 3.</p>
<p>Encore mieux, si on regarde le plan d’exécution de cette requête :</p>
<pre class="brush: sql">
SELECT e.employee_id
FROM hr.employees e
JOIN hr.departments d on (e.department_id=d.department_id)
ORDER BY d.department_name;</pre>
<p><a href="http://www.guiregcapitaine.com/wp-content/uploads/2011/02/Capture3.png" rel="lightbox[777]"><img class="alignnone size-full wp-image-795" title="Capture3" src="http://www.guiregcapitaine.com/wp-content/uploads/2011/02/Capture3.png" alt="" width="555" height="81" /></a></p>
<p>On voit que l’Optimizer vient faire un GROUP BY sur les résultats de notre vue matérialisée sans recalculer tout.</p>
<p>Pas mal non ?</p>
<h1>Quand faire des vues matérialisées ? Quelles précautions prendre ?</h1>
<p>Chacun a « son seuil » pour créer des vues matérialisées. Personnellement, je le fais très souvent. Dès qu’un ordre SQL est très consommateur de ressources et revient relativement souvent, je positionne une vue matérialisée avec la clause QUERY REWRITE.</p>
<p>Certains DBAs déconseillent de trop créer de vues matérialisées sur une table, entraînant des pertes de performances lors des COMMIT car il doit rafraîchir les vues matérialisées.</p>
<p>Une dernière indication est à prendre en compte, lorsque vous faites un nombre conséquent de DML ou une modification d’un nombre conséquent de lignes, il est parfois plus rapide de reconstruire complètement sa vue matérialisée que de faire du FAST REFRESH.</p>
<p>Certains d’entre vous doivent se dire que les vues matérialisées peuvent consommer beaucoup d’espace disque. Oui c’est vrai, mais à l’heure actuelle, quand on voit le coût du stockage, ça ne pose pas tellement de problèmes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guiregcapitaine.com/2011/02/17/le-tuning-sql-avec-des-vues-materialisees/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Démarrer automatiquement Oracle au démarrage de OEL</title>
		<link>http://www.guiregcapitaine.com/2009/12/14/demarrer-automatiquement-oracle-au-demarrage-de-oel/</link>
		<comments>http://www.guiregcapitaine.com/2009/12/14/demarrer-automatiquement-oracle-au-demarrage-de-oel/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 21:30:05 +0000</pubDate>
		<dc:creator>Guireg CAPITAINE</dc:creator>
				<category><![CDATA[Astuces]]></category>
		<category><![CDATA[10G]]></category>
		<category><![CDATA[11G]]></category>
		<category><![CDATA[démarrage automatique]]></category>
		<category><![CDATA[démarrer automatiquement]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle enterprise linux]]></category>

		<guid isPermaLink="false">http://www.guiregcapitaine.com/fr/?p=465</guid>
		<description><![CDATA[Introduction Lorsqu&#8217;un serveur redémarre de façon brutale, il est toujours utile que votre base de donnée Oracle redémarre automatiquement lorsque le système s&#8217;initialise. Ceci peut vous éviter des [..]]]></description>
			<content:encoded><![CDATA[<h1><a href="http://www.guiregcapitaine.com/wp-content/uploads/2009/12/starting-blocks-2.jpg" rel="lightbox[465]"><img class="size-thumbnail wp-image-514 alignright" title="starting-blocks-2" src="http://www.guiregcapitaine.com/wp-content/uploads/2009/12/starting-blocks-2-150x150.jpg" alt="" width="150" height="150" /></a>Introduction</h1>
<p>Lorsqu&#8217;un serveur redémarre de façon brutale, il est toujours utile que votre base de donnée Oracle redémarre automatiquement lorsque le système s&#8217;initialise. Ceci peut vous éviter des downs très longs et de nombreuses interventions de votre part qui s&#8217;avèrent au final pas très utiles. En plus, Oracle vous as facilité la vie pour mettre ça en place ! Vous n&#8217;avez donc aucune raison pour ne pas lire le reste de l&#8217;article <img src='http://www.guiregcapitaine.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h1>Modification de /etc/oratab</h1>
<p>Il va vous falloir modifier le fichier /etc/oratab . Le fichier est au format</p>
<blockquote><p>$ORACLE_SID:$ORACLE_HOME:N|Y</p></blockquote>
<p>La dernière colonne indique aux scripts dbstart et dbshut (vu par la suite) de démarrer (Y) ou pas (N) cette instance.</p>
<p>Exemple :</p>
<blockquote><p>orcl:/app/oracle/product/11.2.0/dbhome_1:N</p></blockquote>
<p>Il faut que vous changiez le &laquo;&nbsp;N&nbsp;&raquo; de la ligne de l&#8217;instance que vous voulez démarrer en &laquo;&nbsp;Y&nbsp;&raquo;. Ce qui donnera pour notre ligne en exemple :</p>
<blockquote><p>orcl:/app/oracle/product/11.2.0/dbhome_1:<span style="color: #ff0000;">Y</span></p></blockquote>
<h1>Création du script de démarrage</h1>
<p>A partir de maintenant, nous allons créer un script bash qui sera exécuté à chaque démarrage. Ce script appellera les deux scripts dbstart et dbshut qui s&#8217;occuperont respectivement de lancer et d&#8217;arrêter votre base de données.</p>
<p>Vous pouvez télécharger ce script <a title="Script Oracle de démarrage automatique" href="http://www.guiregcapitaine.com/wp-content/uploads/oracle" target="_blank">à cette addresse</a>. Copiez le dans le dossier /etc/init.d en prenant soin de remplacer les valeurs {A remplacer} par le ORACLE_HOME et le ORACLE_SID respectivement.</p>
<p><strong>Exécuter ce script au démarrage</strong></p>
<p>Pour exécuter ce script au démarrage de votre système Linux, il faudra placer un alias dans les répertoires rc3.d et rc5.d (dépend de votre runlevel). Pour faire ceci :</p>
<blockquote><p>ln -s /etc/init.d/oracle /etc/rc.d/rc3.d/S99oracle</p>
<p>ln -s /etc/init.d/oracle /etc/rc.d/rc5.d/S99oracle</p></blockquote>
<p>Inversement, pour arrêter vos bases proprement à chaque extinction de votre système :</p>
<blockquote><p>ln -s /etc/init.d/oracle /etc/rc.d/rc3.d/K01oracle</p></blockquote>
<blockquote><p>ln -s /etc/init.d/oracle /etc/rc.d/rc5.d/K01oracle</p></blockquote>
<p>Vous pouvez dorénavant redémarrer votre système et vérifier que votre base de données se lance au démarrage !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guiregcapitaine.com/2009/12/14/demarrer-automatiquement-oracle-au-demarrage-de-oel/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dépanner votre instance Oracle 11G</title>
		<link>http://www.guiregcapitaine.com/2009/11/26/depanner-votre-instance-oracle-11g/</link>
		<comments>http://www.guiregcapitaine.com/2009/11/26/depanner-votre-instance-oracle-11g/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 16:21:18 +0000</pubDate>
		<dc:creator>Guireg CAPITAINE</dc:creator>
				<category><![CDATA[Astuces]]></category>
		<category><![CDATA[10G]]></category>
		<category><![CDATA[11G]]></category>
		<category><![CDATA[Base de données]]></category>
		<category><![CDATA[EL 5]]></category>
		<category><![CDATA[errors]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle Database]]></category>
		<category><![CDATA[Oracle enterprise linux]]></category>

		<guid isPermaLink="false">http://www.guiregcapitaine.com/fr/?p=461</guid>
		<description><![CDATA[Introduction Votre instance peut vous poser de très nombreux problèmes. Parmi ceux-ci,il y en a que tous les débutants font les premiers jours en tant que DBA Oracle. [..]]]></description>
			<content:encoded><![CDATA[<h1>Introduction</h1>
<p>Votre instance peut vous poser de très nombreux problèmes. Parmi ceux-ci,il y en a que tous les débutants font les premiers jours en tant que DBA Oracle. Vous trouvez ici une liste non-exhaustive d&#8217;erreurs courantes et leurs solutions</p>
<h1>Les erreurs</h1>
<h2>Error while loading shared libraries</h2>
<p><strong>Système :</strong> Oracle Enterprise Linux 5 / Oracle Database 11G</p>
<p><strong>Cause :</strong> SELinux en mode <em>Enforcing</em></p>
<p><strong>Solution : </strong>Lancer la commande <em>setenforce 0</em> . Vous pouvez vérifier l&#8217;état de SELinux avec la commande <em>getenforce</em></p>
<h2>SP2-0024 : Rien à modifier</h2>
<p><strong>Cause: </strong>Oracle n&#8217;arrive pas à trouver le .sql que vous spécifiez</p>
<p><strong>Solution:</strong> Mettre le chemin complet dans la commande. Exemple : @/app/oracle/scripts/script.sql au lieu de @script.sql</p>
<h2>ORA-32017: failure in updating SPFILE</h2>
<p>Autre : ORA-16179: incremental changes to &laquo;&nbsp;log_archive_dest_2&#8243; not allowed with SPFILE</p>
<p><strong>Cause : </strong>Erreur fréquente. Lors de l&#8217;ALTER SYSTEM, vous avez oublié la clause LOCATION</p>
<p><strong>Solution : </strong>ALTER SYSTEM SET log_archive_dest_2=&#8217;<span style="color: #ff0000;">LOCATION</span>=/app/oracle/oradata/arch&#8217; scope=both</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guiregcapitaine.com/2009/11/26/depanner-votre-instance-oracle-11g/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Décoder vos traces avec l&#8217;utilitaire TKPROF</title>
		<link>http://www.guiregcapitaine.com/2009/11/23/decoder-vos-traces-avec-lutilitaire-tkprof/</link>
		<comments>http://www.guiregcapitaine.com/2009/11/23/decoder-vos-traces-avec-lutilitaire-tkprof/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 18:29:03 +0000</pubDate>
		<dc:creator>Guireg CAPITAINE</dc:creator>
				<category><![CDATA[Tuning]]></category>
		<category><![CDATA[10G]]></category>
		<category><![CDATA[11G]]></category>
		<category><![CDATA[Oracle Database]]></category>
		<category><![CDATA[tkprof]]></category>
		<category><![CDATA[Traces]]></category>

		<guid isPermaLink="false">http://www.guiregcapitaine.com/?p=384</guid>
		<description><![CDATA[Introduction Comme vous avez pu dans le voir dans l&#8217;article Générer des traces sur votre instance Oracle , les traces en elle-même sont globalement illisibles Pour vous éviter [..]]]></description>
			<content:encoded><![CDATA[<h1><a href="http://www.guiregcapitaine.com/wp-content/uploads/2009/11/idea.jpg" rel="lightbox[384]"><img class="alignright size-medium wp-image-437" title="Tkprof - I've got an idea" src="http://www.guiregcapitaine.com/wp-content/uploads/2009/11/idea-300x225.jpg" alt="Tkprof - I've got an idea" width="200" height="151" /></a></h1>
<h1>Introduction</h1>
<p>Comme vous avez pu dans le voir dans l&#8217;article <a title="Générer des traces sur votre instance Oracle" href="http://www.guiregcapitaine.com/2009/11/07/generer-des-traces-sur-votre-instance-oracle/">Générer des traces sur votre instance Oracle</a> , les traces en elle-même sont globalement illisibles <img src='http://www.guiregcapitaine.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Pour vous éviter un mal de tête, Oracle a développer un outil très pratique nommé Tkprof qui se chargera de vous <em>décoder</em> vos traces et de vous fournir quelques éléments pratiques comme le plan d&#8217;exécution des requêtes.</p>
<h1>Utilisation de TkProf</h1>
<p>TkProf est inclut dans Oracle Client et Oracle Database. C&#8217;est un outil en ligne de commande que vous pouvez via une invite de commande sous Windows ou un terminal sous Linux.</p>
<p>Sans plus attendre, voici la syntaxe :</p>
<p><span style="text-decoration: underline;">Windows :</span></p>
<blockquote><p>tkprof  C:/oracle/&#8230;./trace.trc output=C:/oracle/&#8230;./trace_output.txt</p></blockquote>
<p><span style="text-decoration: underline;">Linux :</span></p>
<blockquote><p>$ORACLE_HOME/bin/tkprof  /app/oracle/&#8230;/trace.trc output=/app/oracle/&#8230;/trace_output.txt</p></blockquote>
<p><span style="color: #ff0000;">Attention :</span> La version de TkProf doit être impérativement la même que celle de la base de donnée où vous avez généré vos traces. Si elles sont différentes, vous aurez à coup sûr des valeurs aberrantes dans votre output file.</p>
<h2>Les options indispensables</h2>
<p>Pour que vos rapports TkProf soient plus lisibles, quelques options sont indispensables.</p>
<ul>
<li>SYS=no : Ne pas afficher les ordres SQL exécutés par l&#8217;utilisateur SYS</li>
<li>EXPLAIN=user/password : Permet de spécifier le schéma dans lequel tkprof va générer les explain plan. Inutile si vous générez vos traces directement avec le compte oracle en local sur votre base de donnée</li>
<li>AGGREGATE=no : Permet de ne pas regrouper les ordres SQL similaires</li>
<li>SORT= : Permet de triées les instructions selon l&#8217;option désirée</li>
</ul>
<h2>Et comment je les utilise ces options ?</h2>
<p>Simple comme bonjour ! Par exemple, pour des traces sans ordres SQL exécutées par SYS et pas de regroupements d&#8217;ordres SQL similaires sous Linux :</p>
<blockquote><p>$ORACLE_HOME/bin/tkprof  /app/oracle/&#8230;/trace.trc sys=no aggregate=no output=/app/oracle/&#8230;/trace_output.txt</p></blockquote>
<h1>Comment lire mon rapport ?</h1>
<p>Pour mieux illustrer, prenons la trace qui avait été générée dans mon article<a href="http://www.guiregcapitaine.com/2009/11/07/generer-des-traces-sur-votre-instance-oracle/"> <em>Générer des traces sur votre instance Oracle</em></a>.</p>
<blockquote>
<pre>********************************************************************************

SELECT e.last_name, j.job_title from oracle.employees e
    JOIN oracle.jobs j ON (e.job_id=j.job_id)

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.01       0.13          0          4          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        2      0.00       0.00          0         15          0         107
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.01       0.14          0         19          0         107

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: SYS

Rows     Row Source Operation
-------  ---------------------------------------------------
    107  HASH JOIN  (cr=15 pr=0 pw=0 time=5798 us)
     19   TABLE ACCESS FULL JOBS (cr=7 pr=0 pw=0 time=187 us)
    107   TABLE ACCESS FULL EMPLOYEES (cr=8 pr=0 pw=0 time=796 us)

Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  SQL*Net message to client                       2        0.00          0.00
  SQL*Net message from client                     2        0.14          0.15
********************************************************************************</pre>
</blockquote>
<p>Nous pouvons distinguer trois parties :</p>
<ul>
<li>Un tableau avec plein de nombres. (On reviendra dessus après)</li>
<li>L&#8217;explain plan de la requête</li>
<li>Les Wait events générés par la requête</li>
</ul>
<h3>Comment je le lis le tableau ?</h3>
<p>Ce fameux tableau est découpé en trois lignes :</p>
<ul>
<li><em>Parse :</em> Cette étape détermine le plan d&#8217;exécution de votre requête</li>
<li><em>Execute :</em> Pour les ordres INSERT, UPDATE, DELETE : modifie les données. Pour l&#8217;ordre SELECT : Identifie les lignes à extraire</li>
<li><em>Fetch :</em> Extraction des lignes et opérations de tri. Concerne uniquement l&#8217;ordre SELECT.</li>
</ul>
<p>Concernant les lignes, voici leurs significations :</p>
<ul>
<li><em>Count :</em> Nombre de fois que le Parse/Execute/Fetch a été exécuté</li>
<li><em>CPU (Seconde) : </em>Temps total de traitement CPU</li>
<li><em>Elapsed (Seconde) :</em> Temps total pris par le Parse/Execute/Fetch.</li>
<li><em>Disk :</em> Nombre total de blocs lus physiquement dans les fichiers de données</li>
<li><em>Query :</em> Nombre de buffers exploités en mode cohérent</li>
<li><em>Current :</em> Nombre de buffers exploités en mode courant</li>
<li><em>Rows : </em>Nombre de lignes affectés par la requête.</li>
</ul>
<h3>Quelques consignes pour bien commencer</h3>
<ol>
<li>Vérifier qu&#8217;il n&#8217;y a pas de grosses différences entre CPU et Elapsed</li>
<li>N&#8217;oubliez jamais de diviser vos valeurs par la valeur de Count</li>
<li>Prenez l&#8217;habitude d&#8217;additionner Current et Query pour connaître le nombre total de buffers extraits</li>
<li>Comparer le nombre de blocs parcourus aux nombre de lignes fetchées pour vérifier s&#8217;il ne manque pas un index. (Inutile si vous avez l&#8217;explain plan)</li>
<li>Ne perdez pas de temps à trop décoder, ça se parcoure vraiment très rapidement</li>
</ol>
<p><strong>Conclusion</strong></p>
<p>TkProf est un outil très facile à utiliser mais néanmoins indispensable à tous les DBAs. Il vous permettra de comprendre et résoudre de nombreux problèmes en très peu de temps.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guiregcapitaine.com/2009/11/23/decoder-vos-traces-avec-lutilitaire-tkprof/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<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[Tuning]]></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 [..]]]></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 &#8217;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 &#8217;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>

