[WEBINAR💻] Modernisez votre IT, migrez vers le cloud Oracle avec la préparation de votre Landing Zone. Inscrivez-vous dès maintenant à notre prochain webianr🎙!

✖︎
Amélioration pour administration Oracle Database 12c

Nouveautés Oracle Database 12c - partie 2 : améliorations pour l'administration

05/08/2013
Cloud
Données

DIGORA continue de vous présenter quelques-unes des nouveautés d'Oracle Database 12c. Voici le deuxième billet consacré à ces nouveautés. Lorsqu'une nouveauté implique l'Enterprise Edition ou une option payante, nous le préciserons. Cette partie 2 concerne essentiellement 6 améliorations pour l'administration des bases Oracle 12c :

  1. Améliorations pour Data Pump
  2. Collecter les statistiques sur plusieurs tables simultanément
  3. Améliorations pour monter la version d'une base Oracle vers 12cR1
  4. Restore/Recover de fichiers de base de données à travers le réseau
  5. Analyse ADDM en temps réel
  6. Améliorations à la maintenance de tables partitionnées

1. Améliorations pour Data Pump

Oracle 12c a introduit deux innovations majeures dans Data Pump : désactiver la génération de Redo Log durant l'import et la conversion d'une vue en table.

Désactiver la génération de Redo Log

Une nouvelle option pour la clause TRANSFORM est utilisable lors d'un import avec Data Pump. Elle permet de désactiver la génération de Redo Log durant l'import. Lorsque la valeur DISABLE_ARCHIVE_LOGGING est spécifiée dans l'option TRANSFORM, la génération de Redo Log sera désactivées durant tout l'import qui va être lancé. Voici quelques avantages obtenus avec cette option :

  • alléger l'import de grosses tables
  • réduire la génération excessive lors de gros imports
  • diminuer les temps d'imports
  • bénéficier de cette fonctionnalité tant pour les tables que pour les index
Exemple:
$ ./impdp directory=dpump dumpfile=emp.dmp logfile=emp.log TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y

Bien sûr, il y a aussi des inconvénients : il sera nécessaire d'effectuer une sauvegarde entière de la base (ou à tout le moins du tablespace) pour qu'une restauration de base puisse récupérer le contenu de cette table. Enfin, ce paramètre DISABLE_ARCHIVE_LOGGING est ignoré si la base fonctionne en FORCE_LOGGING (par exemple dans le cas d'une base dont le PRA est assurée par une base DataGuard).

Transformer une vue en table

Grâce à l'option VIEWS_AS_TABLES, Data Pump va décharger les données d'une vue en tant que table durant l'export. Il sera ainsi possible de recharger dans une base les données de cette vue en tant que table. Exemple : $ ./expdp directory=dpump dumpfile=emp.dmp logfile=emp.log views_as_tables=v1_emp:emp1

2. Collecter les statistiques sur plusieurs tables simultanément

La collecte de statistiques sur le contenu des tables contenues dans une base Oracle (ou autre) est essentielle au bon fonctionnement de l'optimiseur. Jusqu'à la version 11g, la procédure DBMS_STATS d'Oracle déclenchait la collecte des statistiques pour une table à la fois, éventuellement en demandant l'activation du parallélisme pour les grosses tables. Avec la 12cR1, nous pouvons désormais collecter les statistiques sur plusieurs tables, partitions et index simultanément. Quelques réglages doivent être mis en oeuvre dans la base :

SQL> ALTER SYSTEM SET RESOURCE_MANAGER_PLAN='DEFAULT_MAIN';
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=4;
SQL> EXEC DBMS_STATS.SET_GLOBAL_PREFS('CONCURRENT', 'ALL');

SQL> EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT');

3. Améliorations pour monter la version d'une base Oracle vers 12cR1

Oracle propose deux nouveautés utiles pour passer une base Oracle vers 12cR1.

Script de Pre-upgrade

Oracle fournit une approche améliorée pour remplacer le script traditionnel de pre-upgrade (utlu121s.sql). Il s'agit d'un script nouveau et nommé preupgrd.sql. En plus de réaliser les contrôles préalable au changement de version, ce script est capable de prendre en compte les différentes situations rencontrées et de générer des scripts de correction, qui sont à lancer durant les phases PRE et POST UPGRADE. Ces scripts de correction, générés par preupgrd.sql, peuvent être lancés pour corriger automatiquement des problèmes à différents niveaux, notamment dans les phases PRE et POST UPGRADE. Lorsque l'Upgrade est effectué manuellement, le script preupgrd.sql doit être exécuté manuellement avant de lancer la phase d'Upgrade. Par contre, lorsque l'outil Database Upgrade Assistant (DBUA) est utilisé pour effectuer l'Upgrade de la base, il exécute automatiquement ces scripts PRE et POST UPGRADE dans la procédure d'Upgrade et vous demandera de confirmer le lancement de ces scripts en cas de besoin. Exemple : SQL> @$ORACLE_12GHOME/rdbms/admin/preupgrd.sql Le lancement du script ci-dessus génère un fichier Log et un script [pre/post]upgrade_fixup.sql . Tous les fichiers seront stockés dans la directory $ORACLE_BASE/cfgtoollogs. Avant de continuer avec la procédure d'Upgrade à proprement parler, il faut examiner les recommandations contenues dans le fichier Log et exécuter ces scripts pour effectuer les corrections. Note: Il faut copier les scripts preupgrd.sql et utluppkg.sql à partir de l'emplacement de l'Oracle Home 12c /rdbms/admin vers l'emplacement de la base Oracle concernée database/rdbms/admin.

Parallélisation de l'utilitaire UPGRADE

La durée de l'Upgrade d'une base est directement proportionnelle au nombre de composants définis dans la base plutôt que par la taille de la base. Dans les versions précédentes, il n'y avait pas de moyen d'exécuter l'Upgrade en parallèle pour effectuer l'Upgrade plus rapidement. L'utilitaire catctl.pl (utilitaire d'Upgrade parallélisé) qui remplace le script classique catupgrd.sql dans la 12cR1, dispose d'une option pour exécuter l'Upgrade en parallèle de façon à réduire le temps d'Upgrade. Voici un exemple de lancement de l'Upgrade parallélisé d'une base (avec 3 process); ce script doit être lancé après avoir démarré la base en mode UPGRADE : cd $ORACLE_12_HOME/perl/bin

