Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

Vous n'avez pas encore de compte Developpez.com ? L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Developpez.com

Oracle

Choisissez la catégorie, puis la rubrique :

Sommaire > Administration
        1.1. Niveau 1(36)
                Coalescer tous les tablespaces de la base
                Liste des plus grandes consommations CPU
                Informations sur la base
                Liste des fichiers de contrôle de la base
                Liste des tablespaces par défaut
                Liste des directories de la base
                Liste des segments non extensibles
                Classement des tablespace par consommation d'E/S
                Classement des évènement d'attente d'E/S de la base
                Liste des verrous de la base
                Liste des paramètres de la base (init.ora)
                Liste des profils de la base
                Liste des segments de rollback de la base
                Liste des REDO LOGS de la base
                Liste des rôles attribués de la base
                Liste des rôles attribués aux rôles de la base
                Liste des rôles utilisateurs de la base
                Liste des rôles utilisateurs attribués dans la base
                Liste des rôles utilisateurs attribués aux rôles de la base
                Liste des rôles de la base
                Liste des évènements de la session
                Liste des sessions actives de la base
                Occupation mémoire de la SGA
                Liste des évènements système
                Informations sur les tablespaces
                Liste des déclencheurs (triggers) de la base
                Liste des utilisateurs de la base
                Liste des activités du segment de rollback de la base
                Mise hors ligne des segments de rollback
                Remise en ligne des segments de rollback
                Mise hors ligne des tablespaces de la base
                Remise en ligne des tablespaces de la base
                Désactivation de tous les déclencheurs (triggers) de la base
                Activation de tous les déclencheurs (triggers) de la base
                Liste des types d'objets des tablespaces
                Infos de l'instance et de la base
        Script d'administration NT oracle 8i et 9i
        Comment obtenir la liste des objets présents dans le BUFFER CACHE ?
        Comment afficher la disposition des segments dans un tablespace
        Comment réaliser un export compressé



Auteur : Laurent Dardenne
Version : 26/02/2005
Page de l'auteur
Téléchargez le zip
Script d'administration NT oracle 8i et 9i
Cet ensemble de scripts NT est une compilation de différents automatismes que j'ai réalisé lors d'une formation DBA Oracle.
J'ai utilisé les possibilités offertes par les scripts NT, ne possédant pas d'outil d'administration Oracle plus évolué et ai fait en sorte d'utiliser le moins possible les évolutions des commandes sous Windows XP.
Ces scripts pourront aider dans un premier temps les débutants sous Oracle sur la plateforme Windows.
Ces scripts NT contiennent toutes les astuces que j'ai pu glanées au cours de mes différents projets.
Ils demandent un minimum de compétences sur les batchs sous NT.

