background success stories

Exporter, importer, comparer des clichés AWR entre bases Oracle

Introduction

A condition d’être en Enterprise Edition et d’avoir acquis le Diagnostic pack, une base Oracle peut donner des informations de performance à travers la génération de rapports AWR.

Depuis Oracle 10g, toute base Oracle génère en effet ses propres clichés AWR une fois par heure (par défaut) via le background process MMON. Un rapport AWR peut être lancé de manière très simple sous sqlplus avec le script prédéfini awrrpt.sql.

Une fonctionnalité un peu moins connue est de pouvoir exporter les clichés AWR d’une base pour les importer plus tard dans une autre (ayant un autre DBID).

Une utilisation de cette fonctionnalité pourrait être d’envoyer les clichés AWR de différentes bases de Production vers une seule base dédiée au stockage des clichés AWR. Depuis cette base centralisée on pourra ensuite générer des rapports de n’importe quelle base et même faire des rapports différentiels entre ces bases.

Un autre exemple d’utilisation pourrait être lors d’une migration : comparer les performances de la base avant migration et après migration, en effectuant l’importation des clichés dans la nouvelle base à partir des clichés exportés de l’ancienne puis en générant un rapport différentiel entre ces 2 périodes provenant de 2 bases différentes.

Un autre cas peut être celui du Real Application Testing Pack (RAT), et de la fonctionnalité DBreplay qui permet de capturer une charge SQL et PL/SQL sur une base de Production et de la rejouer sur une base de Test. La comparaison des 2 exécutions peut alors se faire en comparant les rapports AWR de la capture et ceux du Replay, en exportant préalablement les rapports AWR de la capture vers la base effectuant le Replay.

Pour exporter ou importer des clichés AWR, Oracle a prévu 2 scripts directs, ne nécessitant pas d’utiliser l’utilitaire Data Pump : awrextr.sql et awrload.sql. Un objet directory sera cependant nécessaire pour exporter ou importer le fichier de clichés AWR car il n’est pas possible d’indiquer directement un chemin du système d’exploitation dans ces scripts.

 

Voici les étapes de l’export depuis la base source :

Etape 1

Créer un objet directory (ou utiliser un directory existant) dans la base source, par exemple

create directory AWR_DIR as ‘/u01/app/oracle/oradata/dump/awrdata’;

(ajustez le chemin du répertoire à votre cas particulier, par exemple D:\oradata\dump\awrdata pour un système Windows).

 

Etape 2

Sous sqlplus, connecté en tant que sys ou system, lancer le script prédéfini Oracle (? correspond à votre ORACLE_HOME sous Unix)

@?/rdbms/admin/awrextr.sql

 

Et répondre aux questions qui suivent :

<RETURN> pour valider le dbid proposé ou <n° de DBID> pour en choisir un autre (une base aura en principe les clichés d’un seul DBID sauf si vous avez déjà importé des clichés d’autres bases dans celle-ci).

 

10  pour voir jusqu’à 10 jours d’historique des clichés

–> Retrouver dans la liste les n° début (N1)  et fin (N2) des clichés que vous souhaitez exporter

 

Enter value for begin_snap:        –> indiquer le n° de cliché le plus ancien souhaité : N1

Enter value for end_snap:            –> indiquer le n° de cliché le plus récent souhaité : N2

–> Tous les clichés compris entre N1 et N2 seront exportés.

 

Enter value for directory_name:               –> indiquer le nom du directory choisi à l’étape 1 , AWR_DIR dans mon cas

Enter value for file_name:           <RETURN> pour accepter la valeur par défaut

 

Attendre quelques minutes… Un fichier awrdat_N1_N2.dmp est alors généré au niveau du Directory choisi.

 

Etape 3

Récupérer le fichier généré et l’envoyer vers la machine hébergeant la base cible, par exemple sous Unix :

scp awrdat_N1_N2.dmp machine2:/u01/app/oracle/oradata/dump/awrdata

 

 

Voici maintenant les étapes de l’import sur la base cible :

Etape 1

Créer un objet directory (ou utiliser un directory existant) dans la base cible, par exemple

create directory AWR_DIR as ‘/u01/app/oracle/oradata/dump/awrdata’;

(ajustez le chemin du répertoire à votre cas particulier, par exemple D:\oradata\dump\awrdata pour un système Windows).

 

Etape 2

Sous sqlplus, connecté en tant que sys ou system, lancer le script prédéfini Oracle (? correspond à votre ORACLE_HOME sous Unix)

@?/rdbms/admin/awrload.sql

Et répondre aux questions qui suivent :

~~~~~~~~~~
AWR LOAD
~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~ This script will load the AWR data from a dump file. The ~
~ script will prompt users for the following information: ~
~ (1) name of directory object ~
~ (2) name of dump file ~
~ (3) staging schema name to load AWR data into ~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Choose a Directory Name from the list above (case-sensitive).

Enter value for directory_name:      –> Indiquer le nom du directory créé ci-dessus AWR_DIR

 