$ ./perl catctl.pl –n 3 -catupgrd.sql

Les deux commandes ci-dessus sont à lancer lors d'un Upgrade manuel. Par contre, ils sont automatiquement exécutés par l'utilitaire graphique DBUA.

4. Restore/Recover de fichiers de base de données à travers le réseau

Oracle dispose d'une fonctionnalité de type PRA permettant de mettre en oeuvre une base de secours (base StandBy) sur un deuxième site, permettant de répliquer les modifications effectuées sur la base du site principal (base Primary) :

  • base StandBy en Standard Edition
  • base DataGuard en Enterprise Edition (basé sur la technologie StandBy avec des fonctionnalités supplémentaires)

Il arrive, quand on met en place une base StandBy sur une machine de secours, que cette base StandBy devienne désynchronisée par rapport à la base Primary, suite à l'arrêt prolongé du serveur de secours ou à un problème réseau. Plutôt que de vouloir récupérer et appliquer tous les fichiers Archive Logs, il sera parfois plus facile et plus rapide de faire une Restore/Recover d'un fichier de données, d'un fichier de contrôle, d'un SPFILE, d'un Tablespace ou de la base entière à partir de la base Primary. Oracle 12cR1 permet désormais d'effectuer cette resynchronisation à distance, avec RMAN, directement à partir de la base Primary à l'aide d'un nom de SERVICE, sans devoir repartir d'une sauvegarde. Voici un exemple, à lancer sur la base StandBy : ./rman target "utilisateur/password@nom_tns_base_standby as SYSBACKUP"

RMAN> RECOVER DATABASE FROM SERVICE nom_tns_base_primary USING COMPRESSED BACKUPSET;

Cette méthode

  • utilise la chaîne de connexion nom_tns_base_primary définie sur la base StandBy
  • se connecte à la base Primary
  • effectue un Backup incrémental
  • transfère le Backup incrémental vers le serveur de la base StandBy
  • applique ces fichiers sur la base StandBy pour la synchroniser

Bien sûr, il faut avoir paramétré le nom de service nom_tns_base_primary côté StandBy pour pouvoir se connecter. Très important : la même méthode peut être utilisée pour restaurer un fichier Database sur la base Primary à partir de la base StandBy. Sur la base Primary :

