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

<channel>
	<title>startup mount</title>
	<atom:link href="http://www.startupmount.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.startupmount.com</link>
	<description>Bases de données Oracle</description>
	<pubDate>Thu, 11 Mar 2010 17:23:31 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>DRM : Database Resource Manager</title>
		<link>http://www.startupmount.com/2010/03/11/drm-database-resource-manager/</link>
		<comments>http://www.startupmount.com/2010/03/11/drm-database-resource-manager/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 17:21:16 +0000</pubDate>
		<dc:creator>Méandre</dc:creator>
		
		<category><![CDATA[Administration]]></category>

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

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

		<category><![CDATA[database resource manager]]></category>

		<category><![CDATA[partagé]]></category>

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

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

		<guid isPermaLink="false">http://www.startupmount.com/?p=351</guid>
		<description><![CDATA[Cet article est une introduction sommaire à Oracle DRM (Database Resource Manager). DRM est un outil qui permet aux DBAs d&#8217;organiser leur production en fonction des priorités demandées par les utilisateurs. Dans notre exemple de configuration de DRM, nous nous intéresserons à limiter la consommation des ressources par un batch afin de laisser un maximum [...]]]></description>
			<content:encoded><![CDATA[<p>Cet article est une introduction sommaire à Oracle DRM (Database Resource Manager). DRM est un outil qui permet aux DBAs d&#8217;organiser leur production en fonction des priorités demandées par les utilisateurs. Dans notre exemple de configuration de DRM, nous nous intéresserons à limiter la consommation des ressources par un batch afin de laisser un maximum de puissance à un serveur d&#8217;application.<br />
<span id="more-351"></span>Dans la vraie vie, on demandera souvent au DBA de s&#8217;assurer que son site web de production répond de façon convenable alors que les services commerciaux peuvent également lui demander de lancer des travaux de batch divers (consolidation statistique, purges, etc). Dans ce cas, les travaux de type Batch ne devront évidement jamais gêner la production : DRM doit alors entrer en scène.</p>
<p><strong><span style="text-decoration: underline;">1) Introduction</span></strong></p>
<p>Dans le cadre de la priorisation des exécutions de processus Oracle, DRM va nous donner la possibilité de définir des Plans d&#8217;exécution de Resources (&#8221;Resource Plan&#8221; ou &#8220;RP&#8221;).  Un RP est un élément logique permettant de définir un périmètre en matière de priorisation des taches en cours au sein d&#8217;une instance. Les limites et la nature de ce périmètre (CPU, nombre de sessions max, &#8230;) seront définis dans un second temps.</p>
<p>Un RP est donc une manière de répartir la consommation des ressources d&#8217;une instance Oracle selon les exigences de la production. Il conviendra, en fonction des fenêtres de votre activité, de construire plusieurs RP de production, par exemple, si un serveur d&#8217;application a une activité très faible la nuit, on donnera une importance assez grande aux batchs, alors qu&#8217;en plein jour, on la minimisera pour que les requêtes OLTP aient une puissance maximale.</p>
<p><strong><span style="text-decoration: underline;">2) Création d&#8217;un plan de ressources et des groupes de consommateurs :</span></strong></p>
<p><span style="text-decoration: underline;">2.1 - Création du Plan de Resource (&#8221;RP&#8221;):</span><strong><span style="text-decoration: underline;"><br />
</span></strong></p>
<p>Il faut détenir le grant SYSDBA pour pouvoir créer un RP, et l&#8217;instruction est la suivante:</p>
<pre style="padding-left: 30px;">SQL &gt; dbms_resource_manager.create_plan(
      plan =&gt; 'PROD_JOUR'
      ,comment =&gt; 'Ceci est un plan de test');</pre>
<p>Cette instruction a pour effet de créer un plan de ressource nommé &#8216;PROD_JOUR&#8217;, nous verrons en effet plus loin qu&#8217;il sera utile de définir, comme indiqué dans l&#8217;introduction, divers RP pour les différentes heures de la journée et correspondant aux exigences de votre Direction commerciale.</p>
<p><span style="text-decoration: underline;">2.2 - Création des Groupes de consommateurs (&#8221;Consumer Group&#8221; ou &#8220;CG&#8221;):</span></p>
<p>Maintenant que le RP est créé, nous allons créer des groupes de consommateurs qui seront notamment associés à des notions de priorisations (valeurs limites, poids, &#8230;) qui définieront notre périmètre de consommation de ressources.</p>
<p>Un GP se crée avec l&#8217;instruction SYSDBA suivante:</p>
<pre style="padding-left: 30px;">dbms_resource_manager.create_consumer_group(
     consumer_group =&gt; 'OLTP'
     ,comment        =&gt; 'Comptes de prod pour
                         le serveur d'applis'
     ,cpu_mth =&gt; 'ROUND-ROBIN'
);</pre>
<p>Dans cet exemple, nous créons un groupe de consommateurs nommé &#8220;OLTP&#8217; dont les priorisations de ses utilisateurs seront fonction de la puissance CPU et dont la méthode de répartition de charge choisie sera du RoundRobbin.</p>
<p>Typiquement, le(s) user(s) utilisés par le serveur d&#8217;applications seront ensuite affectés à ce groupe.</p>
<p>Nous créons ensuite le deuxième CG pour les users de type batch :</p>
<pre style="padding-left: 30px;">dbms_resource_manager.create_consumer_group(
     consumer_group =&gt; 'BATCH'
     ,comment        =&gt; 'Comptes de prod pour
                         les batchs'
     ,cpu_mth =&gt; 'ROUND-ROBIN'
);</pre>
<p>En dehors de la priorisation de la CPU, DRM permet de définir d&#8217;autres points de mesure (nombre de sessions max, etc), mais cela ne fait pas l&#8217;objet de ce billet, cf doc Oracle pour cela.</p>
<p>2.3 - Affectation des users Oracle aux groupes de consommateurs :</p>
<p>Une fois ces groupes définis, nous allons indiquer à l&#8217;instance quels sont les users qui les composent. Dans notre exemple, nous utiliseront deux users Oracle, le premier qui sert à notre serveur d&#8217;application à accèder à la database par l&#8217;intermédiaire d&#8217;un pilote JDBC, c&#8217;est le user &#8220;SERVEUR_APPLI&#8221;. Le deuxième, un user qui déclenchera les scripts SQL ou les blocs PLSQL de purge ou de traitement quelconque, c&#8217;est le user &#8220;TRAITEMENTS&#8221;.</p>
<pre>dbms_resource_manager_privs.grant_switch_consumer_group(
    grantee_name=&gt;'SERVEUR_APPLI'
    ,consumer_group=&gt;'OLTP'
    ,grant_option=&gt;false);
dbms_resource_manager_privs.grant_switch_consumer_group(
    grantee_name=&gt;'TRAITEMENTS'    
    ,consumer_group=&gt;'BATCH'
    ,grant_option=&gt;false);

dbms_resource_manager.set_initial_consumer_group(
    user=&gt;'SERVEUR_APPLI'
    ,consumer_group=&gt;'OLTP');
dbms_resource_manager.set_initial_consumer_group(
   user=&gt;'TRAITEMENTS'    
   , consumer_group=&gt;'BATCH');</pre>
<p>La fonction grant_switch_consumer_group du package dbms_resource_manager_privs permet de définir l&#8217;appartenance d&#8217;un user Oracle à un CG alors que la fonction set_initial_consumer_group du package dbms_resource_manager permet de définir le groupe de &#8220;départ&#8221; de chaque user.</p>
<p>En effet, nous verrons plus loin que nous pouvons définir des &#8220;politiques de glissement&#8221; d&#8217;un CG à un autre CG en fonction de différents êvènements, il faut donc bien préciser quel est le groupe de &#8220;départ&#8221; et l&#8217;autorisation d&#8217;un groupe à glisser (switch) dans un autre CG que son CG de départ.</p>
<p><em>Par exemple, si un package met trop de temps à s&#8217;exécuter, on peut le switcher automatique vers un CG qui a une priorisation CPU moins importante, etc.</em></p>
<p><span style="text-decoration: underline;"><strong>3) Créations des directives de consommation</strong></span></p>
<p>Une fois le RP créé, que les CG ont été définis, il faut définir, pour tous les groupes nommés dans les GC, des directives comportementales. Dans notre exemple basé sur la priorisation de la CPU, nous parlerons alors de directives en terme de droit à consommer de la CPU (80% pour le groupe OLTP, 10% pour le batch, &#8230;)  et de poids (Les transactions OLTP doivent prendre toute la CPU si elles le réclament, dans la négative les batchs peuvent consommer de la CPU , les users passent en troisème, etc ..)</p>
<p><span style="text-decoration: underline;">3.1 - Introduction aux poids de consommation :</span></p>
<p>Le poid dans DRM est une notion de &#8220;priorité&#8221; en matière de répartition des ressources. Dans le cadre de la consommation CPU, nous allons définir plusieurs poids, sachant que les groupes bénéficiant des poids les plus faibles seront servis les premiers en matière de puissance CPU.</p>
<p>On peu définir, pour chaque poids, une politique de consommation maximale de la CPU (en %) répartie sur l&#8217;ensemble des groupes de consommateurs créés en 2.2.</p>
<p><span style="text-decoration: underline;">Exemple:</span></p>
<pre style="padding-left: 30px;">             OLTP           BATCH          OTHER_GROUPS
poids 1      100%           0%             0%
poids 2      0%             80%            20%
poids 3      0%             0%             100%</pre>
<p style="padding-left: 30px;">Dans cet exemple, seul le groupe OLTP peut prendre toute la CPU s&#8217;il en a besoin, car il est le seul à bénéficier du poids 1 (le plus faible).</p>
<p style="padding-left: 30px;">Si les users du CG OLTP n&#8217;ont pas besoin de la totalité de la CPU, alors Oracle va donner de la puissance aux users présents dans les groupes définis dans le poids 2, à savoir 80% de la puissance restante pour le batch (purges, stats, &#8230;) et 20% pour les autres utilisateurs qui ne sont définis dans aucun CG.</p>
<p style="padding-left: 30px;">Si aucunne activité OLTP n&#8217;est requise et que aucun batch ne tourne, alors les autres utilisateurs peuvent exploiter la totalité de la CPU.</p>
<p><span style="text-decoration: underline;">Remarque 1: </span>Notez l&#8217;apparition dans notre exemple du groupe &#8220;OTHER_GROUPS&#8221;, vous n&#8217;avez pas à le définir, il est implicite et contient tous les users Oracle que vous n&#8217;aurez pas affecté à des CG.</p>
<p><span style="text-decoration: underline;">Remarque 2: </span>Un deuxième groupe implicite existe et fait par défaut partie du poids 1 : &#8220;SYSTEM_GROUP&#8221;, ce sont les SYSDBA, en effet, quoi qu&#8217;il se passe, il faut qu&#8217;un SYSDBA puisse à tout instant se connecter à une instance pour des opérations de maintenance.</p>
<p><span style="text-decoration: underline;">3.2 - Définition des directives de poids :</span></p>
<p>Il s&#8217;agit simplement d&#8217;utiliser  dbms_resource_manager.create_plan_directive pour traduire le tableau précédent tel que:</p>
<pre style="padding-left: 30px;">dbms_resource_manager.create_plan_directive(
          plan              =&gt; 'PRODUCTION_PLAN'
          ,group_or_subplan =&gt; 'OLTP'
          ,comment          =&gt; 'Défintion des valeurs
                                CPU pour la prod / OLTP'
          ,cpu_p1           =&gt; 100
          ,cpu_p2           =&gt; 0
          ,cpu_p3           =&gt; 0
);
dbms_resource_manager.create_plan_directive(
          plan              =&gt; 'PRODUCTION_PLAN'
          ,group_or_subplan =&gt; 'BATCH'
          ,comment          =&gt; 'Défintion des valeurs
                                CPU pour la prod / BATCH'
          ,cpu_p1           =&gt; 0
          ,cpu_p2           =&gt; 80
          ,cpu_p3           =&gt; 0
);
dbms_resource_manager.create_plan_directive(
          plan              =&gt; 'PRODUCTION_PLAN'
          ,group_or_subplan =&gt; 'OTHER_GROUPS'
          ,comment          =&gt; 'Défintion des valeurs
                                CPU pour la prod / OTHERS'
          ,cpu_p1           =&gt; 0
          ,cpu_p2           =&gt; 20
          ,cpu_p3           =&gt; 100

);</pre>
<p>Notez que la totalité des puissances CPU, pour chaque poids, doit faire exactement 100%.</p>
<p><strong><span style="text-decoration: underline;">4) La &#8220;Pending Area&#8221; :</span></strong></p>
<p>Il serait très délicat de modifier le périmètre d&#8217;un Plan d&#8217;exécution alors que celui-ci est pris en compte par votre instance à un instant t. Pour cela, nous disposons de la &#8220;Pending Area&#8221;, qui est une aire de temporaire et <span style="text-decoration: underline;">intermédiaire</span> de stockage des définitions concernant les objets des RP qui ne sera pris en compte au final que après validation et dont on peut effacer le contenu à tout instant.</p>
<p>Toutes les blocs d&#8217;instructions précédentes doivent être précédés de ces odres :</p>
<pre>    dbms_resource_manager.clear_pending_area;
    dbms_resource_manager.create_pending_area;</pre>
<pre>    ... &lt;opérations sur les RP&gt; ...</pre>
<pre>    dbms_resource_manager.validate_pending_area;
    dbms_resource_manager.submit_pending_area;</pre>
<p>Ceci assure la stabilité de votre instance pendant la modification des RP.</p>
<p><strong><span style="text-decoration: underline;">5) Prise en compte d&#8217;un plan d&#8217;exécution:</span></strong></p>
<p>Une fois le RP créé et son périmètre défini, il faut indiquer à votre instance qu&#8217;elle doit le prendre en compte, vous utiliserez alors l&#8217;instruction suivante :</p>
<pre>ALTER SYSTEM SET RESOURCE_MANAGER_PLAN='PRODUCTION_PLAN';</pre>
<p>Pour annuler toute prise en compte de plan d&#8217;exécution en cas de problème, il suffit de passer l&#8217;ordre</p>
<pre>ALTER SYSTEM SET RESOURCE_MANAGER_PLAN='';</pre>
<p>N&#8217;hésitez pas à consuler le plan en cours d&#8217;exécution avec</p>
<pre>SHOW PARAMETER RESOURCE_MANAGER_PLAN;</pre>
<p><strong><span style="text-decoration: underline;"> 6) monitoring :</span></strong></p>
<p>La vue v$rsrc_consumer_group vous permet de consulter, en quasi temps réel, la répartition des différents utilisateurs des différents CG en fonction de vos directives de consommations.</p>
<pre style="padding-left: 30px;">select name
,active_sessions
,execution_waiters
,requests
,cpu_wait_time
,cpu_waits
,consumed_cpu_time
,yields
,queue_length
,current_undo_consumption
from v$rsrc_consumer_group;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.startupmount.com/2010/03/11/drm-database-resource-manager/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Vues matérialisées</title>
		<link>http://www.startupmount.com/2009/06/28/vues-materialisees/</link>
		<comments>http://www.startupmount.com/2009/06/28/vues-materialisees/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 20:16:35 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
		
		<category><![CDATA[Divers]]></category>

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

		<category><![CDATA[materialisée]]></category>

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

		<category><![CDATA[réplication]]></category>

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

		<category><![CDATA[vues matérialisées]]></category>

		<guid isPermaLink="false">http://www.startupmount.com/?p=283</guid>
		<description><![CDATA[Comme une vue au sens classique d&#8217;Oracle, une vue matérialisée (&#8221;MaterializedView&#8221; ou &#8220;MV&#8221;) est une vue basée sur une requête SQL. A l&#8217;instar d&#8217;une vue classique, lorsque l&#8217;on crée une vue matérialisée, Oracle crée alors une table dont la structure correspond exactement à celle induite par le résultat du select associé. Les données de la [...]]]></description>
			<content:encoded><![CDATA[<p>Comme une vue au sens classique d&#8217;Oracle, une <span style="text-decoration: underline;">vue matérialisée</span> (&#8221;MaterializedView&#8221; ou &#8220;MV&#8221;) est une vue basée sur une <em>requête SQL</em>. A l&#8217;instar d&#8217;une vue classique, lorsque l&#8217;on crée une vue matérialisée, Oracle crée alors une table dont la structure correspond exactement à celle induite par le résultat du select associé. Les données de la vue matérialisée sont alors issues de la requête SQL et <span style="text-decoration: underline;">recopiées physiquement</span> dans cette table, on dit alors que <span style="text-decoration: underline;">les données sont &#8220;matérialisées&#8221;</span>.</p>
<p><span id="more-283"></span></p>
<p><span style="text-decoration: underline;"><strong>1 - Introduction / Rappels :</strong></span></p>
<p>Les avantages d&#8217;une vue matérialisée sont globalement dans la <span style="text-decoration: underline;">rapidité</span> d&#8217;accès aux données, en effet, si les tables dont sont issues les requêtes SQL induisant les vues matérialisées sont complexes, le fait d&#8217;y accéder par l&#8217;intermédiaire d&#8217;une vue matérialisée en rendra <em>l&#8217;accès extrêmement plus rapide</em> puisque celle-ci sont en fait recopiées physiquement dans la table de la dite vue et de nécessite plus l&#8217;interprétation d&#8217;un <em>plan d&#8217;exécution</em> complexe pour les récupérer.</p>
<p>Les vues matérialisées sont globalement utilisées pour accélérer l&#8217;accès à des données dont le quotient de mise à jour demeure <em>faible</em>. En effet, si les données d&#8217;une MV sont matérialisées dans une table, il peut exister à un instant &lt;T&gt; un décalage entre les données réellement présentes dans les tables pointées par la requête SQL et les données physiquement recopiées, une <em>mise à jour </em>de ces données physique est alors nécessaire pour se rapprocher des données réelles.</p>
<p>Dans ce contexte, nous verrons qu&#8217;il existe plusieurs méthodes pour mettre à jour une vue matérialisées, plus ou moins adaptées à l&#8217;utilisation que les utilisateurs en font et permettant aussi de faire au sens d&#8217;Oracle de la <span style="text-decoration: underline;">réplication</span> de données entre hôtes distants.</p>
<p><span style="text-decoration: underline;"><strong>2 - Création/Suppression d&#8217;une Vue Matérialisée :</strong></span></p>
<p>La création d&#8217;une vue matérialisée se fait par l&#8217;instruction :</p>
<pre>create materialized view &lt;nom_vue_materialisée&gt; as &lt;requête_SQL&gt;
                    [ refresh &lt;mode&gt; [ &lt;type&gt; ] [ with &lt;cycle&gt; ]
                      [ FORCE | FAST ] ]</pre>
<p><span style="text-decoration: underline;">Exemple:</span></p>
<pre style="padding-left: 30px;">SQL&gt; create materialized view mv_personnes</pre>
<pre style="padding-left: 30px;">2 as select c.nom, c.prenom, v.nomville from clients c,
ville v where c.id_ville=v.id_ville;</pre>
<pre style="padding-left: 30px;">SQL&gt; select * from mv_personnes;</pre>
<pre style="padding-left: 30px;">NOM      PRENOM      NOMVILLE</pre>
<pre style="padding-left: 30px;">------   -------     -------------------------------
NOM_1    PRENOM_1    ANGOULEME
NOM_2    PRENOM_2    BASTIA</pre>
<p>Une vue matérialisée se détruit par un drop au sens classique du terme :</p>
<pre style="padding-left: 30px;">SQL&gt; drop materialized view mv_personnes;</pre>
<p><span style="text-decoration: underline;">Note:</span> Les vues systèmes USER_MVIEWS et DBA_MVIEWS permettent aux utilisateurs et aux DBAs d&#8217;obtenir toutes les informations sur les vues matérialisées auxquels ils ont accès. Le champ &#8220;query&#8221; permet notament d&#8217;indentifier la requête SQL induisant la vue matérialisée et &#8220;mview_name&#8221; le nom de la table physique créée pour matérialiser les données de cette requête.</p>
<p><strong><span style="text-decoration: underline;">3 - Modes de rafraichissement des vues matérialisées :</span></strong></p>
<p>Comme nous l&#8217;avons évoqué précédement, la pertinence d&#8217;une vue matérialisée est caractérisée par la fréquence de mise à jour (ou de synchronisation) de ses données par rapport aux données des tables mères sur laquelle porte la requête SQL qui l&#8217;induit. En clair : quelle est la méthode et la fréquence de rafraichissement des données matérialisées de la vue par rapport aux données réélles existant dans les tables pointées par la requête SQL de la vue matérialisée?</p>
<p><span style="text-decoration: underline;">3.1) Rafraichissement synchrone sur validation</span></p>
<p>Le mode de rafraichissement sur validation des vues matérialisation est celui qui vous permet d&#8217;assurer une équivalence parfaite entre les données matérialisées et celles dynamiques issues de la requête SQL caractéristique. Chaque validation transactionelle (commit) aura pour effet de rafraichir les données de la MV, une donnée validée dans une table mère impliquera au préalable une donnée inscrite dans la table de la MV.</p>
<p>L&#8217;équivalence des données de la MV est donc assurée de manière synchrone par rapport aux données situées dans les tables pointées par la requête SQL caractérisant la vue.</p>
<p>C&#8217;est la plus éfficace des mises à jour en terme fonctionel, c&#8217;est la moins efficace en CPU et consomation mémoire. Une telle façon de fonctionner est éfficace si la MV se fait sur la même database contenant les tables mères pointées par la requête SQL. Si la MV est distante, des problèmes de performance apparaissent très vite et cette méthode est déconseillée.</p>
<p>En clair, cette méthode vous permet d&#8217;améliorer des requêtes lourdes sur une instance de base de données.</p>
<p>Syntaxe :</p>
<pre style="padding-left: 30px;"> create ... refresh on commit;</pre>
<p><span style="text-decoration: underline;">3.2) Rafraichissement asynchrone sur demande</span></p>
<p>Une MV en mode de rafraichissement sur demande, comme son nom l&#8217;indique, possède des données matérialisées qui sont mises à jour de façon evènementielle sur demande (administrative, par automatisme PLSQL, &#8230;). La méthode de rafraichissement est donnée par le package DBMS_REFRESH et la procédure REFRESH(&#8217;&lt;nom_MV&gt;&#8217;),</p>
<p>Syntaxe :</p>
<pre style="padding-left: 30px;"> create materialized view MV1 ...;
 ...
 execute DBMS_REFRESH.REFRESH('MV1');</pre>
<p><span style="text-decoration: underline;">Note:</span> Dans le cadre d&#8217;une réplication de tables, le package DBMS_REFRESH possède la méthode REFRESH_ALL_MVIEWS qui permet de rafraichir toutes les MV sans les nommer une à une.</p>
<p><span style="text-decoration: underline;">3.3) Rafraichissement asynchrone différentiel cyclique</span></p>
<p>Ce mode de rafraichissement est bien plus souvent utilisé que ces prédécesseurs car il économise les ressources de la base de donénes maître en réduisant le nombre de mises à jour nécessaires entre les MVs et les tables maitresses.</p>
<p>Le commutateur &#8220;start with&#8221; va permettre de définir une fréquence de mise à jour des données en collaboration avec le commutateur &#8220;next&#8221; qui permettra de définir l&#8217;intervalle de future mise à jour après la première éffectuée.</p>
<p>Syntaxe:</p>
<pre style="padding-left: 30px;">create materialized view MV1
refresh
start with trunc(sysdate+1)+ 8/24
next trunc(sysdate + 1) + 24/24
as select * from t1, t2;</pre>
<p style="padding-left: 30px;"><em>Dans cet exemple, MV1 verra ses données matérialisées créées à 8 heures puis rafraichies automatiquement tous les jours à minuit.</em></p>
<p><strong><span style="text-decoration: underline;">4 - Type de rafraichissement FORCE ou FAST :</span></strong></p>
<p><span style="text-decoration: underline;">4.1 - Introduction :<br />
</span></p>
<p>Il existe deux &#8220;types&#8221; de rafraichissement des données matérialisées, le type FORCE ou le type FAST.</p>
<p>Le mode FORCE est le mode par défaut et implique le comportement de tous les exemples décrits dans les paragraphes précédents, il est donc inutile d&#8217;en reparler ici.</p>
<p>Le mode <strong>FAST </strong>implique une notion de mise à jour RAPIDE en opposition à une mise à jour plus lente qu&#8217;est la mise à jour complète des données d&#8217;une MV. Vous l&#8217;aurez compris (ou intuité), nous parlons ici d&#8217;une mise à jour différentielle des données matérialisées.</p>
<p><span style="text-decoration: underline;">4.2 - Type de mise à jour Rapide des données matérialisées :</span></p>
<p>Le typde mise à jour &#8220;rapide&#8221; d&#8217;une MV est un type incrémental. Afin de minimiser le temps de comparaison des données présentes dans les tables mères par rapport aux données présentes dans les tables des MV, un fichier de journalisation des données modifiées est créé à cet effet, ou plustot une &#8220;table&#8221; de journalisation des données matérialisées : on parle de MATERIALIZED VIEW LOG (tables &#8220;MLOG$_*&#8221;).</p>
<p>Ces tables de log &#8220;MLOG$_*&#8221; comprennent les modifications éffectuées sur les tables mères d&#8217;une MV (insert, update, delete) et permettent au MV de ne synchroniser que les enregistrements ayant subits des modifications, au contraire du type FORCE qui concerne l&#8217;ensemble des données de la MV (et donc des tables mères).</p>
<p>Ce type de fonctionnalité est donc précédé de la création de ces tables de LOG grâce à la commande :</p>
<pre style="padding-left: 30px;">SQL&gt; create materialized view log on T;</pre>
<p>Ceci ayant pour effet de créer une table MLOG$_T sur le host courant, une table qui contiendra à dater de cet nstant toutes les modifications des lignes de la table T. Il conviendra par la suite de créer une vue matérialisée sur T pour bénéficier de ce journal.</p>
<p>La problématique de la fréquence des mises à jour ne chande pas (sur demande, on commit, &#8230;) sauf que celle ci se fera à dater de ce moment de manière différentielle et non plus de manière complète, ce qui représentera un gain de temps fondamental.</p>
<p>Il convient ensuite de préciser que l&#8217;on souhaite une vue matérialisée dont le typde mise à jour est basé sur l&#8217;exploitation de ces tables de log Oracle pour éffectuer des mises à jours incrémentales selon une fréquence à définir:</p>
<pre style="padding-left: 30px;">SQL&gt; create materialized view MV REFRESH FAST on select * from T;</pre>
<p>La fréquence de lecture des journaux (tables) de log seront induites par les sous commutateurs <span style="text-decoration: underline;">start</span> et <span style="text-decoration: underline;">next</span> permettant de définir une condition initiale pour débuter une mise à jour et une récurence.</p>
<p><strong><span style="text-decoration: underline;">5 - Réplication de données :</span></strong></p>
<p><span style="text-decoration: underline;">5.1 - Introduction :<br />
</span></p>
<p>La réplication de données selon Oracle est assurée par la mise à jour de données de tables par les méthodes de synchronisations de données éffectuées grâce au concept de vue matérialisée.</p>
<p>Une réplication de données se fera donc à l&#8217;aide de l&#8217;utilisation des vues matérialisées, des notions qui seront accessibles à distance à l&#8217;aide de la notion de DB-LINK (Database Link) / liaison inter-bases de données.</p>
<p>Le principe d&#8217;un DB-LINK est d&#8217;accéder de manière transparente à des tables situées en dehors de l&#8217;instance de base de données principale, généralement située sur un autre hote accessible en TCP/IP. Un DB-LINK Oracle permet donc de lier des schémas de base de données inter instances entre elles.</p>
<p>La création d&#8217;un DB-LINK se réalise par la syntaxe suivante :</p>
<pre>CREATE PUBLIC DATABASE LINK CONNECT TO &lt;user&gt; IDENTIFIED BY &lt;pwd&gt; USING '&lt;tsn_conn&gt;' ;</pre>
<p>Avec les paramètres suivants :</p>
<p style="padding-left: 30px;"><em>- &lt;user&gt; : nom d&#8217;utilistateur de la DB distante</em></p>
<p style="padding-left: 30px;"><em>- &lt;pwd&gt;: le password de &lt;user&gt;</em></p>
<p style="padding-left: 30px;"><em>- &lt;tsn_conn&gt; :  la définition d&#8217;accès à la database distance par le TNS_NAME local.</em></p>
<p>Imaginons maintenant, à travers la définition de DB-LINK, qu&#8217;une table distante soit accessible depuis une instance de base de données locale, si nous créons sur la table distante un journal de log, rien ne nous empêche sur la base locale de créer alors une vue matérialisée en mode FAST, vue induuite par une requête utilisant cette même table distante caractérisée par un journal de log. Nous venons à cet instant précis d&#8217;alimenter une table d&#8217;une instance I1 par une table d&#8217;une instance I2, le tout, quel que soit la distantce, sur un réseau TCP/IP : Autrement dit : nous venons de faire de la réplication de données.</p>
<p><span style="text-decoration: underline;">5.2 - Mise en place :</span></p>
<p>Un petit peu pressé par le temps, je publie cet article maintenant en l&#8217;absence de rédaction de ce paragraphe. Sous peu, vous aurez sous le 5.2) l&#8217;exacte syntaxe pour mettre en place concrètement et rapidement la réplication de données selon Oracle (i.e. à travers des MV en type FAST).</p>
<p>En attendant, certaines informations vous seront peut être utiles, d&#8217;où la publication rapide !</p>
<p><span style="text-decoration: underline;"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.startupmount.com/2009/06/28/vues-materialisees/feed/</wfw:commentRss>
		</item>
		<item>
		<title>RMAN : Restauration</title>
		<link>http://www.startupmount.com/2009/06/02/rman-restauration/</link>
		<comments>http://www.startupmount.com/2009/06/02/rman-restauration/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 19:43:37 +0000</pubDate>
		<dc:creator>Méandre</dc:creator>
		
		<category><![CDATA[RMan]]></category>

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

		<guid isPermaLink="false">http://www.startupmount.com/?p=260</guid>
		<description><![CDATA[Ce chapitre traite des opération de restauration et de recovery des bases Oracle à l&#8217;aide de RecoveryManager, cependant, nous ne traiterons ici que de la restauration des databases en mode ARCHIVELOG, le mode NOARCHIVELOG ne nécessitant aucune difficulté particulière pour des procédures de sauvegardes / restaurations et se résumant à de la simple sauvegarde de [...]]]></description>
			<content:encoded><![CDATA[<p>Ce chapitre traite des opération de restauration et de recovery des bases Oracle à l&#8217;aide de RecoveryManager, cependant, nous ne traiterons ici que de la restauration des databases en mode ARCHIVELOG, le mode NOARCHIVELOG ne nécessitant aucune difficulté particulière pour des procédures de sauvegardes / restaurations et se résumant à de la simple sauvegarde de fichiers du point de vue de l&#8217;OS.</p>
<p>Nous postulons donc dans ce chapitre que toutes les bases sotn en mode ARCHIVELOG et qu&#8217;elles disposent égallement de zones de restauration rapides (FlashBack).</p>
<p><span id="more-260"></span><strong><span style="text-decoration: underline;">1) Introduction :<br />
</span></strong></p>
<p>La commande qui permet à RMAN d&#8217;éffectuer une restauration de tout ou partie d&#8217;une base de données est <strong>RESTORE</strong>.</p>
<p>Dans certains cas, il sera nécessaire de demander à RMAN de pratiquer un recovery après une restauration de données afin de rendre la database cohérente grâce aux archivelogs au préalablement sauvegardés.La commande qui permet à RMAN d&#8217;éffectuer un recovery après est <strong>RECOVER</strong> (le terme francisé &#8220;officiel&#8221; Oracle est <em>&#8220;RECUPERATION</em>&#8220;)</p>
<p>Chaque opération de restauration peut amener des situation particulières, il faut donc, avant toute restauration, faire le point sur la situation afin de déterminer quelles sont les actions à mener et de ne pas se précipiter.</p>
<p><span style="text-decoration: underline;">1.1) Restauration de données :<br />
</span></p>
<p>La restauration de données s&#8217;éffectue avec la commande RMAN RESTORE et permet de faire référence à un certain nombre d&#8217;objets (base de données, fichier de données, fichier de contrôle, fichier de paramètre, &#8230;).</p>
<p><span style="text-decoration: underline;">Syntaxe :</span> <em>(le nombre d&#8217;options et de commutateur n&#8217;est pas exhaustif)</em></p>
<pre style="padding-left: 30px;">RESTORE
       [ DATABASE
       | DATAFILE    &lt;liste_des_datafiles_par_nom_ou_#&gt;
       | TABLESPACE  &lt;liste_des_tablespaces&gt;
       | CONTROLFILE [ to '&lt;dest&gt;' ] [ from [ autobackup | '&lt;source&gt;] ]
       | SPFILE      [ to '&lt;dest&gt;' ] [ from [ autobackup | '&lt;source&gt;] ]
       | ARCHIVELOG  [ ALL | [ FROM TIME '&lt;date&gt;' | UNTILE TIME '&lt;date&gt;'
                           | TIME BETWEEN '&lt;d1&gt;' AND '&lt;d2&gt;] ]
       ]
       [ PREVIEW [ SUMMARY ] ]
       [ VALIDATE [ BACKUP-SET ] ]
       ...
       <span style="color: #888888;"><em>(consulter la doc pour les autres commutateurs)</em></span></pre>
<p><span style="text-decoration: underline;">Info:</span> L&#8217;option <strong>PREVIEW </strong>permet de lister les éléments dont RMAN va avoir besoin pour éffectuer l&#8217;ordre de restauration, cette commande peut s&#8217;avérer utile si vous disposez d&#8217;un outil de sauvegarde désynchronisé de RMAN (par exemple utilisation de RMAN pour sauvegarder vers du disque et déport du disque vers LTO avec un logiciel de sauvegarde de fichiers (TINA, TSM, &#8230;)). L&#8217;option PREVIEW peut être accompagnée de SUMMARY qui donnera un affichage détaillé de cette commande.</p>
<p><span style="text-decoration: underline;">Info:</span> L&#8217;option <strong>VALIDATE</strong> permet de tester si l&#8217;opération de restauration peut être exécutée sans erreur (vérification de l&#8217;existence et de la consistence de tous les fichiers nécéssaires à cette restauration avant restauration).</p>
<p><span style="text-decoration: underline;">1.2) Récupération de données (&#8221;recovery&#8221;) :<br />
</span></p>
<p>La syntaxe de la commande RECOVER est la suivante :</p>
<pre style="padding-left: 30px;">RECOVER
       [ DATABASE
       | DATAFILE    &lt;liste_des_datafiles_par_nom_ou_#&gt;
       | TABLESPACE  &lt;liste_des_tablespaces&gt;
       ]
       [ DELETE ARCHIVELOG  [ MAXSIZE &lt;size&gt; [K|M|G] ] ]
       ...
       <span style="color: #888888;"><em>(consulter la doc pour les autres commutateurs)</em></span></pre>
<p><span style="text-decoration: underline;">Note:</span> Les fichiers de journalisations archivés manquant et restaurés par RMAN le seront dans le répertoire de l&#8217;instance prévu à cet effet dans LOG_ARCHIVE_DEST_1. L&#8217;option &#8220;<strong>DELETE ARCHIVELOG</strong>&#8221; permet de supprimer les fichier de journalisés archivés restaurés au fure et à mesure que le recovery avance et en fonction d&#8217;une taille maximum d&#8217;occupation (MAXSIZE).</p>
<p><strong><span style="text-decoration: underline;">2) Restauration de données :</span></strong></p>
<p>Cet article va présenter quelques cas de restauration et de recovery isolés, mais, dans une production, vous serez probablement confronté à des cas de restauration plus complexes car mettant en cause plusieurs points simultanément.</p>
<p><span style="text-decoration: underline;">Note: </span>Nous considérons ici, comme toujours dans une production sérieuse, que les base de données sont en mode archivage des fichiers de journalisation (<span style="text-decoration: underline;">ARCHIVELOG</span>).</p>
<p>RMAN prévoyant l&#8217;inclusion systématique des fichiers de contrôle et des fichiers de paramètres d&#8217;instance, nous considérerons que ceux-ci sont toujours disponibles dans les sauvegardes restaurées : en effet, horsmis pour traiter quelque cas d&#8217;école, il est strictement inintéréssant de ne pas utiliser les fonctions de sauvegardes automatique de ces fichiers.</p>
<p><span style="text-decoration: underline;">2.1) Restauration d&#8217;un fichier de paramètre serveur (SPFILE) :</span></p>
<p>La présence du SPFILE est la première chose dont à besoin l&#8217;instance Oracle pour démarrer, il est donc strictement indispensable d&#8217;en détenir des copies de sauvegarde. Vous pouvez même automatiser une simple copie régulière de ce fichier (en dehors de l&#8217;autobackup de RMAN) car celui-ci ne pèse vraiment pas lourd et se passer de lui peut poser problème.</p>
<p>Il est aisé de recréer le SPFILE à partir d&#8217;un simple fichier texte que vous aurez au préalablement sauvegardé, c&#8217;est aussi la méthode la plus rapide en dehors d&#8217;une sauvegarde par RMAN, il est dommage de s&#8217;en priver.</p>
<p>La méthode de restauration d&#8217;un SPFILE par RMAN est simple, un petit exemple se passe de commentaires :</p>
<pre style="padding-left: 30px;">1 : RMAN&gt; set dbid 5687165146;</pre>
<pre style="padding-left: 30px;">2 : RMAN&gt; startup nomount;
échec du démarrage : ORA-01078 : failure in processing system parameters ...</pre>
<pre style="padding-left: 30px;">3 : RMAN&gt; restore spfile from autobackup;</pre>
<pre style="padding-left: 30px;">4 : RMAN&gt; shutdown;</pre>
<pre style="padding-left: 30px;">5 : RMAN&gt; startup;</pre>
<p>Cette méthode permet de restaurer aisément un fichier de préférence serveur qui aurait été sauvegardé en mode automatique par RMAN (autobackup). Si vous désirez spécifier un chemin exact pour pointer une sauvegarde RMAN d&#8217;un SPFILE, il vous suffit de remplacer la ligne 3 par l&#8217;emplacement tel que :</p>
<pre style="text-align: left; padding-left: 30px;">3 : RMAN&gt; restore spfile from '/datas/sauvegardes/mabase/spfile/01_mf_s_5687165146_.bck';</pre>
<p>Les procédures de restauration des SPFILE doivent évidement se faire en mode NOMOUNT, une erreur sera alors détectée par RMAN après l&#8217;étape [2:] car le mode NOMOUNT (mode de démarrage minimal d&#8217;une instance) exige la présence et la lecture d&#8217;un fichier de préférence, hors c&#8217;est bien celui-ci que nous avons perdu. RMAN va alors dynamiquement mettre à disposition de l&#8217;instance un PFILE minimal permettant de la démarrer et de démarrer en mode NOMOUNT afin de procéder à la restauration du SPFILE sauvegardé.</p>
<p><span style="text-decoration: underline;">2.2) restauration des fichiers de contrôles :</span></p>
<p>La restauration d&#8217;un fichier de contrôle doit se faire UNIQUEMENT si vous avez perdu toutes les occurences de votre fichier de contrôle car, inutile de vous le rapeller, un bon DBA multiplexe ses fichiers de contrôles sur des volumes séparés (sauf baie SAN) et sur des filesystem différents, ce qui minimise largement ce risque de perte.</p>
<p><em>a - Restauration à partir d&#8217;un fichier OS intact :</em></p>
<p>Le fichier d&#8217;alerte de l&#8217;instance doit normalement vous renseigner sur l&#8217;ensemble des fichiers de contrôles perdus et donc à remplacer à partir de copie d&#8217;un des fichiers de contrôle intact. Il ne vous reste plus qu&#8217;à remplacer les copies endommagées par des instances du fichier intact (copies OS), c&#8217;est tout.</p>
<p><em>b - Restauration à partir de RMAN :</em></p>
<p>Si RMAN est à l&#8217;origine de la sauvegarde de vos fichiers de contrôles, et que vous avez activé la sauvegarde automatique (AUTOBACKUP) comme nous vous l&#8217;avons conseillé, la méthode est simple, choisissez un chemin de destination &lt;DEST&gt; valide pour la restauration du fichier puis modifiez le fichier de paramètre pour qu&#8217;il le prenne en compre.</p>
<p><span style="text-decoration: underline;">Exemple:</span></p>
<pre style="padding-left: 30px;">RMAN&gt; restore control file to '/data/tmp/ctl.bck' from autobackup;</pre>
<pre style="padding-left: 30px;">RMAN&gt; sql "alter system set control_files='/data/databases/base1/ctl/1.ctl',
                                         '/data/tmp/ctl.bck' scope=SPFILE;
         ";
RMAN&gt; shutdown;
RMAN&gt; startup;</pre>
<p><span style="text-decoration: underline;">2.3) Restauration d&#8217;un fichier de journalisation :</span></p>
<p>La perte d&#8217;un fichier de journalisation n&#8217;est pas un drame en soit pour le peu que vous ayez correctement calibré votre instance de production, à savoir que vous ayez créé plusieurs <em><span style="text-decoration: underline;">MEMBRES</span></em> par <span style="text-decoration: underline;">GROUPE</span> de redologs et qu&#8217;il vous reste au moins un fichier dans chaque groupe : le <span style="text-decoration: underline;">multiplexage</span> des journaux est indispensable pour garantir la stabilité de la base de données.</p>
<p>La méthode consiste à consulter dans le fichier d&#8217;alerte quel est le fichier redolog qui pose problème afin de le détruire en l&#8217;enlevant du référentiel de l&#8217;instance et de le re-créer.</p>
<p><span style="text-decoration: underline;">Exemple:</span> <em>Ici, on suppose que le fichier d&#8217;alerte montre que le fichier g2m1.log du group 2 est invalide</em></p>
<pre style="padding-left: 30px;">SQL&gt; alter database drop logfile member '/data/base/redos/g2m1.log';</pre>
<pre style="padding-left: 30px;">SQL&gt; alter database add logfile member '/data/base/redos/g2m1.log' to group 2;</pre>
<p><span style="text-decoration: underline;">Remarque:</span> La vue v$logfile donne le status des fichiers redo (valid / invalid) en cas de problème d&#8217;accès sur l&#8217;un d&#8217;eux.</p>
<p><span style="text-decoration: underline;">Remarque: </span>même s&#8217;il est défecteux, il est interdit de supprimer le redolog courant, vous devrez forcer Oracle à passer au groupe suivant avec ALTER SYSTEM SWITCH LOGFILE avant de faire cette opération.</p>
<p><span style="text-decoration: underline;">2.4) Restauration complète d&#8217;une base de données :</span></p>
<p>Dans le cas où vous avez perdu tous les fichiers de données, c&#8217;est sans doute l&#8217;opération la plus simple à réaliser, en voici la syntaxe et la procédure :</p>
<pre style="padding-left: 30px;">RMAN&gt; startup mount;</pre>
<pre style="padding-left: 30px;">RMAN&gt; restore database;</pre>
<pre style="padding-left: 30px;">RMAN&gt; recover database;</pre>
<pre style="padding-left: 30px;">RMAN&gt; sql "alter database open";</pre>
<p><span style="text-decoration: underline;">2.5) Restauration partielle base de données ouverte :</span></p>
<p>Dans le cas où vous n&#8217;avez perdu qu&#8217;un fichier de données rendant par exemple inéxploitable un tablespace de votre database mais que les autres sont accessibles, vous n&#8217;avez pas besoin d&#8217;arreter l&#8217;instance pour restaurer du moment que vous êtes en mode ARCHIVELOG.</p>
<p>Il suffit de mettre OFFLINE les datafiles corrompus, de les restaurer, puis de les passer online avant de pratiquer un recivery pour rendre le fichier cohérent avec le reste de la database.</p>
<pre style="padding-left: 30px;">RMAN&gt; startup mount;</pre>
<pre style="padding-left: 30px;">RMAN&gt; sql "alter database datafile 10 offline;";</pre>
<pre style="padding-left: 30px;">RMAN&gt; sql "alter database open";</pre>
<pre style="padding-left: 30px;">RMAN&gt; restore datafile 10;

RMAN&gt; recover datafile 10;

RMAN&gt; sql "alter database datafile 10 online;";</pre>
<p>Les différents scénarios qui peuvent se présenter pour une sauvegarde sont en nombre très grand, nous ne pouvons pas tous les citer ici, le principe étant de bien comprendre la méthode et surtout, en cas de crash, de faire le bon disgnostique en analysant les messages d&#8217;erreurs apparaissant dans les fichiers d&#8217;alerte.</p>
<p>N&#8217;oubliez pas que le support Oracle est là aussi pour vous aider, n&#8217;hésitez pas à les apeller avant de faire un erestauration, ne serait-ce que pour avoir leur quitus technique.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.startupmount.com/2009/06/02/rman-restauration/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Zones de restauration rapides</title>
		<link>http://www.startupmount.com/2009/06/01/zones-de-restauration-rapides/</link>
		<comments>http://www.startupmount.com/2009/06/01/zones-de-restauration-rapides/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 19:00:39 +0000</pubDate>
		<dc:creator>DBA01</dc:creator>
		
		<category><![CDATA[Sauvegarde]]></category>

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

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

		<category><![CDATA[drop table]]></category>

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

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

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

		<guid isPermaLink="false">http://www.startupmount.com/?p=241</guid>
		<description><![CDATA[La version 9i apporte la notion de &#8220;flashback recovery&#8221; sous la forme de packages PL/SQL et qui implémente une méthode qui permet globalement de &#8220;rattraper&#8221; quelques malencontreux ordres DDL de DBAs dans certains cas (drop, &#8230;) et qui permet d&#8217;éviter un recovery pénible.
La version 10g améliore énormément les techniques de FLASHBACK , la rend accessible [...]]]></description>
			<content:encoded><![CDATA[<p>La version 9i apporte la notion de &#8220;flashback recovery&#8221; sous la forme de packages PL/SQL et qui implémente une méthode qui permet globalement de &#8220;rattraper&#8221; quelques malencontreux ordres <span style="text-decoration: underline;">DDL </span>de DBAs dans certains cas (drop, &#8230;) et qui permet d&#8217;<em>éviter un recovery pénible</em>.</p>
<p>La version 10g améliore énormément les techniques de <strong>FLASHBACK</strong> , la rend accessible en SQL, et permet aux DBAs de disposer véritablement d&#8217;une alternative aux recovery classiques (restauration et application des archivelogs) dans de nombreux cas. La notion ne varie quasiment pas en 11g.</p>
<p><span id="more-241"></span><span style="text-decoration: underline;"><strong>1 - Introduction au FlashBack :</strong></span></p>
<p><span style="text-decoration: underline;">1.1) Sur quoi est basé la technologie FlashBack ?</span></p>
<p>Le FLASHBACK est un terme générique désignant un ensemble de fonctionalités permettant d&#8217;éviter les recovery en indiquant au moteur de base de données qu&#8217;il doit revenir à un état de la base pour un timestamp donné ou plustot pourun SCN donné.</p>
<p>Les archivelogs sont aux journaux d&#8217;une database ce que la zone de restauration rapide est aux segments d&#8217;annulations (<strong>UNDO SEGMENTS</strong>). En effet, les fonctionnalités de FLASHBACK utilisent les informations stockées dans les segments des tablespaces d&#8217;annulation pour &#8220;revenir en arrière&#8221; sur toute transaction jusqu&#8217;à une en particulier identifiée par un SCN précis (même s&#8217;il existe des approches temporelles comme nous le verrons plus loin).</p>
<p>Attention, seules les informations validées (COMMIT) des segments d&#8217;annulations de la zone de récupération rapide seront considérés, en effet, il serait stupide de vouloir revenir à un état de la database qui serait un état d&#8217;incohérence.</p>
<p><span style="text-decoration: underline;">1.2) Rappels sur la conservation des blocs :</span></p>
<p>Le tablespace UNDO est caractérisé, entre autre, par le paramètre <strong><span style="text-decoration: underline;">RETENION</span></strong> qui caractérise la manière dont la rétention est gérée dans les segments d&#8217;annulation, cette valeur peut être  :</p>
<p style="padding-left: 30px;">a - &#8220;<em>RETENTION GARANTEE</em>&#8221; : indique que le tablespace UNDO garde toutes les transactions y compris celles qui n&#8217;ont pas abouties (ROLLBACK ou pas de COMMIT) (<em>habituellement utilisé en production</em>). Le paramètre UNDO_RETENTION spécifie alors le nombre de secondes (3600 par défaut) pendant lesquelles les données sont assurées d&#8217;ête conservées dans le tablespace UNDO.</p>
<p style="padding-left: 30px;">b - &#8220;<em>RETENTION NOGARANTEE</em>&#8221; : les blocs sonts conservés uniquement pour les transactions commitées. (<em>non recommandé</em> <em>en production</em>)</p>
<p>La valeur des paramètre RENETENTION et UNDO_RENETION sont modifiables par &#8220;ALTER SYSTEM&#8221;.</p>
<p><span style="text-decoration: underline;">1.3) Paramètrage du FLASHBACK:</span></p>
<p><em>1.3.a) Zones de stockage</em></p>
<p style="padding-left: 30px;">Il est vivement conseillé aux DBAs d&#8217;utiliser la zone FLASHBACK sans lésiner sur l&#8217;espace disque utilisé par celle-ci. En effet, nous avons vu que la zone de flashback était liée à une sorte de stockage des informations stockées habituellement dans les segments d&#8217;annulation.</p>
<p style="padding-left: 30px;">Lorsqu&#8217;une information présente dans un tablespace UNDO va expirer (UNDO_RENETION atteint par exemple) alors, si le FLASHBACK est activé, cette information va être stockée dans un journal UNDO. Il faut donc, en fonction de la vie de la database, des zones de stockage de ces &#8220;journaux&#8221; d&#8217;annulation plus ou moins grande. Lorsque cela est possible, Il convient de définir un espace suffisament grand pour stoquer toutes les informations transactionelle d&#8217;une ou deux journées afin pouvoir faire un &#8220;retour arrière&#8221; sur cette période.</p>
<p style="padding-left: 30px;">En effet, une base qui ne fait que très peut de mise à jour n&#8217;aura pas besoin d&#8217;une zone de stockage des informations d&#8217;annulation à journaliser très grande.</p>
<p style="padding-left: 30px;">La zone de stockage des données nécessaires au flashback est définie par <strong>DB_RECOVERY_FILE_DEST</strong>. La taille maximale à utiliser pour le FlashBack sous cette arborescence est <strong>DB_RECOVERY_FILE_DEST_SIZE</strong>.</p>
<p><em>1.3.b) Durée de rétention des informations FlashBack</em></p>
<p style="padding-left: 30px;">Parallèlement à la notion de UNDO_RETENTION, il existe la même notion à appliquer aux informations journalisées de la zone de FlashBack, celle - ci se définie grâce au paramètre <strong>DB_FLASHBACK_RETENTION_TARGET</strong>. Attention, prenez garde à ce que cette valeur soit supérieure à UNDO_RETENTION.</p>
<p><span style="text-decoration: underline;">1.4) Activation / Désactivation du FlashBack :</span></p>
<p style="text-align: center;"><strong>ALTER DATABASE FLASHBACK [ ON | OFF ]</strong></p>
<p>Et c&#8217;est tout !</p>
<p><strong><span style="text-decoration: underline;">2) Les technologies de FlashBack :<br />
</span></strong></p>
<p>Il existe en fait plusieurs façon d&#8217;aborder le flashback, le principe est globalement toujours le même, se servir des informations archivées des transactions (Undo Segments), mais les méthodes sont sensiblement différentes. Nous parlerons communément de &#8220;FlashBack de base de données&#8221;, de &#8220;FlashBack de Table&#8221; ou de gestion de la &#8220;Corbeille&#8221; ou encore de &#8220;FlashBack de données&#8221; (ou de lignes).</p>
<p><span style="text-decoration: underline;">2.1) FlashBack Query :</span> (ou FlashBack de lignes / de données)</p>
<p><em>2.1.a) Interrogation de données dans le temps</em></p>
<p>Le FlashBack Query permet d&#8217;interroger une ou plusieurs tables et de lire les données qu&#8217;elles contiennent à un SCN bien précis.</p>
<p>Cette information sera trouvée dans les segments d&#8217;annulation ou bien encore, si ceux-ci ne possèdent plus cette information car leur retention a expirée, dans les stockage de ces informations dans la zone DB_RECOVERY_FILE_DEST de la FlashBack.</p>
<p><span style="text-decoration: underline;">Syntaxe:</span></p>
<p style="text-align: center;">[ Requete SQL de selection ] AS OF [ SCN | TIMESTAMP ] [ critères SQL de la requête ]</p>
<p style="text-align: left;"><span style="text-decoration: underline;">Exemple:</span></p>
<pre style="text-align: justify; padding-left: 30px;">SQL&gt; select current_scn from dual;</pre>
<pre style="text-align: justify; padding-left: 30px;">10/01/2008         11:00:20           <span style="text-decoration: underline;"><strong>176032</strong></span></pre>
<pre style="text-align: justify; padding-left: 30px;">SQL&gt; select valeur from compteur where id_compteur=1;</pre>
<pre style="text-align: justify; padding-left: 30px;"><strong>44</strong></pre>
<pre style="text-align: justify; padding-left: 30px;">SQL&gt; update compteur set valeur=valeur+1 from compteur where id_compteur=1;</pre>
<pre style="text-align: justify; padding-left: 30px;">SQL&gt; commit;</pre>
<pre style="text-align: justify; padding-left: 30px;">SQL&gt; select current_scn from dual;</pre>
<pre style="text-align: justify; padding-left: 30px;">10/01/2008         11:00:20           <span style="text-decoration: underline;"><strong>176054</strong></span></pre>
<pre style="text-align: justify; padding-left: 30px;">SQL&gt; select valeur from compteur where id_compteur=1;</pre>
<pre style="text-align: justify; padding-left: 30px;"><strong>45</strong></pre>
<pre style="text-align: justify; padding-left: 30px;">SQL&gt; update compteur set valeur=(select valeur from compteur <span style="text-decoration: underline;"><strong>AS OF SCN=176032</strong></span> where id_compteur=1)
where id_compteur=1;