Ces scripts NT d'administration Oracle premier niveau permettent de :

  • Recenser tous les services Oracle installés sur une machine
  • Retrouver le statut de chaque service ( démarré,..)
  • Arrêter/démarrer les services Oracle en mémorisant leur statut avant l'opération.
  • Retrouver toutes les instances Oracle déclarés sur une machine.
  • Retrouver le statut de chaque instances ( Mount,Open,..)
  • Retrouver les HOME (versions d'Oracle ) Oracle déclarés sur une machine.
  • Déclarer dynamiquement, via la base registre, les variables Oracle ORACLE_HOME,etc
  • ( si plusieurs versions d'Oracle existent, on peut préciser sur laquelle pointer)
  • Retrouver, via la base registre, le statut de démarrage du service d'une instance ( cf ORADIM ).
  • ...

Testé en totalité sur une configuration avec XP ( sans SP1) + Oracle 9i R2 + Oracle 8.1.7.
Testé partiellement sur Windows 2000 + Oracle 8.1.7 + Oracle 9i R2.



Auteur : Lalystar
Version : 26/02/2005
Comment obtenir la liste des objets présents dans le BUFFER CACHE ?
Comment savoir quels objets sont actuellement dans le buffer cache ?

C'est intéressant de le savoir dans la mesure où si certains objets se retrouvent en permanence dans le buffer cache, il peut être intéressant de les placer dans le sous-buffer KEEP où ils auront tendance à persister plus longtemps
Ceci améliorera donc les performances des requêtes qui utilisent ces objets puisque les blocs seront trouvés directement dans le buffer (donc en mémoire).

La requête suivante affiche le contenu du buffer cache à l'instant t ainsi que le pourcentage du buffer cache occupé par l'objet :

SELECT b.owner, b.object_name, b.object_type, COUNT(*) blocks, ROUND(100 * RATIO_TO_REPORT t (COUNT t(*)) OVER(), 2) percent_cache FROM V$BH a, DBA_OBJECTS b WHERE b.object_id = a.objd GROUP BY b.owner, b.object_name, b.object_type ORDER BY 5 DESC
 
OWNER                OBJECT_NAME          OBJECT_TYPE            BLOCKS PERCENT_CACHE 
-------------------- -------------------- ------------------ ---------- ------------- 
SYS                  I_JOB_NEXT           INDEX                      38         39,58 
SYS                  C_OBJ#               CLUSTER                    34         35,42 
SYS                  C_TS#                CLUSTER                     4          4,17 
SYS                  C_USER#              CLUSTER                     4          4,17 
SYS                  I_SYSAUTH1           INDEX                       3          3,13 
SYS                  I_OBJ1               INDEX                       2          2,08 
SYS                  OBJ$                 TABLE                       2          2,08 
SYS                  PROPS$               TABLE                       2          2,08 
SYS                  FILE$                TABLE                       1          1,04 
SYS                  I_FILE1              INDEX                       1          1,04 
SYS                  I_LINK1              INDEX                       1          1,04 
SYS                  I_USER1              INDEX                       1          1,04 
SYS                  SYSAUTH$             TABLE                       1          1,04 
SYS                  I_USER#              INDEX                       1          1,04 
SYS                  I_IND1               INDEX                       1          1,04

Auteur : Lalystar
Version : 26/02/2005
Comment afficher la disposition des segments dans un tablespace
Le script fourni affiche la disposition des segments (tables, indexes...) dans un tablespace donné, plus précisémment dans chaque datafile de ce tablespace.

SELECT file_id, block_id, blocks, owner||'.'||segment_name segment FROM SYS.DBA_EXTENTS WHERE tablespace_name = UPPER('<nom du tablespace>') UNION SELECT file_id, block_id, blocks, 'Free' FROM SYS.DBA_FREE_SPACE WHERE tablespace_name = UPPER('<nom du tablespace>') ORDER BY 1,2,3
 
   FILE_ID   BLOCK_ID     BLOCKS SEGMENT 
---------- ---------- ---------- --------------------------------------------------- 
         4          2        130 Free 
         4        132        260 U91295.OL_LI_DM_IDX2 
         4        392        260 U91295.OLD_LI_DAILYMAIL 
         4        652        260 U91295.OL_LI_DM_IDX2 
         4        912        260 U91295.OLD_LI_DAILYMAIL 
         4       1172        260 U91295.OLD_LI_DAILYMAIL 
... 
         9     382270        260 Free 
         9     382530        260 Free 
         9     382790        260 PPWEB.MMA_5_NORMALE
On voit donc qu'au début du tablespace (à partir du bloc 2), il y a un espace libre de 130 blocs...

Quel est l'intérêt à part d'un point de vue académique ?
Il arrive qu'on ait un tablespace qui ne contiennent quasimment rien et pour lequel on voudrait diminuer la taille d'un datafile (alter database datafile '...' resize ...). Mais, la commande échoue car l'espace n'est pas libre à la fin du datafile. Avec le script fourni, on voit quel segment occupe la position à la fin du datafile et on peut donc le déplacer dans un autre tablespace, puis faire le resize pour gagner de la place.

Dans l'exemple ci-dessus, la table PPWEB.MMA_5_NORMALE occupe la fin du datafile 9 ce qui nous empêche de faire un resize sur le datafile 9. On peut faire un alter table PPWEB.MMA_5_NORMALE move tablespace pour déplacer cette table dans un autre tablespace le temps de faire le resize du datafile 9.

C'est bien me direz-vous mais comment savoir l'espace maximum qu'on peut rogner sur un datafile ?
C'est ce que nous renvoie la requête suivante :

SELECT a.file_id, a.file_name file_name, CEIL( ( NVL( hwm,1 ) * blksize ) / 1024 / 1024 ) smallest, CEIL( blocks * blksize / 1024 / 1024 ) currsize, CEIL( blocks * blksize / 1024 / 1024 ) - CEIL( ( NVL( hwm,1) * blksize ) / 1024 / 1024 ) savings, 'alter database datafile ''' || file_name || ''' resize ' || CEIL( ( NVL( hwm,1) * blksize ) / 1024 / 1024 ) || 'm;' cmd FROM DBA_DATA_FILES a, ( SELECT file_id, MAX( block_id + blocks - 1 ) hwm FROM DBA_EXTENTS GROUP BY file_id ) b, ( SELECT TO_NUMBER( value ) blksize FROM V$PARAMETER WHERE name = 'db_block_size' ) WHERE a.file_id = b.file_id(+) AND CEIL( blocks * blksize / 1024 / 1024 ) - CEIL( ( NVL( hwm, 1 ) * blksize ) / 1024 / 1024 ) > 0 ORDER BY 5 desc
 
   FILE_ID                                                                      
----------                                                                      
FILE_NAME                                                                        
-------------------------------------------------------------------------------- 
  SMALLEST   CURRSIZE    SAVINGS                                                
---------- ---------- ----------                                                
CMD                                                                              
-------------------------------------------------------------------------------- 
         3                                                                      
/bnp/oradbf/CAPDEV/metro/RSK/temp/temp1RSKDEV.dbf                                
         3       1500       1497                                                
alter database datafile '/bnp/oradbf/CAPDEV/metro/RSK/temp/temp1RSKDEV.dbf' resi 
ze 3m;                                                                          
                                                                                
        13                                                                      
/bnp/oradbf/RSKDEV/data2/GRMQUA_WIP/data0001/wct_grmqua0001.dbf                  
         1        200        199                                                
alter database datafile '/bnp/oradbf/RSKDEV/data2/GRMQUA_WIP/data0001/wct_grmqua 
0001.dbf' resize 1m;                                                            
                                                                                
        11                                                                      
/bnp/oradbf/RSKDEV/data2/GRMDEV_STAGING/data0001/wct_grmdev0001.dbf              
         8        200        192
Si on regarde le premier datafile : sa taille actuelle est de 1500Mo (CURRSIZE), on peut le réduire jusqu'à 3Mo (SMALLEST) et donc gagner 1497Mo (SAVINGS). La colonne CMD nous donne la commande SQL à utiliser.

Pour rendre à César ce qui est à César, ces deux scripts ont été trouvés sur le site de Thomas KYTE (http://asktom.oracle.com).


Auteur : Orafrance
Version : 26/02/2005
Page de l'auteur
Comment réaliser un export compressé
Script shell d'export compressé en live (sans fichier dump sur disk) :

#!/bin/csh -vx setenv UID / # Définition du nom du dump setenv FILENAME exp.`date +%j_%Y`.dmp # Définition du pipe setenv PIPE /tmp/exp_tmp.dmp # Décommenter cette ligne pour générer un fichier multi-volume (ici de 500Mo) # setenv MAXSIZE 500m # Paramètre d'export setenv EXPORT_WHAT "full=y COMPRESS=n buffer=2000000" echo $FILENAME # Répertoire de stockage des exports cd /oracle/920/backups ls -l rm expbkup.log export.test exp.*.dmp* $PIPE # Création du pipe dans lequel sera le dump mknod $PIPE p date > expbkup.log ( gzip < $PIPE ) # | split -b $MAXSIZE - $FILENAME. & # Décommenter "| split -b $MAXSIZE $PIPE $FILENAME. &" pour générer un fichier multi-volume exp userid=$UID file=$PIPE $EXPORT_WHAT >>& expbkup.log date >> expbkup.log # Vérification de l'export date > export.test cat `echo $FILENAME.* | sort` | gunzip > $PIPE & #cat `echo $FILENAME.* | sort` > $PIPE & imp userid=$UID file=$PIPE show=y full=y >>& export.test date >> export.test tail expbkup.log tail export.test ls -l rm -f $PIPE


Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2004 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Contacter le responsable de la rubrique Oracle

Partenaire : Hébergement Web