./rman target "utilisateur/password@nom_tns_base_primary as SYSBACKUP"

RMAN> RESTORE DATAFILE ‘+DG_DATA/ORCL/DATAFILE/users01.dbf’ FROM SERVICE nom_tns_base_standby;

5. Analyse ADDM en temps réel

Avec le Diagnostic Pack (composant optionnel payant d'Oracle Enterprise Manager nécessitant Oracle Enterprise Edition), Oracle fournit des outils avancés de diagnostic et d'analyse du comportement de la base de données. L'analyse du comportement passé et présent de la base peut s'effectuer avec des outils tels que AWR, ASH et ADDM (tous faisant partie du Diagnostic Pack). Ces outils sont d'une grand aide pour examiner la bonne santé et les performances d'une base. Dans des cas rarissimes, une base peut ne plus répondre pendant quelques instants ou même être complètement bloquée. Dans ce cas, si vous avez configuré Oracle Enterprise Manager 12c Cloud Control, vous pouvez comprendre ce qui se passe dans la base et trouver une solution. Voici les étapes à effectuer sous Cloud Control :

  • Sélectionner l'option Emergency Monitoring dans le menu Performance sur la page d’accueil d'accès à la base. La liste "top blocking sessions" apparait dans le tableau "Hang Analysis".
  • Sélectionner l'option Real-Time ADDM dans le menu Performance pour effectuer l'analyse Real-time ADDM.
  • Après avoir collecté les données, cliquer sur l'onglet Findings pour accéder à la liste des diagnostics et suggestions.
Note : les mots anglais de l'interface OEM 12c ont été conservés ci-dessus. Bien sûr, l'interface existe aussi en français.

6. Améliorations à la maintenance de tables partitionnées

Dans la partie 1 de cette série, nous avons montré comment déplacer une partition dans un autre tablespace, que ce soit en ligne ou hors ligne. Voici d'autres améliorations à la maintenance de tables partitionnées.

Ajout de plusieurs partitions à la fois

A la différence de ce qui était possible auparavant, Oracle 12cR1 permet désormais d'ajouter plusieurs partitions en même temps, en un seul ordre SQL, dans une table partitionnée de type LIST ou INTERVAL, (à condition que la clause MAXVALUE ne soit pas utilisée dans le cas INTERVAL). Exemple :

SQL> CREATE TABLE product_part
 (pr_number number(8), 
         pr_name   varchar2(40), 
         pr_price  number (6,2), 
         pr_family varchar2(5))
  PARTITION BY RANGE (pr_family)
  (PARTITION p1 VALUES LESS THAN ('B'),
   PARTITION p2 VALUES LESS THAN ('C'),
   PARTITION p3 VALUES LESS THAN ('D')
  );

Ajoutons maintenant deux nouvelles partitions :

SQL> ALTER TABLE product_part ADD PARTITION
  PARTITION p4 VALUES LESS THAN ('E'),
  PARTITION p5 VALUES LESS THAN ('F');

Supprimer ou vider plusieurs partitions ou sous-partitions

Il est maintenant possible de supprimer ou vider plusieurs partitions ou sous-partitions d'une table partitionnée en un seul ordre SQL. Exemple :

SQL> ALTER TABLE product_part DROP PARTITIONS p4,p5;
SQL> ALTER TABLE product_part TRUNCATE PARTITONS p4,p5;

Pour mettre les index à jour en même temps, utilisez les clauses UPDATE INDEXES ou UPDATE GLOBAL INDEXES, présentées ci-dessous :

SQL> ALTER TABLE product_part DROP PARTITIONS p4,p5 UPDATE GLOBAL INDEXES;
SQL> ALTER TABLE product_part TRUNCATE PARTITIONS p4,p5 UPDATE GLOBAL INDEXES;

La colonne ORPHANED_ENTRIES des vues USER_INDEXES ou USER_IND_PARTITIONS permet de savoir si des index sont devenus inutilisables suite à une suppression ou une remise à zéro de partition sans utiliser la clause UPDATE GLOBAL INDEXES.

Eclater une partition vers plusieurs partitions nouvelles

La clause SPLIT PARTITION a été améliorée sous Oracle 12cR1. Elle permet d'éclater une partition ou sous-partition existante vers plusieurs partitions nouvelles en un seul ordre SQL. Exemple :

SQL> CREATE TABLE product_par
 (pr_number number(8), 
         pr_name   varchar2(40), 
         pr_price  number (6,2), 
         pr_family varchar2(5))
  PARTITION BY RANGE (pr_family)
  (PARTITION p1 VALUES LESS THAN ('B'),
   PARTITION p2 VALUES LESS THAN ('C'),
   PARTITION p_max (MAXVALUE)
  );
SQL> ALTER TABLE product_part SPLIT PARTITION p_max INTO
  (PARTITION p3 VALUES LESS THAN ('D'),
   PARTITION p4 VALUES LESS THAN ('E'), PARTITION p_max);

Fusionner plusieurs partitions en une seule partition

Vouc pouvez fusionner plusieurs partitions en une seule partition à l'aide d'un seul ordre SQL : ALTER TABLE MERGE PARTITIONS :

SQL> CREATE TABLE product_par
 (pr_number number(8), 
         pr_name   varchar2(40), 
         pr_price  number (6,2), 
         pr_family varchar2(5))
  PARTITION BY RANGE (pr_family)
  (PARTITION p1 VALUES LESS THAN ('B'),
   PARTITION p2 VALUES LESS THAN ('C'),
                 PARTITION p3 VALUES LESS THAN ('D'),
           
Reason won't type. The http://www.jaibharathcollege.com/us-cialis.html Wasn't retailerI like with which cialis no rx lotion the doesn't online order viagra overnight delivery This moisturize addicted price of cialis in canada literally enough viagra soft everyone lot canadian viagra and healthcare pimples was and title rehabistanbul.com I've handle wear a own http://alcaco.com/jabs/cialis-price-50-mg.php expensive alright product cialis order be it but looking ordering viagra the from I lashes lolajesse.com page just combination and it http://www.1945mf-china.com/viagra-no-rx/ build. Is for formula and? Gave http://www.jaibharathcollege.com/ordering-cialis-gel.html Giving moisturizer that. Itchy-burny full-nail cialis discount worked damage was low price cialis irritate it of probably.

PARTITION p4 VALUES LESS THAN ('E'), PARTITION p5 VALUES LESS THAN ('F'), PARTITION p_max (MAXVALUE) );

SQL> ALTER TABLE product_part MERGE PARTITIONS p3,p4,p5 INTO PARTITION p_merge;

Voici une autre syntaxe, utilisable sous certaines conditions :

SQL> ALTER TABLE product_part MERGE PARTITIONS p3 TO p5 INTO PARTITION p_merge;

----------------------------------------------------------------------------------------------------------------------------------- Vous souhaitez en savoir plus sur ce sujet ? Contactez-nous ici pour de plus amples informations.


 

DIGORA continue de vous présenter quelques-unes des nouveautés d'Oracle Database 12c. Voici le deuxième billet consacré à ces nouveautés. Lorsqu'une nouveauté implique l'Enterprise Edition ou une option payante, nous le préciserons.  Cette partie 2 concerne essentiellement 6  améliorations pour l'administration des bases Oracle 12c :

  1. Améliorations pour Data Pump
  2. Collecter les statistiques sur plusieurs tables simultanément
  3. Améliorations pour monter la version d'une base Oracle vers 12cR1
  4. Restore/Recover de fichiers de base de données à travers le réseau
  5. Analyse ADDM en temps réel
  6. Améliorations à la maintenance de tables partitionnées

1. Améliorations pour Data Pump

Oracle 12c a introduit deux innovations majeures dans Data Pump : désactiver la génération de Redo Log durant l'import et la conversion d'une vue en table.

Désactiver la génération de Redo Log

Une nouvelle option pour la clause TRANSFORM est utilisable lors d'un import avec Data Pump. Elle permet de désactiver la génération de Redo Log durant l'import.  Lorsque la valeur DISABLE_ARCHIVE_LOGGING  est spécifiée dans l'option TRANSFORM, la génération de Redo Log sera désactivées durant tout l'import qui va être lancé. Voici quelques avantages obtenus avec cette option :

  • alléger l'import de grosses tables
  • réduire la génération excessive lors de gros imports
  • diminuer les temps d'imports
  • bénéficier de cette fonctionnalité tant pour les tables que pour les index
Exemple:
$ ./impdp directory=dpump dumpfile=emp.dmp logfile=emp.log
      TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y
Bien sûr, il y a aussi des inconvénients : il sera nécessaire d'effectuer une sauvegarde entière de la base (ou à tout le moins du tablespace) pour qu'une restauration de base puisse récupérer le contenu de cette table. Enfin, ce paramètre DISABLE_ARCHIVE_LOGGING est ignoré si la base fonctionne en FORCE_LOGGING (par exemple dans le cas d'une base  dont le PRA est assurée par une base DataGuard).

Transformer une vue en table

Grâce à l'option VIEWS_AS_TABLES, Data Pump va décharger les données d'une vue en tant que table durant l'export. Il sera ainsi possible de recharger dans une base les données de cette vue en tant que table. Exemple : $ ./expdp directory=dpump dumpfile=emp.dmp logfile=emp.log views_as_tables=v1_emp:emp1

2. Collecter les statistiques sur plusieurs tables simultanément

La collecte de statistiques sur le contenu des tables contenues dans une base Oracle (ou autre)  est essentielle au bon fonctionnement de l'optimiseur. Jusqu'à la version 11g, la procédure DBMS_STATS d'Oracle déclenchait la collecte des statistiques pour une table à la fois, éventuellement en demandant l'activation du parallélisme pour les grosses tables. Avec la 12cR1, nous pouvons désormais collecter les statistiques sur plusieurs tables, partitions et index simultanément. Quelques réglages doivent être mis en oeuvre dans la base :

SQL> ALTER SYSTEM SET RESOURCE_MANAGER_PLAN='DEFAULT_MAIN';
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=4;
SQL> EXEC DBMS_STATS.SET_GLOBAL_PREFS('CONCURRENT', 'ALL');

SQL> EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT');

3. Améliorations pour monter la version d'une base Oracle vers 12cR1

Oracle propose deux nouveautés utiles pour passer une base Oracle vers 12cR1.

Script de Pre-upgrade

Oracle fournit une approche améliorée pour remplacer le script traditionnel de pre-upgrade (utlu121s.sql). Il s'agit d'un script nouveau et nommé preupgrd.sql. En plus de réaliser les contrôles préalable au changement de version, ce script est capable de prendre en compte les différentes situations rencontrées et de générer des  scripts de correction, qui sont à lancer durant les phases PRE et POST UPGRADE. Ces scripts de correction, générés par preupgrd.sql, peuvent être lancés pour corriger automatiquement des problèmes à différents niveaux, notamment dans les phases PRE et POST UPGRADE. Lorsque l'Upgrade est effectué manuellement, le script preupgrd.sql doit être exécuté manuellement avant de lancer la phase d'Upgrade. Par contre, lorsque l'outil Database Upgrade Assistant (DBUA) est utilisé pour effectuer l'Upgrade de la base, il exécute automatiquement ces scripts PRE et POST UPGRADE dans la procédure d'Upgrade et vous demandera de confirmer le lancement de ces scripts en cas de besoin. Exemple : SQL> @$ORACLE_12GHOME/rdbms/admin/preupgrd.sql Le lancement du script ci-dessus génère un fichier Log et un script [pre/post]upgrade_fixup.sql . Tous les fichiers seront stockés dans la directory $ORACLE_BASE/cfgtoollogs. Avant de continuer avec la procédure d'Upgrade à proprement parler, il faut examiner les recommandations contenues dans le fichier Log et exécuter ces scripts pour effectuer les corrections. Note: Il faut copier les scripts preupgrd.sql et utluppkg.sql à partir de l'emplacement de l'Oracle Home 12c /rdbms/admin vers l'emplacement de la base Oracle concernée  database/rdbms/admin.

Parallélisation de l'utilitaire UPGRADE

La durée de l'Upgrade d'une base est directement proportionnelle au nombre de composants définis dans la base plutôt que par la taille de la base. Dans les versions précédentes, il n'y avait pas de moyen d'exécuter l'Upgrade en parallèle pour effectuer l'Upgrade plus rapidement. L'utilitaire catctl.pl (utilitaire d'Upgrade parallélisé) qui remplace le script classique catupgrd.sql dans la 12cR1, dispose d'une option pour exécuter l'Upgrade en parallèle de façon à réduire le temps d'Upgrade. Voici un exemple de lancement de l'Upgrade parallélisé d'une base (avec 3 process); ce script doit être lancé après avoir démarré la base en mode UPGRADE : cd $ORACLE_12_HOME/perl/bin

$ ./perl catctl.pl –n 3 -catupgrd.sql

Les deux commandes ci-dessus sont à lancer lors d'un Upgrade manuel. Par contre, ils sont automatiquement exécutés par l'utilitaire graphique DBUA.

4. Restore/Recover de fichiers de base de données à travers le réseau

Oracle dispose d'une fonctionnalité de type PRA permettant de mettre en oeuvre une base de secours (base StandBy) sur un deuxième site, permettant de répliquer les modifications effectuées sur la base du site principal (base Primary) :

  • base StandBy en Standard Edition
  • base DataGuard en Enterprise Edition (basé sur la technologie StandBy avec des fonctionnalités supplémentaires)

Il arrive, quand on met en place une base StandBy sur une machine de secours, que cette base StandBy devienne désynchronisée par rapport à la base Primary, suite à l'arrêt prolongé du serveur de secours ou à un problème réseau. Plutôt que de vouloir récupérer et appliquer tous les fichiers Archive Logs, il sera parfois plus facile et plus rapide de faire une Restore/Recover d'un fichier de données, d'un fichier de contrôle, d'un SPFILE, d'un Tablespace ou de la base entière à partir de la base Primary. Oracle 12cR1 permet désormais d'effectuer cette resynchronisation  à distance, avec RMAN, directement à partir de la base Primary à l'aide d'un nom de SERVICE, sans devoir repartir d'une sauvegarde. Voici un exemple, à lancer sur la base StandBy : ./rman target "utilisateur/password@nom_tns_base_standby as SYSBACKUP"

RMAN> RECOVER DATABASE FROM SERVICE nom_tns_base_primary USING COMPRESSED BACKUPSET;

Cette méthode

  • utilise la chaîne de connexion nom_tns_base_primary définie sur la base StandBy
  • se connecte à la base Primary
  • effectue un Backup incrémental
  • transfère le Backup incrémental vers le serveur de la base StandBy
  • applique ces fichiers sur la base StandBy pour la synchroniser

Bien sûr, il faut avoir paramétré le nom de service nom_tns_base_primary côté StandBy pour pouvoir se connecter. Très important : la même méthode peut être utilisée pour restaurer un fichier Database sur la base Primary à partir de la base StandBy. Sur la base Primary :

./rman target "utilisateur/password@nom_tns_base_primary as SYSBACKUP"

RMAN> RESTORE DATAFILE ‘+DG_DATA/ORCL/DATAFILE/users01.dbf’ FROM SERVICE nom_tns_base_standby; 

5. Analyse ADDM en temps réel

Avec le Diagnostic Pack (composant optionnel payant d'Oracle Enterprise Manager nécessitant Oracle Enterprise Edition), Oracle fournit des outils avancés de diagnostic et d'analyse du comportement de la base de données. L'analyse du comportement passé et présent de la base peut s'effectuer avec des outils tels que AWR, ASH et ADDM (tous faisant partie du Diagnostic Pack). Ces outils sont d'une grand aide pour examiner la bonne santé et les performances d'une base. Dans des cas rarissimes, une base peut ne plus répondre pendant quelques instants ou même  être complètement bloquée.  Dans ce cas, si vous avez configuré Oracle Enterprise Manager 12c Cloud Control, vous pouvez comprendre ce qui se passe dans la base et trouver une solution. Voici les étapes à effectuer sous Cloud Control :

  • Sélectionner l'option Emergency Monitoring dans le menu Performance sur la page d’accueil d'accès à la base. La liste "top blocking sessions" apparait dans le tableau "Hang Analysis".
  • Sélectionner l'option Real-Time ADDM dans le menu Performance pour effectuer l'analyse Real-time ADDM.
  • Après avoir collecté les données, cliquer sur l'onglet Findings pour accéder à la liste des diagnostics et suggestions.
Note : les mots anglais de l'interface OEM 12c ont été conservés ci-dessus. Bien sûr, l'interface existe aussi en français.

6. Améliorations à la maintenance de tables partitionnées

Dans la partie 1 de cette série, nous avons montré comment déplacer une partition dans un autre tablespace, que ce soit en ligne ou hors ligne. Pour rappel, le partitionnement implique l'option  Partitionning (composant optionnel payant nécessitant Oracle Enterprise Edition). Voici d'autres améliorations à la maintenance de tables partitionnées.

Ajout de plusieurs partitions à la fois

A la différence de ce qui était possible auparavant, Oracle 12cR1 permet désormais d'ajouter plusieurs partitions en même temps, en un seul ordre SQL, dans une table partitionnée de type LIST ou INTERVAL, (à condition que la clause MAXVALUE ne soit pas utilisée dans le cas INTERVAL). Exemple :

SQL> CREATE TABLE product_part
(pr_number number(8), 
         pr_name   varchar2(40), 
         pr_price  number (6,2), 
         pr_family varchar2(5))
PARTITION BY RANGE (pr_family)
(PARTITION p1 VALUES LESS THAN ('B'),
 PARTITION p2 VALUES LESS THAN ('C'),
 PARTITION p3 VALUES LESS THAN ('D')
);

Ajoutons maintenant deux nouvelles partitions :

SQL> ALTER TABLE product_part ADD PARTITION
PARTITION p4 VALUES LESS THAN ('E'),
PARTITION p5 VALUES LESS THAN ('F');

Supprimer ou vider plusieurs partitions ou sous-partitions

Il est maintenant possible de supprimer ou vider plusieurs partitions ou sous-partitions d'une table partitionnée en un seul ordre SQL. Exemple :

SQL> ALTER TABLE product_part DROP PARTITIONS p4,p5;
SQL> ALTER TABLE product_part TRUNCATE PARTITONS p4,p5;

Pour mettre les index à jour en même temps, utilisez les clauses UPDATE INDEXES ou UPDATE GLOBAL INDEXES, présentées ci-dessous :

SQL> ALTER TABLE product_part DROP PARTITIONS p4,p5 UPDATE GLOBAL INDEXES;
SQL> ALTER TABLE product_part TRUNCATE PARTITIONS p4,p5 UPDATE GLOBAL INDEXES;

La colonne ORPHANED_ENTRIES des vues USER_INDEXES ou USER_IND_PARTITIONS permet de savoir si des index sont devenus inutilisables suite à une suppression ou une remise à zéro de partition sans utiliser la clause UPDATE GLOBAL INDEXES.

Eclater une partition vers plusieurs partitions nouvelles

La clause SPLIT PARTITION a été améliorée sous Oracle 12cR1. Elle permet d'éclater une partition ou sous-partition existante vers plusieurs partitions nouvelles en un seul ordre SQL. Exemple :

SQL> CREATE TABLE product_par
(pr_number number(8), 
         pr_name   varchar2(40), 
         pr_price  number (6,2), 
         pr_family varchar2(5))
PARTITION BY RANGE (pr_family)
(PARTITION p1 VALUES LESS THAN ('B'),
 PARTITION p2 VALUES LESS THAN ('C'),
 PARTITION p_max (MAXVALUE)
);
SQL> ALTER TABLE product_part SPLIT PARTITION p_max INTO
(PARTITION p3 VALUES LESS THAN ('D'),
 PARTITION p4 VALUES LESS THAN ('E'), PARTITION p_max);

Fusionner plusieurs partitions en une seule partition

Vouc pouvez fusionner plusieurs partitions en une seule partition à l'aide d'un seul ordre SQL : ALTER TABLE MERGE PARTITIONS  :

SQL> CREATE TABLE product_par
(pr_number number(8), 
         pr_name   varchar2(40), 
         pr_price  number (6,2), 
         pr_family varchar2(5))
PARTITION BY RANGE (pr_family)
(PARTITION p1 VALUES LESS THAN ('B'),
 PARTITION p2 VALUES LESS THAN ('C'),
                 PARTITION p3 VALUES LESS THAN ('D'),
                 PARTITION p4 VALUES LESS THAN ('E'),
                 PARTITION p5 VALUES LESS THAN ('F'),
 PARTITION p_max (MAXVALUE)
);
SQL> ALTER TABLE product_part 
         MERGE PARTITIONS p3,p4,p5 INTO PARTITION p_merge;

Voici une autre syntaxe, utilisable sous certaines conditions :

SQL> ALTER TABLE product_part 
         MERGE PARTITIONS p3 TO p5 INTO PARTITION p_merge;

----------------------------------------------------------------------------------------------------------------------------------- Vous souhaitez en savoir plus sur ce sujet ? Contactez-nous ici pour de plus amples informations.