SQL&gt; select valeur from compteur where id_compteur=1;
<strong>44</strong></pre>
<p style="text-align: left;">Nous avons ainsi pu consuler la valeur d&#8217;une donnée en revenant dans l&#8217;historisation des transactions et en parcourant les données des tablespaces UNDO ou des journaux de la zone de FlashBack.<strong><br />
</strong></p>
<p style="text-align: left;"><em>2.1.b) Interrogation des données et de leurs différentes versions</em></p>
<p style="text-align: left;">Il se peut que vous ne disposiez pas exactement du SCN exact pour un retour arrière ou que vous ne sachiez pas exactement quelle valeur conviendrait correctement à un retour arrière cohérent. Il est possible de consulter un ensemble de versions de valeurs pour une ou plusieurs données situées entre deux SCN ou deux TIMESTAMP en guise d&#8217;intervalle (mot clé <span style="text-decoration: underline;">BETWEEN</span>).</p>
<p style="text-align: left;">Lors des interrogation des versions d&#8217;une ligne, vous pouvez aussi spécifier dans votre requête des noms de pseudo-colonnes qui permettent de cibler l&#8217;information, à savoir :</p>
<address style="text-align: left; padding-left: 30px;">a) VERSIONS_STARTTIME (/ENDTIME) : date et heure de début (/fin) de validité d&#8217;une version.<br />
</address>
<address style="text-align: left; padding-left: 30px;">b) VERSIONS_STARTSCN (/ENDSCN) : scn de début (/fin) de validité d&#8217;une version.</address>
<address style="text-align: left; padding-left: 30px;">c) VERSIONS_XID : identifiant d&#8217;une transaction associée à une version<br />
</address>
<address style="text-align: left; padding-left: 30px;">d) VERSIONS_OPERATION : I, U, D pour &#8220;INSERT&#8221;, &#8220;UPDATE&#8221; ou &#8220;DELETE&#8221;</address>
<address style="text-align: left; padding-left: 30px;"> </address>
<p style="text-align: left;"><span style="text-decoration: underline;">Syntaxe:</span></p>
<p style="text-align: center;"><strong>[ requete SQL ] VERSIONS BETWEEN [ SCN1 | TS1 ] [ expression 1 | min] [ expression2 | max]</strong></p>
<p style="text-align: left;"><span style="text-decoration: underline;">Exemple:</span></p>
<pre style="text-align: left; padding-left: 30px;">SQL&gt; select version_startscn, versions_endscn</pre>
<pre style="text-align: left; padding-left: 30px;">     from personnes 

    <strong> versions between scn 17000 and 18000</strong></pre>