Specify the Name of the Dump File to Load
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Please specify the prefix of the dump file (.dmp) to load:

Enter value for file_name:      –> Indiquer le nom du fichier exporté, sans mettre le suffixe .dmp par exemple awrdat_21639_21663

 

Enter value for schema_name: <RETURN> pour valider le choix par défaut AWR_STAGE qui va créer ce schéma temporairement pendant l’import (il sera supprimé à la fin de l’import).

Puis valider les choix par défaut pour les tablespaces permanents par défaut et temporaires par défaut associés au schéma temporaire AWR_STAGE (possibilité de choisir d’autres tablespaces si on veut faire compliqué).

 

Le chargement s’exécute et on voit les informations suivantes à l’écran :

… Creating AWR_STAGE user

|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Loading the AWR data from the following
| directory/file:
| /oradata/AWRs/
| SIN_awrdat_21639_21663.dmp
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
| *** AWR Load Started …
|
| This operation will take a few moments. The
| progress of the AWR load operation can be
| monitored in the following directory/file:
| /oradata/AWRs/
| SIN_awrdat_21639_21663.log

|

… Dropping AWR_STAGE user

End of AWR Load

 

Il ne reste plus qu’à créer des rapports AWR sur la base cible :

La base cible contient donc maintenant des clichés AWR provenant d’autres bases (en plus de ses propres clichés).

Pour faire des rapports AWR issues de base autres que la base courante il ne faut plus utiliser le script awrrpt.sql mais le script awrrpti.sql.

Ce script permet de faire un rapport AWR en choisissant une base et une instance particulières :

SQL> @?/rdbms/admin/awrrpti

 

Et répondre aux questions qui suivent :

Enter value for report_type:     <RETURN> pour un rapport en HTML

 

Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DB Id Inst Num DB Name Instance Host
———— ——– ———— ———— ————
3428713658 1 SVISPAI SVISPAI sinpai5
3477309909 2 SVISON SVISON2 odax71
* 3477309909 1 SVISON SVISON1 odax70

Enter value for dbid:

–> entrer par exemple 3428713658 pour avoir des rapports sur la base en première ligne (la base avec * est la base courante et par défaut).

 

Enter value for inst_num:

–> Entrer 1 pour l’instance 1 de la base choisie ci-dessus

Enter value for num_days:

–> Entrer par exemple 30 pour avoir la liste des clichés des 30 derniers jours

Enter value for begin_snap:

–> Indiquer le numéro N1  du 1er cliché

Enter value for end_snap:

–> Indiquer le numéro N2  du 2ème cliché

Enter value for report_name: <RETURN> pour accepter le nom par défaut awrrpt_1_N1_N2.html

… Le rapport est alors généré.

 

Faire un rapport différentiel entre 2 périodes de 2 bases différentes :

Le script @?/rdbms/admin/awrddrpi.sql est intéressant dans le cadre d’une base contenant des clichés AWR de différentes bases : il permet de regarder les différences entre la charge de 2 instances de 2 bases différentes sur un même rapport.

Il pose les mêmes questions que awrrpti.sql mais a besoin de 4 numéros de clichés (2 pour la 1ère instance, 2 pour la 2ème), voici un résumé des questions :

SQL> @?/rdbms/admin/awrddrpi.sql

Enter value for report_type: <RETURN> pour html

Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DB Id Inst Num DB Name Instance Host
———— ——– ———— ———— ————
7263310741 1 SVISTP SVISTP odax70
* 3435470313 2 SVISON SVISON2 odax71
3435470313 1 SVISON SVISON1 odax70

 

Note : la base SVISON est ici une base RAC, c’est pourquoi elle possède 2 lignes (1 ligne par instance).

Enter value for dbid: 7263310741
Enter value for inst_num: 1

Enter value for num_days: 1

–> La liste des clichés du dernier jour s’affiche

Enter value for begin_snap: 5
Enter value for end_snap: 6

–> A nouveau la liste des bases ayant des clichés AWR dans cette base s’affiche :

DB Id Inst Num DB Name Instance Host
———— ——– ———— ———— ————
7263310741 1 SVISTP SVISTP odax70
* 3435470313 2 SVISON SVISON2 odax71
3435470313 1 SVISON SVISON1 odax70

Enter value for dbid2: 3435470313
Enter value for inst_num2: 1
–> On choisit par exemple l’autre base et l’instance 1

Enter value for num_days2: 1

–> La liste des clichés du dernier jour s’affiche

Enter value for begin_snap2: 76
Enter value for end_snap2: 77

Puis  <RETURN> pour accepter le nom par défaut du rapport et lancer son exécution.

 

Ouvrez le rapport AWR dans votre navigateur, vous verrez que chaque section contient maintenant les valeurs de chaque instance et leur différence. Il est alors très facile de voir ce qui a changé dans la charge entre ces 2 instances.

Dans le cas d’une migration ou de DBreplay, vous voyez tout de suite s’il y a une amélioration ou une régression des performances et où elle se situe.