<pre style="text-align: left; padding-left: 30px;">     where personne_id=24; /</pre>
<p style="text-align: left;"><em>2.1.b) La vue FLASHBACK_TRANSACTION_QUERY</em></p>
<p style="text-align: left;">Cette vue accessible aux DBAs permet de voir les modifications réalisées par une ou plusieurs transactions sur un certain intervalle de temps.</p>
<p style="text-align: left;">Les champs de cette vue sont :</p>
<address style="text-align: left; padding-left: 30px;">XID</address>
<address style="text-align: left; padding-left: 30px;">START_SCN</address>
<address style="text-align: left; padding-left: 30px;">START_TMPESTAMP</address>
<address style="text-align: left; padding-left: 30px;">COMMIT_SCN</address>
<address style="text-align: left; padding-left: 30px;">COMMIT_TIMESTAMP</address>
<address style="text-align: left; padding-left: 30px;">LOGON_USER <strong>: user connecté</strong><br />
</address>
<address style="text-align: left; padding-left: 30px;">OPERATION : <strong>nature de l&#8217;opération &#8216;insert/delete/update)</strong><br />
</address>
<address style="text-align: left; padding-left: 30px;">TABLE_NAME <strong>: nom de la table impactée </strong><br />
</address>
<address style="text-align: left; padding-left: 30px;">TABLE_OWNER</address>
<address style="text-align: left; padding-left: 30px;">ROW_ID</address>
<address style="text-align: left; padding-left: 30px;">UNDO_SQL  :  <strong>ordre sql permettant une opération INVERSE</strong><br />
</address>
<p style="text-align: left;">
<p style="text-align: left;">Il peut être intéressant par exemple de rechercher toutes les opérations de DELETE sur la table personnes la dernière journée afin de réappliquer les ordres sql inverses (UNDO_SQL) sans pour cela annuler les éventuelles mises à jour (UPDATES) qui auraient été éffectuées, ce qui aurait été malheureusement le cas lors d&#8217;un recovery!</p>
<p><span style="text-decoration: underline;">2.2) FlashBack Table </span>:</p>
<p>Les opérations FlashBack de niveau &#8220;TABLE&#8221; permettent d&#8217;éffectuer un retour arrière complet sur des opérations LMD de tables. Depuis la version 10g, cette notion a été étendue aux opérations DDL, une utilisation à manier avec précaution.</p>
<p>2.2.a) FlashBack TABLE LMD :</p>
<p style="padding-left: 30px;">Cette opération permet d&#8217;effectuer un retour arrière sur les valeurs d&#8217;une table, avec ou non l&#8217;activation de ses triggers (non recommandés dans bien des cas : valeur par défaut non activé), que cela-soit en fonction d&#8217;un SCN ou d&#8217;un TimeStamp.</p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">Syntaxe :</span></p>
<p style="text-align: center; padding-left: 30px;">FLASHBACK TABLE &lt;table_name&gt; to [ TimeStamp | SCN ] &lt;expression&gt; [ enable TRIGGERS ]</p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">Note:</span> L&#8217;utilisateur qui donne un ordre FLASHBACK TABLE doit disposer des privileges &#8220;flashback any tables&#8221;, &#8220;[insert / select / alter] sur la table correspondante. La table à restaurer doit autoriser le déplacement de lignes (ALTER TABLE &lt;table_name&gt; ENABLE ROW MOVMENT)</p>
<p>2.2.b) FlashBack TABLE DDL (ou &#8220;FlashBack DROP&#8221; ou gestion de la &#8220;<strong>CORBEILLE&#8221;</strong>) :</p>
<p style="padding-left: 30px;"><em><span style="text-decoration: underline;">Attention :</span> Cette fonctionalité n&#8217;existe que depuis la version 10g.</em></p>
<p style="padding-left: 30px;">Cette fonctionalité, dite aussi &#8220;gestion de la corbeille&#8221;, permet de revenir en arrière sur un ordre DDL de type <strong>DROP TABLE</strong>, ce que n&#8217;inculait pas le FLASHBACK TABLE.</p>
<p style="padding-left: 30px;">En fait, si les fonctions de FlashBack sont activées, <span style="text-decoration: underline;">une table n&#8217;est pas supprimée après un DROP mais simplement renommée</span> et son espace n&#8217;apparait plus dans DBA_FREE_SPACE (cette méthodologie est également valable pour les index des tables droppées).</p>
<p style="padding-left: 30px;">Les objets temporairement renommés ne sont pas écrasés tant qu&#8217;un éventuel manque de place ne survient pas dans le tablespace concerné. Oracle commencera alors par supprimer les objets les plus anciennements supprimés, comme dans une gestion &#8220;classique&#8221; de corbeille sous votre OS préféré (FIFO).</p>
<p style="padding-left: 30px;">La corbeille est à tout moment interrogeable à travers les vues USER_RECYCLEBIN ou <strong>DBA_RECYCLEBIN</strong>.</p>
<p><span style="text-decoration: underline;">Syntaxe:</span></p>
<p style="text-align: center;"><strong>FLASHBACK TABLE &lt;table_name&gt; to </strong><strong><span style="text-decoration: underline;">BEFORE DROP</span> [ rename to &lt;new_tablename&gt;]</strong></p>
<p style="text-align: left;"><span style="text-decoration: underline;">Note:</span> Les DROP de tables spécifiés avec l&#8217;expression PURGE ne pourront pas être récupérés dans la corbeille.</p>
<p style="text-align: left;"><span style="text-decoration: underline;">Note:</span> La corbeille peut être vidée de son contenu par &#8220;PURGE DBA_RECYCLEBIN&#8221;.</p>
<p style="text-align: left;"><span style="text-decoration: underline;">Note: </span>Attention aux surprises lors de la restauration d&#8217;une table qui est dans la corbeille : n&#8217;oubliez pas par exemple que certains triggers ont pu être activés lors du DROP et que les contraintes d&#8217;intégrité référentielles ne fonctionneront probablement plus à la restauration. Cette opération peut être utile pour récupérer les données proprement dites de cette table mais il est rare de pouvoir restaurer une table sans problème avec cette méthode en production, à moins que celle-ci ne soit liée à aucunne autre donnée (table paramètre, &#8230;).</p>
<p style="text-align: left;"><span style="text-decoration: underline;">Note</span>: Le Flashback Table BEFORE DROP n&#8217;a aucun rapport avec le stockage des données UNDO (archivées ou non) dans la zone de restauration rapide. En effet, une table droppée sur une database où la Corbeille est activée ne sera pas supprimée mais simplement renommée  avec un nom barbare du style &#8220;$RECYCLEBIN_379837983 &#8230;&#8221; (l&#8217;espace que celle-ci consomme dans les segments deumeurera par ailleur le même jusqu&#8217;à purge de la corbeille). Une restauration de table dropée sera un simple renommage inverse de table. Une problèmatique existe cependant en 10g et 11g : les index associés et les primary key gardent les noms des tables stockées en corbeille ($RECYCLEBIN_ &#8230;) ce qui pose un réél problème d&#8217;exploitation par la suite .. à méditer.</p>
<p><span style="text-decoration: underline;">2.3) FlashBack Database </span>:</p>
<p style="text-align: center;">
<p>le FlashBack DATABASE est sans aucun doute la plus puissante des options de FlashBack puisqu&#8217;elle permet de ramenner la database à un état précis sans pratiquer de recovery.</p>
<p>Cette méthode consiste à parcourir les logs de la flashback (ie les journaux d&#8217;annulations archivés de la fhashback_recovery_area) à l&#8217;envers: il est donc inutile de restaurer une version cohérente et antérieure de la database pour lui appliquer classiquement des archivelogs, ce qui est un gain de temps énorme!</p>
<p>La seule difficulté est de dimensionner correctement la zone de flashback car, si celle ci est trop petite, Oracle réduira alors sans vous le dire la durée de rétention des informations d&#8217;annulation archivées (DB_FLASHBACK_RENTETION) et vous ne pourrez peut être plus remonter aussi loin dans le temps que vous l&#8217;auriez souhaité.</p>
<p><span style="text-decoration: underline;">Syntaxe SQL :</span></p>
<p style="text-align: center;">FLASHBACK DATABASE TO [ SCN | TIMESTAMP ] &lt;expression&gt;</p>
<p><span style="text-decoration: underline;">Syntaxe SQL sous RMAN :</span></p>
<p style="text-align: center;">FLASHBACK DATABASE TO [ SCN | TIMESTAMP ] <strong>[ = ]</strong> &lt;expression&gt;</p>
<p style="text-align: left;">ATTENTION : Une database qui a subit un flashback est cohérente au SCN demandé, il faut absoluement vider les journaux en ligne et de les synchroniser avec ce SCN pour pouvoir ouvrir cette base de données.</p>
<p style="text-align: left;"><span style="text-decoration: underline;">Exemple:</span></p>
<pre style="text-align: left; padding-left: 30px;">SQL&gt; shutdown immediate;</pre>
<pre style="text-align: left; padding-left: 30px;">SQL&gt; startup mount;</pre>
<pre style="text-align: left; padding-left: 30px;">SQL&gt; flashback database to timestamp sysdate-1/24;</pre>
<pre style="text-align: left; padding-left: 30px;">Flashback terminé.</pre>
<pre style="text-align: left; padding-left: 30px;">SQL&gt; alter database open RESETLOGS;</pre>
<pre style="text-align: left; padding-left: 30px;">Base de données modifiée.</pre>
<pre style="text-align: left; padding-left: 30px;">SQL&gt; alter database open;</pre>
<p style="text-align: left;">
<p style="text-align: left;">D&#8217;une simplicité enfantine, d&#8217;une rapidité déconcertante.</p>
<p style="text-align: left;"><span style="text-decoration: underline;">Remarque: </span>Il n&#8217;est pas recommandé (au contraire de ce qui est fait dans cet exemple) d&#8217;éffectuer un flashback (ou une autre opération de recovery) à l&#8217;aide d&#8217;un TimeStamp mais plustot à l&#8217;aide d&#8217;un SCN si vous en avez la possibilité. En effet, Oracle ne connait que les SCN et les valeurs temporelles sont approximées et peuvent parfois s&#8217;avérer fausse! Vous pouvez ainsi restaurer une database à un point qui n&#8217;est pas vraiment celui qui avait été voulu&#8230;</p>
<p style="text-align: left;"><span style="text-decoration: underline;">Remarque:</span> Avant tout flashback, faites une sauvegarde complète de tous les fichiers de la base de données y compris ceux de la FlashBackArea : Cette opération vous permettra d&#8217;éffectuer de nouveau un FlashBack au cas où le SCN demandé ou le TimeStamp demandé n&#8217;était pas exactement celui souhaité dans une première tentative.</p>
<p style="text-align: left;">
<p style="text-align: center;">
]]></content:encoded>
			<wfw:commentRss>http://www.startupmount.com/2009/06/01/zones-de-restauration-rapides/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Bienvenue</title>
		<link>http://www.startupmount.com/2009/05/27/introduction/</link>
		<comments>http://www.startupmount.com/2009/05/27/introduction/#comments</comments>
		<pubDate>Wed, 27 May 2009 16:40:17 +0000</pubDate>
		<dc:creator>DBA01</dc:creator>
		
		<category><![CDATA[Page de garde]]></category>

		<guid isPermaLink="false">http://www.startupmount.com/?p=174</guid>
		<description><![CDATA[startupmount.com est un site web dédié à Oracle, les utilisateurs avertis l’auront vite deviné.Vous trouverez sur ce site un certain nombre d’informations relatives aux possibilités d’administration du moteur de bases de données relationnelles le plus puissant du marché, des techniques de sauvegardes et de restauration, des fiches techniques, etc.
A titre informatif, même si cela paraît [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">startupmount.com est un site web dédié à <a href="http://www.oracle.com/" target="_blank"><strong>Oracle</strong></a>, les utilisateurs avertis l’auront vite deviné.Vous trouverez sur ce site un certain nombre d’informations relatives aux possibilités d’<a href="/category/administration/">administration</a> du moteur de bases de données relationnelles le plus puissant du marché, des techniques de <a href="/category/sauvegarde/">sauvegardes</a> et de <a href="/category/sauvegarde/">restauration</a>, des fiches techniques, etc.</p>
<p style="text-align: left;">A titre informatif, même si cela paraît évident pour certains, ce site web est strictement indépendant de la <a href="http://www.oracle.com/fr">firme Oracle</a> ainsi que de tous ses produits, commerciaux ou gratuits.</p>
<p style="text-align: left;">
<p style="text-align: left;">Ce site est ouvert aux commentaires, aux <a href="/login/">articles</a>, aux <a href="/login/">suggestions</a> et aux <a href="/login/">expériences</a> en tout genre des internautes pourvu qu’ils soient <em>DBA</em>s. En effet,<em> <span style="text-decoration: underline;">la rédaction de startupmount.com est ouverte sans restriction</span></em> à ceux désireux d’apporter leur pierre à l’édifice, si humble soit il, mais dans la masse des bonnes intentions, il faut bien fixer quelque niveau afin d&#8217;éviter d&#8217;entrer dans la catégorie des sites trop souvent généralistes : Demander à ce que les rédacteurs soient des DBA n&#8217;est pas du tout prétentieux, ne nécessite aucun diplome de la part du rédacteur,  mais permet simplement de s&#8217;assurer que celui-ci sait de quoi il parle, ce qui parrait essentiel !</p>
<p>Bonne lecture !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.startupmount.com/2009/05/27/introduction/feed/</wfw:commentRss>
		</item>
		<item>
		<title>RMAN : Sauvegardes à chaud</title>
		<link>http://www.startupmount.com/2009/05/25/rman-sauvegarde/</link>
		<comments>http://www.startupmount.com/2009/05/25/rman-sauvegarde/#comments</comments>
		<pubDate>Mon, 25 May 2009 17:58:48 +0000</pubDate>
		<dc:creator>Méandre</dc:creator>
		
		<category><![CDATA[RMan]]></category>

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

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

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

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

		<category><![CDATA[block change tracking]]></category>

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

		<category><![CDATA[incrémentale]]></category>

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

		<guid isPermaLink="false">http://www.startupmount.com/?p=153</guid>
		<description><![CDATA[RMAN permet d&#8217;éffectuer la sauvegarde, à froid comme à chaud, de vos bases oracle, en mode total, incrémentiel et/ou cumulatif (nous verrons plus loin ces notions).
Comme indiqué dans le chapitre REFERENTIEL RMAN, RMAN peut utiliser les fichiers de contrôle d&#8217;une base de données pour y stoquées les informations utiles pour ses sauvegardes (et donc ses [...]]]></description>
			<content:encoded><![CDATA[<p>RMAN permet d&#8217;éffectuer la sauvegarde, à froid comme à chaud, de vos bases oracle, en mode total, incrémentiel et/ou cumulatif (nous verrons plus loin ces notions).</p>
<p>Comme indiqué dans le chapitre <a href="/2009/05/17/rman-presentation-et-referentiel/">REFERENTIEL RMAN</a>, RMAN peut utiliser les fichiers de contrôle d&#8217;une base de données pour y stoquées les informations utiles pour ses sauvegardes (et donc ses restaurations), mais cela pose de nombreux problèmes en cas de perte de ceux ci. L&#8217;altéernative est de stoquer le catalogue dans une database prévue à cet effet (ce que nous vous conseillons).<span id="more-153"></span><strong></strong></p>
<p><strong><span style="text-decoration: underline;">1 - Nomenclature:</span></strong></p>
<p>RMAN peut éffectuer de simples copies des fichiers de données, on parle alors de &#8220;<strong>IMAGE COPY</strong>&#8220;, ou de gérer l&#8217;ensemble des copies qu&#8217;il éffectue pour vous dans un format propriétaire nommé &#8220;<strong>BACKUP SET</strong>&#8220;.</p>
<p>Une ImageCopy est exactement la même chose que si vous aviez copié des fichiers par l&#8217;OS : c&#8217;est de loin la meilleure option.</p>
<p>Le BackupSet en revanche permet de ne sauvegarder que les blocs oracles utilisés dans les datafiles, ce qui allège considérablement le poids des sauvegardes avec un <span style="text-decoration: underline;">rapport de 1/5</span>, ce qui est loin d&#8217;être négligeable. De plus, un BackupSet peut être découpé logiquement en plusieurs parties nommées &#8220;<strong>BACKUP PIECES</strong>&#8221; ceci pour répondre à des problématiques de limite de stockage (un DBF de 10Go sur une bande de 4Go par exemple).</p>
<p><span style="text-decoration: underline;">Rappel:</span> Que cela soit avec RMAN ou un autre outil de sauvegarde, il n&#8217;y a pas de miracle, une <span style="text-decoration: underline;">sauvegarde à chaud</span> d&#8217;une database ne peut s&#8217;éffectuer <span style="text-decoration: underline;">QUE</span> si celle si l&#8217;archivage des fichiers journaux (<span style="text-decoration: underline;">archivelogs</span>) est activé, sinon cela n&#8217;est pas possible. Une sauvegarde &#8220;à chaud&#8221;, avec ou sans RMAN, est de toute façon incohérente, il conviendra d&#8217;appliquer les journaux archivés aux fichiers de données restaurés pour obtenir une sauvegarde &#8220;cohérente&#8221;.</p>
<p><span style="text-decoration: underline;"><strong>2 - Sauvegarde non incrémentale :<br />
</strong></span></p>
<p>Comme vous pouvez vous en douter, BACKUP est l&#8217;instruction de RMAN qui va vous permettre d&#8217;effectuer une sauvegarde de votre base de données complète ou partielle, full ou incrémentale. Elle vous permet de sauvegarder un fichier de données, un tablespace, la database entière, le spfile et les fichiers de contrôles, les journaux et journaux archivés.</p>
<p>La syntaxe est assez simple :  <strong>RMAN&gt; BACKUP &lt;ordre&gt; &lt;options&gt;</strong></p>
<p style="padding-left: 30px;"><em>Les [] symbolisent ici des éléments non obligatoires, les caractères gras les commutateurs les plus habituels en production.</em></p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">2.1 - Ordres de la commande BACKUP :</span></p>
<p style="padding-left: 90px;"><strong>[</strong> incremental level &lt;n&gt; [ cumulative] <strong>]</strong></p>
<p style="padding-left: 120px;"><em>permet les sauvegardes incrémentales de niveau 0 ou 1, avec l&#8217;option de cumuler les sauvegardes pour l&#8217;amélioration des performances à la restauration</em></p>
<p style="padding-left: 90px;"><strong>[ validate ]</strong></p>
<p style="padding-left: 120px;"><em>Doit - on vérifier la sauvegarde après sa génération ?</em></p>
<p style="padding-left: 90px;"><strong>[ as [ </strong>copy<strong> | [compressed] backupset ]</strong></p>
<p style="padding-left: 120px;"><em>Quel est le type de sauvegarde ? (&#8221;backup set&#8221; recommandé)</em></p>
<p style="padding-left: 90px;"><strong>[ database | </strong>tablespace &lt;ts_name&gt; | datafile &lt;df_name&gt; | current controlfile | spfile <strong>]</strong></p>
<p style="padding-left: 120px;"><em>que sauvegarder ?</em></p>
<p style="padding-left: 90px;"><strong>[ </strong>archivelog &lt;cible&gt; <strong>]</strong></p>
<p style="padding-left: 120px;"><em>faut il sauvegarder les archivelogs et où ?</em></p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">2.2 - Options de la commande BACKUP : </span></p>
<p style="padding-left: 90px;"><strong>[ include current controlfile ]</strong></p>
<p style="padding-left: 120px;"><em>généralement à faire, sauve si sauvegarde automatique du CTL file déjà prévue (voir plus loin)</em></p>
<p style="padding-left: 90px;"><strong>[ plus archivelog ]</strong></p>
<p style="padding-left: 120px;"><em>à effectuer en mode archivelogs dans le cas des sauvegardes à chaud car c&#8217;est indispensable pour obtenir une database cohérente après restauration.</em></p>
<p style="padding-left: 90px;">[ delete [ all ] input ]</p>
<p style="padding-left: 120px;"><em>généralement à effectuer : détruit les archivelogs qui ne sont plus nécessaires<br />
</em></p>
<p style="padding-left: 90px;">[ format = '&lt;format&gt;' ]</p>
<p style="padding-left: 120px;"><em>format de la sauvegarde (voir plus loin)</em><strong><br />
</strong></p>
<p style="padding-left: 90px;"><strong>[ tag = '&lt;libelle_de_marqueur&gt;' ]</strong></p>
<p style="padding-left: 120px;"><em>Très utile : ajouter un tag (marqueur informatif) à une sauvegarde. Il sera possible d&#8217;interroger RMAN sur ces tags.</em></p>
<p style="padding-left: 90px;">[ not backed up &lt;clause&gt;]</p>
<p style="padding-left: 90px;">[ ALL | FROM TIME &lt;time&gt; | UNTIL TIME &lt;time&gt; | TIME BETWEEN &lt;t1&gt; AND &lt;t2&gt; ]</p>
<p><span style="text-decoration: underline;">Exemples d&#8217;utilisation:</span></p>
<p style="padding-left: 30px;"><em>RMAN&gt; backup validate database tag=&#8217;full_20080701_2015&#8242; plus archivelog delete input;</em></p>
<p style="padding-left: 30px;"><em>RMAN&gt; backup tablespace datats, indexts include current controlfile;</em></p>
<p style="padding-left: 30px;"><em>RMAN&gt; backup datafile 7, &#8216;/data/madatabase/datafiles/mondbf01.dbf&#8217;;</em></p>
<p><span style="color: #000000;"> </span><span style="text-decoration: underline;"><span style="color: #ff0000;"><span style="color: #000000;">Remarque 1 :</span> </span></span><span style="color: #ff0000;"><br />
</span></p>
<p style="padding-left: 60px;">Une sauvegarde RMAN est une sauvegarde (intelligente) des fichiers composants la base de données (entre autre les datafiles). <span style="text-decoration: underline;">Ces fichiers</span>, quel que soit le mode de sauvegarde (database, datafile, &#8230;) <span style="text-decoration: underline;">sont copiés les uns après les autres</span>, il est don cfort à parier que, si la base de données &#8220;vie&#8221; un minimum, que les fichiers soient positionnés à des <span style="text-decoration: underline;">SCN différents</span> lors de leur sauvegarde.</p>
<p style="padding-left: 60px;">Les <span style="text-decoration: underline;">journaux</span> et les <span style="text-decoration: underline;">journaux archivés</span> sont alors <span style="text-decoration: underline;"><strong>indispensables</strong></span> lors de la restauration car <span style="text-decoration: underline;">il faudra pratiquer un recovery après restauration</span> des datafiles pour rendre l&#8217;ensemble de la base &#8220;cohérente&#8221; (cad toutes les en-têtes des fichiers sont de même SCN).</p>
<p style="padding-left: 60px;">Les commutateurs &#8220;<strong>PLUS ARCHIVELOG</strong>&#8221; sont alors strictement nécessaires, nes les oubliez pas !</p>
<p><span style="text-decoration: underline;">Remarque 2 :</span> Il est possible de sauvegarder manuellement les archivelogs par la commande &#8220;BACKUP ARCHIVELOG ALL&#8217;&#8221;.</p>
<p><span style="text-decoration: underline;">Remarque 3:</span> Nous verrons par la suite qu&#8217;il est souvent inutile de préciser certains commutateurs car ceux ci font partie d&#8217;une conguration globale de RMAN et sont donc inclus par défaut.</p>
<p><span style="text-decoration: underline;"><strong>3 - Sauvegarde incrémentale :<br />
</strong></span></p>
<p><em><span style="text-decoration: underline;">Note:</span> Cette option n&#8217;existe quà partir du niveai de licence &#8220;Enterprise&#8221;.</em></p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">3.1 - Incrémentale basée sur les traçage de blocs indiqué par Oracle :<br />
</span></p>
<p style="padding-left: 30px;">La sauvegarde incrémentale au sens de RMAN peut appuyer sur la technologie de <span style="text-decoration: underline;">traçage des blocs modifiés</span> d&#8217;une instance Oracle par le moteur de base de données.  Cette option activée indique au moteur de base de données qu&#8217;il doit spécifier dans un fichier particulier l&#8217;ensemble des blocs modifiés depuis l&#8217;instant T. Cette liste sera consultée par RMAN dans le cadre d&#8217;une sauvegarde incrémentale et celui-ci n&#8217;ira alors sauvegardé que les blocs marqués par Oracle comme modifiés dans ce fichier de trace.</p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">Syntaxe: </span></p>
<pre style="text-align: left; padding-left: 30px;">SQL&gt; database <span style="text-decoration: underline;">enable block change tracking</span> using file '&lt;chemin_fichier&gt;';</pre>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">3.2 - Incrémentale basée sur les traçages de blocs non indiqués par Oracle :<br />
</span></p>
<p style="padding-left: 30px;">Le traçage de blocs Oracle par le moteur de base de données comme indiqué dans 3.1) n&#8217;est pas obligatoire pour éffectuer une sauvegarde incrémentale avec RMAN mais, dans ce cas là, celui-ci ne peut pas connaitre la liste exhaustive des blocs modifiés et est obligé de parcourir tous les blocs d&#8217;un tablespace afin de déterminer quels sont les blocs modifiés depuis sa dernière sauvegarde.</p>
<p style="padding-left: 30px;">Le résultat sera exactement le même qu&#8217;avace le traçage de blocs Oracle par le moteur de base de données mais les performances s&#8217;écroulent : <span style="text-decoration: underline;">n&#8217;hésitez pas à utiliser le traçage de blocs Oracle par le moteur de base de données </span>!</p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">3.3 - Niveau de sauvegarde :</span></p>
<p style="padding-left: 30px;">Une sauvegarde incrémentale au sens de RMAN possède un <span style="text-decoration: underline;">NIVEAU</span>. Le niveau d&#8217;une sauvegarde incrémentale indique à RMAN quelle est la sauvegarde de base que celui-ci doit considérer pour évaluer le &#8220;delta&#8221; avec une situation actuelle à sauvegarder.</p>
<p style="padding-left: 60px;">- NIVEAU <strong>0</strong> : <em>Même si la sauvegarde est dite incrémentale, le niveau 0 indique en fait à RMAN que tout doit être sauvegardé, même si RMAN ne considère pas une telle sauvegarde comme FULL, elle contient pourtant tous les blocs de la base de données et est restaurable.</em></p>
<p style="padding-left: 60px;">- NIVEAU <strong>1</strong> : <em>Si une incrémentale est de niveau 1, alors RMAN ne sauvegardera QUE la différence avec la dernière sauvegarde équivalente de niveau 1 ou de niveau 0 : C&#8217;est une sauvegarde <span style="text-decoration: underline;">différentielle</span>.</em></p>
<p style="padding-left: 30px;">Le principe étant de faire régulièrement des sauvegardes de niveau 0 et, périodiquement, des sauvegardes de niveau 1 alors beaucoup plus rapides à éffectuer.</p>
<p style="padding-left: 30px;">3.4 - Sauvegarde cumulative</p>
<p style="padding-left: 30px;">Une sauvegarde cumulative est une sauvegarde de niveau 1 qui contient tous les blocs modifiés depuis la dernière sauvegarde de niveau 0, même si des sauvegardes intermédiaires de niveau 1 ont été éffectées.</p>
<p style="padding-left: 30px;">Ce type de sauvegarde consiste à demander à RMAN de repérer tous les blocs modifiés depuis la dernière sauvegarde de niveau 0, puis de les sauvegarer, une opération qui peut s&#8217;avérer lourde si la date de la dernière sauvegarde de niveau 0 est ancienne et que l&#8217;activité de la database est importante. Pour réduire ce phénomène, on pourra faire appel au pointage des blocs modifiés par le moteur de base de donnés Oracle et non par RMAN comme indiqué dans 3.1).</p>
<p style="padding-left: 30px;">L&#8217;avantage est évidement : les opérations de restaurations sont beaucoup plus rapides puisque aucunne sauvegarde de niveau 1 non cumulative n&#8217;est à appliquer.</p>
<p style="padding-left: 30px;">La syntaxe générale d&#8217;une sauvegarde incrémentale est :</p>
<p style="padding-left: 30px;"><strong>RMAN&gt; BACKUP INCREMENTAL LEVEL [0 | 1 ] [ CUMULATIVE ] &lt;ordre&gt; &lt;option&gt;</strong></p>
<p style="padding-left: 30px;">
<p style="padding-left: 60px;">
]]></content:encoded>
			<wfw:commentRss>http://www.startupmount.com/2009/05/25/rman-sauvegarde/feed/</wfw:commentRss>
		</item>
		<item>
		<title>RMAN : Configuration élémentaire</title>
		<link>http://www.startupmount.com/2009/05/17/rman-configuration-elementaire/</link>
		<comments>http://www.startupmount.com/2009/05/17/rman-configuration-elementaire/#comments</comments>
		<pubDate>Sun, 17 May 2009 17:31:42 +0000</pubDate>
		<dc:creator>Méandre</dc:creator>
		
		<category><![CDATA[RMan]]></category>

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

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

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

		<guid isPermaLink="false">http://www.startupmount.com/?p=143</guid>
		<description><![CDATA[RMAN est l&#8217;outil de sauvegarde des bases Oracle fourni par Oracle, il est à même de discuter avec le moteur de base de données pour les opérations de recovery. Même s&#8217;il existe de nombreux outils de sauvegarde sur le marché,  il apparait que RMAN est le meilleur outil pour être certain de sauvegarder correctement.
De plus, [...]]]></description>
			<content:encoded><![CDATA[<p>RMAN est l&#8217;outil de sauvegarde des bases Oracle fourni par Oracle, il est à même de discuter avec le moteur de base de données pour les opérations de recovery. Même s&#8217;il existe de nombreux outils de sauvegarde sur le marché,  il apparait que RMAN est le meilleur outil pour être certain de sauvegarder correctement.</p>
<p>De plus, l&#8217;interface utilisateur de RMAN est d&#8217;une simplicité affligente pour 90% des cas de sauvegardes / restaurations, les 10% restants nécessitant il est vrai une certaine connaissance du produit, mais, n&#8217;est-ce pas le cas pour tous les outils de sauvegarde ?</p>
<p>Cet  article permet au DBA d&#8217;appréhender les 90% RMAN dans de bonnes conditions.</p>
<p><span id="more-143"></span><span style="text-decoration: underline;"><strong>1 - Introduction</strong></span></p>
<p>RMAN peut utiliser différent référentiels de sauvegardes dont vous devez <a href="/2009/05/17/rman-presentation-et-referentiel/">prendre connaissance </a>avant même de consulter cet article. En effet, il est possible d&#8217;utiliser les fichiers de controles d&#8217;une instance de base de données comme référentiel (ce qui n&#8217;est pas recommandé, en effet, une perte du fichier empecherait un recovery), ou une instance de base de données spécialisée à cet effet.</p>
<p>La connection au référentiel de sauvegarde s&#8217;éffectue de la manière suivante  dans le cadre de l&#8217;utilisation d&#8217;un catalogue de récupération :</p>
<p style="text-align: center;">rman target &lt;chaine_de_connexion_vers_la_database&gt; catalog &lt;chaine_de_connexion_au_catalogue&gt;</p>
<p>La connection au référentiel de sauvegarde s&#8217;éffectue de la manière suivante  dans le cadre de l&#8217;utilisation de l&#8217;utilisation des fichiers de controles comme référentiel de sauvegarde :</p>
<p style="text-align: center;">rman target / (en tant que sysdba sur le host local)</p>
<p style="text-align: center;">OU</p>
<p style="text-align: center;">rman &lt;chaine_de_connexion_vers_la_database&gt;</p>
<p style="text-align: left;">Tout ajout / modification d&#8217;une configuration par rman se fera avec l&#8217;attribut CONFIGURE.</p>
<p style="text-align: left;">
<p style="text-align: left;"><span style="text-decoration: underline;"><strong>2 - Nomenclature de RMAN</strong></span></p>
<p style="text-align: left;">RMAN, comme tous les outils de sauvegarde, utilise une nomenclature de nommage des objets qu&#8217;il convient de connaitre afin de bien comprendre les manipulations que l&#8217;on entreprend avec ce type d&#8217;outil.</p>
<p style="text-align: left;">En voici une liste (non exhaustive) :</p>
<p style="text-align: left;"><strong><span style="text-decoration: underline;">2.1 - CANAL ET PERIPHERIQUE RMAN </span></strong></p>
<p style="text-align: left;"><span style="text-decoration: underline;">2.1.1 - Introduction </span><strong><span style="text-decoration: underline;"><br />
</span></strong></p>
<p style="text-align: left;">Une sauvegarde par RMAN doit avoir (au moins) un <span style="text-decoration: underline;">chemin de destination</span> ou &#8220;channel&#8221; sur (au moins) un <span style="text-decoration: underline;">périphérique physique</span> ou &#8220;device type&#8221;. Les notions rman sont alors celles de CHANNEL ou de DEVICE TYPE.</p>
<p style="text-align: left;">Un <span style="text-decoration: underline;">CHANNEL</span> rman représente la possibilité de sauvegarder et de paralléliser éventuellement des opérations à travers différents chemins sur différents périphériques en médias. Un channel possède <span style="text-decoration: underline;">DEVICE TYPE</span> qui peut représenter un disque dur (local / distant) ou un périphérique externe (Lecteur LTO, &#8230;).</p>
<p style="text-align: left;">Dans la plupart des configurations &#8220;modernes&#8221; des serveurs de sauvegardes rman, les canaux de sauvegardes de celles-ci seront associés à de périphériques de type disque (généralement des volumes de baies de disques) qui seront parallèlement sauvegardés par des programmes de sauvegardes de fichiers indépendant des bases de données (TINA, TSM, etc  &#8230;).</p>
<p style="text-align: left;"><span style="text-decoration: underline;">Syntaxe:</span></p>
<pre style="text-align: center;">CONFIGURE CHANNEL DEVICE TYPE [ DISK | TAPE] [ &lt; option &gt; ]</pre>
<p style="text-align: left;"><span style="text-decoration: underline;">Note: </span>Le channel par défaut de rman est associé à un device type DISK (stokage sur disque dur).</p>
<p style="text-align: left;"><span style="text-decoration: underline;">2.1.2 - Options de stokage</span></p>
<p style="text-align: left;">En fonction du type de stockage et du média utilisé, le DBA peut être amenné à découper un jeu de sauvegarde (BACKUP SET) en plusieurs parties (BACKUP PIECE) afin de les segmenter et d&#8217;adapter leur taille à la taille maximale que peut supporter le média associé au DEVICE TYPE (par exemple une K7 LTO3). Cette possibilité est offerte à travers le commutateur <span style="text-decoration: underline;">FORMAT</span>.</p>
<p style="text-align: left;">Les options de format sont nombreuses, consultez la doc de rman pour en obtenir la liste.</p>
<p style="text-align: left;">De plus, il est possible de suffixer, à l&#8217;aide du commutateur <span style="text-decoration: underline;">MAXPIECESIZE</span>, le fichier de sauvegarde (backup set / piece) à l&#8217;aide de variables permettant d&#8217;en défini&#8217; l&#8217;unicité, de l&#8217;associer au nom d&#8217;une database ou à son dbid, à un nom de tablesapce, etc.</p>
<p style="text-align: left;"><span style="text-decoration: underline;">Exemple:</span></p>
<pre style="text-align: left; padding-left: 30px;">CONFIGURE CHANNEL
          DEVICE TYPE DISK
          FORMAT '/data/mabase/sav/%U'
          MAXPIECESIZE 2G;</pre>
<p style="text-align: left;"><span style="text-decoration: underline;">Remarque </span>: Effacer toutes vos commandes de configuration pour revenir à la configuration par défaut est possible avec &#8216;CONFIGURE CHANNEL DEVICE TYPE CLEAR&#8217;</p>
<p style="text-align: left;"><span style="text-decoration: underline;">2.3 - Politique de conservation des données</span></p>
<p style="text-align: left;">Il existe deux types de politique de conservation des données sous rman par database à sauvegarder :</p>
<p style="text-align: left; padding-left: 30px;">a) Redondance de sauvegardes (REDUNDANCY)</p>
<p style="text-align: left; padding-left: 30px;">b) Nombre de jours de restaurations (WINDOW)</p>
<p style="text-align: left;">L&#8217;option a) permet de s&#8217;assurer via rman qu&#8217;à une database correspondra toujours un certain <span style="text-decoration: underline;">nombre fixe</span> de sauvegardes <span style="text-decoration: underline;">au minimum. </span>Par exemple, certaines production exige de pouvoir revenir, quel que soit le moment, à deux niveaux de versions antérieur, pour des sauvegardes régulières journalières, ce qui porterait le nombre de redondance de sauvegarde à 3 (versions).</p>
<p style="text-align: left;">L&#8217;option b) permet de s&#8217;assurer via rman qu&#8217;il sera toujours possible de remonter à j-n, n étant à fixer. Dans cet exemple, le nombre de redondance de sauvegarder n&#8217;a pas d&#8217;interet pourvu que l&#8217;on puisse revenir à la dernière sauvegarde du mois dernier par exemple, ce qui porterait ce paramètre à 30 (jours) environ.</p>
<p style="text-align: left;">Syntaxe:</p>
<pre style="text-align: left; padding-left: 30px;">CONFIGURE RETENTION POLICY
[ TO [ RECOVERY OF &lt;n&gt; DAYS | REDUNDANCY &lt;n&gt; ]
| CLEAR ];</pre>
<p style="text-align: left;"><span style="text-decoration: underline;">2.4 - Sauvegarde automatique des fichiers de contrôles</span></p>
<p>Lorsque vous sauvegardez une database, il est indispensable, hormis les fichiers de données, de sauvegarder un certain nombre d&#8217;éléments dont les fichiers de controles et les fichier d&#8217;initialisation. Cette opération est éffectuée, si vous le souhaitez, automatiquement par rman qui les intégrera aux backup set.</p>
<p>Syntaxe:</p>
<p>CONFIGURE CONTROLFILE AUTOBACKUP ON;</p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<h1 style="text-align: center;"><span style="color: #ff0000;"><br />
</span></h1>
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://www.startupmount.com/2009/05/17/rman-configuration-elementaire/feed/</wfw:commentRss>
		</item>
		<item>
		<title>RMAN : Présentation et référentiel</title>
		<link>http://www.startupmount.com/2009/05/17/rman-presentation-et-referentiel/</link>
		<comments>http://www.startupmount.com/2009/05/17/rman-presentation-et-referentiel/#comments</comments>
		<pubDate>Sun, 17 May 2009 15:27:51 +0000</pubDate>
		<dc:creator>Méandre</dc:creator>
		
		<category><![CDATA[RMan]]></category>

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

		<category><![CDATA[fichier de controle]]></category>

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

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

		<guid isPermaLink="false">http://www.startupmount.com/?p=138</guid>
		<description><![CDATA[RMAN (Recovery Manager) est l&#8217;outil d&#8217;Oracle pour la sauvegarde des bases de données, il est donc dommage (pour ne pas employer d&#8217;autre terme) d&#8217;utiliser un autre utilitaire que celui-ci pour sauvegarder les données Oracle.
RMAN permet de sauvegarder des données à froid comme à chaud en toute sécurité. Les sauvegardes peuvent être FULL, différentielles ou cumulatives [...]]]></description>
			<content:encoded><![CDATA[<p><strong>RMAN</strong> (Recovery Manager) est l&#8217;outil d&#8217;Oracle pour la sauvegarde des bases de données, il est donc dommage (pour ne pas employer d&#8217;autre terme) d&#8217;utiliser un autre utilitaire que celui-ci pour sauvegarder les données Oracle.</p>
<p>RMAN permet de sauvegarder des données à froid comme à chaud en toute sécurité. Les sauvegardes peuvent être FULL, différentielles ou cumulatives et sont basées sur un référentiel nommé REPOSITORY qui peut se trouver dans les fichiers de dontrole d&#8217;une database ou qui peut être externalisé dans une instance prévue à cet effet (REPOSITORY CATALOG ou &#8220;catalogue de récupération&#8221;).</p>
<p><span id="more-138"></span><strong><span style="text-decoration: underline;">0 - Utilisation de RMAN avec les fichiers de contrôles</span></strong></p>
<p>Si vous utilisez les fichiers de controle comme référentiel RMAN, il est encore plus critique de ne pas les perdres, le multiplexage sur plusieurs disques et/ou plusieurs fileSystem est une obligation pour s&#8217;assurer de pouvoir restaurer une sauvegarde !</p>
<p>Les données conservées dans un fichier de contrôle ne sont pas éternelles et sont fixées par le paramètre d&#8217;init de l&#8217;instance CONTROL_FILE_RECORD_KEEP_TIME. La valeur par défaut de ce paramètre est 7 (une semaine), dans le cadre de l&#8217;utilisation de RMAN, je vous conseille de porter ce chiffre à 15 voire 30 !</p>
<p><strong><span style="text-decoration: underline;">1 - Utilisation de RMAN avec un catalogue de récupération </span></strong>(recommandé)<strong><span style="text-decoration: underline;"><br />
</span></strong></p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">1.1 Introduction</span></p>
<p>La méthode de connexion d&#8217;un client RMAN sur la catalogue de récupération (instance de base de données dédiée à stoquer les informations RMAN dans une databse plustot que dans les fichiers de controles) est la suivante :</p>
<p style="text-align: center;">&gt; rman TARGET &lt;user_db&gt;/&lt;pass_bd&gt;@&lt;alias_db&gt; CATALOG &lt;user_cat&gt;/&lt;pass_cat&gt;@&lt;alias_cat&gt;</p>
<p style="text-align: left;">Il faut bien différencier dans cette commande le TARGET qui concerne les informations sur la base de données à sauvegarde ou à restaurer du CATALOG qui indique la chaine de connexion au catalogue de récupération.</p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">1.2 Création du catalogue</span></p>
<p>L&#8217;opération consiste, dans l&#8217;instance de base de données prévue à cet effet, à créer un tablespace et un user pour rman, puis, d&#8217;éffectuer un grant particulier au user rman:</p>
<pre style="padding-left: 30px;"># ORACLE_SID=rmancat
# sqlplus / as sysdba
SQL&gt; create tablespace rman_ts datafile '/data/rman/ts/ts01.dbf' size 50M next 10M unlimited;
Tablespace Created
SQL&gt; create user rman identified by rmanpass default tablespace rman_ts;
SQL&gt; grant connect, resource, recovery_catalog to rman;
SQL&gt; exit</pre>
<p>Et voilà : le grant RECOVERY_CATALOG suffit à indiquer que l&#8217;utilisateur rman a le droit d&#8217;interroger et d&#8217;interragir avec Oracle pour toute opération de sauvegarde / restauration.</p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">1.3 Utilisation du catalogue</span></p>
<p>A chaque nouvelle base de données à sauvegarder par rman, il faut informer rman qu&#8217;il doit l&#8217;inscrire au préalablement dans le catalogue (fichier de controle ou catalogue de récupération). Ceci se fait par la commande</p>
<p>RMAN&gt; register database;</p>
<p>Un DBID est affecté par rman au référentiel afin de différencier toutes les databases qui peuvent provenir de différents hosts et donc avoir les mêmes dbdid locaux ou dbname. Toutes les informations nécessaires aux futures sauvegardes / restaurations sont égallement créées (fichiers à sauvegarder, emplacements des journaux, &#8230;)</p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">1.4 Consultation du catalogue</span></p>
<p style="padding-left: 60px;"><em>1.4.1 Commande REPORT</em></p>
<p>La commande rman REPORT permet d&#8217;obtenir des informations sur l&#8217;état des sauvegardes, par exemple :</p>
<p style="padding-left: 30px;">report schema : quelle est la structure de la base de données ?</p>
<p style="padding-left: 30px;">report need backup : quels sont les fichiers qui nécessitent une sauvegarde ?</p>
<p style="padding-left: 60px;"><em>report need backup incremental 3 : même question pour les incrémentales de niveau 3<br />
</em></p>
<p style="padding-left: 60px;"><em>report need backup days 3 : même question pour les fichiers non sauvegardés depuis 3 jours</em></p>
<p style="padding-left: 30px;">report obsolete : quels sont les fichiers qui peuvent être éffacés (conformément à la politique de sauvegarde)?</p>
<p style="padding-left: 30px;">report unrecoverables : quels sont les fichiers introuvables et non restaurables ?</p>
<p style="padding-left: 30px;">&#8230;</p>
<p style="padding-left: 60px;"><em>1.4.2 Commande LIST</em></p>
<p>La commande rman LIST permet d&#8217;obtenir des détails sur des sauvegardes ou certains éléments d&#8217;une sauvegarde, par exemple :</p>
<p style="padding-left: 30px;">list backup; (liste de toutes les sauvegardes)</p>
<p style="padding-left: 30px;">list backupset; (liste de tous les backupsets)</p>
<p style="padding-left: 30px;">list backupset of datafile &#8216;/data/mabase/tablespaces/data/data01.dbf&#8217;; (liste de tous les backupsets de ce fichier)</p>
<p style="padding-left: 30px;">etc&#8230;</p>
<p><em><span style="text-decoration: underline;">Note 1 :</span> Le détail des commandes de consultation du catalogue seront plus profondément approfondies dans l&#8217;aspect sauvegarde / restauration des bases de données à l&#8217;aide de rman et n&#8217;ont pas vocation à être étudiée dans cet article qui a pour unique but d&#8217;attirer l&#8217;attention du DBA sur la qualité du référentiel RMAN.</em></p>
<p><em><span style="text-decoration: underline;">Note 2 :</span> N&#8217; oubliez pas que, si vous perdez le recovery_catalog, vous ne pourrez plus restaurer aucune de vos sauvegardes de sera plus restaurable, il est donc primordial de le sauvegarder régulièrement. Le poids du catalogue étant très léger, vous n&#8217;aurez aucun problème à réaliser une sauvegarde complète journalière de celle-ci à froid, hors période de sauvegardes de vos autres databases.<br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.startupmount.com/2009/05/17/rman-presentation-et-referentiel/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sauvegardes logiques par exports/imports</title>
		<link>http://www.startupmount.com/2009/05/17/sauvegardes-logiques-par-exportsimports/</link>
		<comments>http://www.startupmount.com/2009/05/17/sauvegardes-logiques-par-exportsimports/#comments</comments>
		<pubDate>Sun, 17 May 2009 13:55:14 +0000</pubDate>
		<dc:creator>DBA01</dc:creator>
		
		<category><![CDATA[Sauvegarde]]></category>

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

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

		<guid isPermaLink="false">http://www.startupmount.com/?p=131</guid>
		<description><![CDATA[Un outil de sauvegarde d&#8217;Oracle des plus classique est l&#8217;export de données et l&#8217;import de données, grâce à deux utilitaires fournis par Oracle EXP et IMP.
Ces utilitaires sont obsolètes depuis la version 10g et sont remplacés au profit de Datapump (expdp et impdp), mais exp et imp demeurent présents en 10g pour des raisons de [...]]]></description>
			<content:encoded><![CDATA[<p>Un outil de sauvegarde d&#8217;Oracle des plus classique est l&#8217;export de données et l&#8217;import de données, grâce à deux utilitaires fournis par Oracle <strong>EXP</strong> et <strong>IMP</strong>.</p>
<p>Ces utilitaires sont obsolètes depuis la version 10g et sont remplacés au profit de <span style="text-decoration: underline;">Datapump </span>(expdp et impdp), mais exp et imp demeurent présents en 10g pour des raisons de compatibilité, ceux-ci seront sans doute supprimés dans la version 12x même s&#8217;ils existent encore dans la 11g.</p>
<p><span id="more-131"></span><span style="text-decoration: underline;"><strong>1 - Introduction</strong></span></p>
<p>L&#8217;export de données est apporté par l&#8217;utilitaire Oracle $ORACLE_BASE/bin/exp. Même si on en parle comme un outil de sauvegarde de données par abus de langage, cet outil doit plutôt être considéré comme un outil de <span style="text-decoration: underline;">transport de données</span> (d&#8217;une machine à une autre, d&#8217;une version à une autre) car il demeure très pauvre en matière fonctionnelle comparé aux autres outils de sauvegardes définis comme tel par Oracle tels que <span style="text-decoration: underline;">RMAN</span>.</p>
<p>Les outils d&#8217;export/import permettent néanmoins de reconstruire tous les objets présents dans une base de données, mais pas la base de données elle-même, ce qui signifie que vous devrez éventuellement créer une base vierge pour accueillir les données exportées et que, en aucun cas, l&#8217;export/import ne sait traiter cette phase là : Export / Import n&#8217;est pas un outil de sauvegarde de base de données mais ou outil d&#8217;isolation de données logiques (ordres SQL seulement).</p>
<p>Nous verrons par la suite que, la pluspart du temps, si la base de données est accessible par les utilisateurs en modification, il est fort à parier que l&#8217;export mette à disposition des données incohérentes et qu&#8217;il faille pour éviter cela stopper les accès tout en laissant la base ouverte&#8230; Nous vous avons dit que exp/imp n&#8217;était pas un &#8220;outil de sauvegarde&#8221; !</p>
<p><span style="text-decoration: underline;"><strong>2 - L&#8217;outil d&#8217;export de données EXP</strong></span></p>
<p>L&#8217;export permet donc, selon certains critères ou filtres, de générer dans un fichier DUMP Oracle (dmp) certaines instructions SQL capables de reconstruire les données à l&#8217;aide de l&#8217;outil d&#8217;import (imp).</p>
<p>L&#8217;export, qui exportera les données de la database définie par la variable d&#8217;nevironnement ORACLE_SID) utilise principalement les commutateurs suivants :</p>
<pre style="padding-left: 30px;">userid (chaine de connection Oracle à l'instance au sens de SqlPlus)
owner  (nom d'un schéma à exporter plustot que tous les schémas de la base)
rows   (doit on expoter les données (Y) ou seulement les structures de tables)
indexes(doit on exporter les index (Y))
grants (doit on exporter les grants (Y))
table  (si on ne doit export que certaines tables)
file   (nom du dump généré)
log    (nom du fichier log pour trace)
full   (doit on exporter toute la database (N))
statistics (méthode d'exportation des stats (estimate|none))
consistent (les données doivent-elles être consistantes (N))
etc ... (faire exp HELP=Y pour afficher tous les commutateurs)

<span style="text-decoration: underline;">exemple :</span>
exp "'sys/oracle as sysdba'"
    owner=SCOTT
    file=/data/export_scott.dmp
    log=/data/export.log
    statistics=none
    consistent=Y</pre>
<p><span style="text-decoration: underline;">Export FULL:</span></p>
<p style="padding-left: 30px;">Attention au commutateur FULL : il permet d&#8217;exporter toute la base de données, mais vous risquez d&#8217;avoir des problèmes à l&#8217;import, pensez à ne pas importer en mode FULL égallement sous peine de voir éclater vos tablespaces SYSTEM, SYSAUX, &#8230; par ceux importés et de d&#8221;étruire votre base de données ! Si un export est FULL, l&#8217;import doit être filtrant. Si un export est filtré, l&#8217;import peut être FULL.</p>
<p><span style="text-decoration: underline;">Données consistantes :</span></p>
<p style="padding-left: 30px;">Le commutateur CONSISTENT n&#8217;est pas Y par défaut, ce qui signifie que votre export risque de comporter des données inconsistantes. En fait, durant l&#8217;exportation d&#8217;une table (et seulement d&#8217;une table) il se peut que des données soient modifiées en fin de fichier alors que vous avez déjà sauvegardé le début de fichier, et dans ce cas là, vous possèderez peut être des données orphelines (données filles qui n&#8217;ont pas de parent) ce qui peut rendre votre applicatif purement inexpoitable.</p>
<p style="padding-left: 30px;">Pour éviter cela, le commutateur CONSITENT doit être fixé à Y. Le SCN courant est alors observé par exp au début de la sauvegarde d&#8217;une table et l&#8217;ensemble des requêtes de sélection que va éffectuer l&#8217;export se fera par rapport à ce SCN =&gt; Les données insérées ou modifiées pendant la sauvegarde ne seront pas vues.</p>
<p style="padding-left: 30px;">Attention, si vos tables sont très grandes, n&#8217;oubliez pas que votre tablespace UNDO doit être correctement dimensionné car auquel cas, vous risquez d&#8217;obtenir en résultat un message d&#8217;erreur &#8220;SNAPSHOT TOO OLD&#8221; car les données dont vous auriez eu besoin pour terminer l&#8217;export de votre table ont été éffacées par d&#8217;autres données indispensables à l&#8217;exécution de nouvelles transactions&#8230;</p>
<p style="padding-left: 30px;"><span style="text-decoration: underline;">ATTENTION :</span> Ce type de traitement ne vous enlève pas le risque d&#8217;avoir des données insonsistantes entre plusieurs tables, le paramètre CONSISTENT ne vous règle le problème que au sein d&#8217;une table, c&#8217;est pour cela qu&#8217;<span style="text-decoration: underline;">il est VIVEMENT CONSEILLE de stopper les accès utilisateurs à la database pendant un export</span> (fermeture des serveurs d&#8217;applications, fermeture des listeners, toute bonne méthode au choix du DBA &#8230;).</p>
<p><strong><span style="text-decoration: underline;">3 - L&#8217;outil d&#8217;import de données IMP</span></strong></p>
<p>L&#8217;import IMP est donc l&#8217;outil capable de lire des dumps réalisés par l&#8217;export d&#8217;Oracle, l&#8217;ordre dans lequel imp effectue les opérations est le suivant:</p>
<p style="padding-left: 30px;">1:  création des tables (sans contraintes)</p>
<p style="padding-left: 30px;">2: insertion des données des tables</p>
<p style="padding-left: 30px;">3: créations des index</p>
<p style="padding-left: 30px;">4: application des contraintes d&#8217;intégrité référentielles</p>
<p style="padding-left: 30px;">5: création des triggers, des index bitmaps, &#8230;</p>
<p>Les commutateurs sont globalement les même que pour EXP, vous pouvez en avoir le détail avec IMP HELP=Y, mais en voici quelques uns indispensables :</p>
<pre style="padding-left: 30px;">userid  (chaine de connection Oracle à l'instance au sens de SqlPlus)
fromuser(liste des schémas à importer plustot que tous les schémas de la base)
tomuser (dans quels schémas faut il importer les données)
rows    (doit on importer les données (Y) ou seulement les structures de tables)
indexes (doit on exporter les index (Y))
grants  (doit on exporter les grants (Y))
table   (si on ne doit export que certaines tables)
file    (nom du dump généré)
log     (nom du fichier log pour trace)
full    (doit on exporter toute la database (N))
commit  (faut-il commiter chaque instruction SQL (N))

<span style="text-decoration: underline;">exemple :</span>
imp "'sys/oracle as sysdba'"
    file=/data/export_scott.dmp
    log=/data/import.log
    full=Y &lt;-- car on part du principe que l'exp n'est pas full!</pre>
<p><span style="text-decoration: underline;">Remarque: </span></p>
<p>Un export ou un import ne doit signaler aucunne erreur ni aucun warniong sous peine d&#8217;avoir des surprises lors de l&#8217;exploitation de vos données&#8230; Cependant, si vous n&#8217;avez pas pu fermer l&#8217;accès aux données lors de votre export et que IMP soit incapable d&#8217;appliquer les contraintes référentielles car certaines données sont incohérentes, vous pouvez toujours demander à Oracle de ne pas tenir compte des contraintes pour les données existantes mais d&#8217;en tenir compte pour les futures insertions avec la commande suivante :</p>
<p style="text-align: center;"><em>ALTER</em> TABLE <em>&lt;table_name&gt; CONSTRAINT</em> &lt;constraint_name&gt; <span style="text-decoration: underline;"><em>ENABLE NOVALIDATE</em></span>;</p>
<p>Attention, ceci vous permettra sans doute de démarrer votre instance et d&#8217;ouvrir votre database mais, vous l&#8217;aurez compris, à n&#8217;utiliser qu&#8217;en cas de dernier recours car ici, forcément, certaines données sont maintenant orphelines &#8230; Danger !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.startupmount.com/2009/05/17/sauvegardes-logiques-par-exportsimports/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sauvegarde à chaud de tablespaces</title>
		<link>http://www.startupmount.com/2009/05/17/sauvegarde-a-chaud-de-tablespaces/</link>
		<comments>http://www.startupmount.com/2009/05/17/sauvegarde-a-chaud-de-tablespaces/#comments</comments>
		<pubDate>Sun, 17 May 2009 13:07:49 +0000</pubDate>
		<dc:creator>DBA01</dc:creator>
		
		<category><![CDATA[Sauvegarde]]></category>

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

		<category><![CDATA[sauvegarde à chaud]]></category>

		<guid isPermaLink="false">http://www.startupmount.com/?p=129</guid>
		<description><![CDATA[Quelle que soit le type de sauvegarde, de base de données, de fichier de données, de tablespaces, &#8230;, si celle-ci est éffectuée base &#8220;ouverte&#8221; cela implique que la base fonctionne en mode Archive Logs car les journaux archivés sont indispensables à la restauration des données ainsi sauvegardées. Si ce mode de sauvegarde peut s&#8217;avérer pratique [...]]]></description>
			<content:encoded><![CDATA[<p>Quelle que soit le type de sauvegarde, de base de données, de fichier de données, de tablespaces, &#8230;, si celle-ci est éffectuée base &#8220;ouverte&#8221; cela implique que la base fonctionne en mode Archive Logs car les journaux archivés sont indispensables à la restauration des données ainsi sauvegardées. Si <span style="text-decoration: underline;">ce mode de sauvegarde</span> peut s&#8217;avérer pratique dans certains, on verra par la suite que celui-ci altère les performances et au final <span style="text-decoration: underline;">n&#8217;est </span><span style="text-decoration: underline;">pas conseillé</span>.</p>
<p><span id="more-129"></span>La sauvegarde de tablespace à chaud permet au DBA de ne jamais stopper son instance de production et de ne jamais interrompre l&#8217;accès aux données (par exemple en mettant les tablespaces offline, ce qui enlève l&#8217;intéret de la sauvegarde à chaud).</p>
<p>Le principe est de provoquer un CHECKPOINT afin de s&#8217;assurer que tous les datafiles d&#8217;un tablespace sont synchronisés (au même niveau de SCN) et d&#8217;indiquer à Oracle qu&#8217;à dater de cet instant, les transactions provoquent des écritures dans les datafiles mais ceux ci ne sont plus synchronisés avec les datafiles des données en cours de sauvegarde, la sauvegarde est dite &#8220;incohérente&#8221;.</p>
<p>Lorsque la sauvegarde physique des fichiers de données d&#8217;un tablespace en mode &#8220;sauvegarde à chaud&#8221;, on l&#8217;indique à Oracle et celui-ci va alors synchroniser l&#8217;ensemble des fichiers de données de la database.</p>
<p>Les séquences suivantes suffisent à sauvegarder à chaud un tablespace T :</p>
<pre style="padding-left: 30px;">alter tablespace T begin backup;</pre>
<pre style="padding-left: 30px;">host copy /data/madatabase/tablespaces/T/*.dbf
          /data/madatabasesau/sauvegardes/tablespaces/T/</pre>
<pre style="padding-left: 30px;">alter tablespace T end backup;</pre>
<p>Pendant la copie des datafiles (entre le begin backup et le end backup), les blocs Oracle d&#8217;un fichier de données ne sont donc pas automatiquement synchronisés avec les SCN présents dans les entêtes des mêmes fichiers de données.</p>
<p>L&#8217;état des tablespaces en cours de sauvegarde peut être visualisé grace à la vue v$backup.</p>
<p><span style="text-decoration: underline;">Remarque: </span>Lorsque un tablespace en cours de sauvegarde est solicité pour des mises à jour, des informations de récupérations supplémentaires sont alors stoquées dans les fichiers de journaux et les journaux archivés, ce qui peut provoquer un nombre très importants de fichiers journaux comparé à une production en mode normal. De plus, cette écriture supplémentaire peut altérer les performances globales de l&#8217;accès aux données de la database, c&#8217;est pour cela que <strong><span style="text-decoration: underline;">ce mode de sauvegarde n&#8217;est pas recommandé</span>.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.startupmount.com/2009/05/17/sauvegarde-a-chaud-de-tablespaces/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
