IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Explications script sql


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 98
    Par défaut Explications script sql
    Bonjour à la communauté,

    Voilà, je dois reprendre la gestion d'une base oracle, mais je me trouve à utiliser notamment deux scripts. Pouvez-vous m'expliquer le fonctionnement de ces deux scripts. Je pense que cela est fait pour faire de la réorganisation. La base tourne sous oracle 9.0.2.1.0.

    Merci pour vos explications.

    Le premier pour la réorganisation des index.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    --
    -- Rebuild des index de l'utilisateur VITA
    --
    set serveroutput on
    set head off 
    set feedback off
    alter session set nls_date_format='dd/mm/yyyy hh24:mi:ss';
    whenever sqlerror exit 1
    column date_fmt noprint new_value x_date_fmt
    select to_char(sysdate,'YYYY_MM_DD') date_fmt from dual
    /
    spool C:\ComptesRendus\rebuild_idx_&&x_date_fmt..log
    select 'Début de traitement de réorganisation des index ',sysdate from dual;
    DECLARE
    CURSOR cur_sel_idx IS
    SELECT index_name FROM all_indexes where owner='VITA' and index_type='NORMAL';
    var_stmt VARCHAR2(2000);
    BEGIN
    FOR rec_idx IN cur_sel_idx LOOP
       BEGIN
          var_stmt := 'ALTER INDEX VITA.'||rec_idx.index_name||' rebuild tablespace VITAINDX ';
          EXECUTE IMMEDIATE (var_stmt);
       exception
       WHEN OTHERS THEN 
       dbms_output.put_line (' ERREUR :'||rec_idx.index_name||'  '||sqlerrm);
       END;
    END LOOP;
    END;
    /
    select index_name,status,owner from all_indexes where owner = 'VITA';
    select 'Fin de traitement de réorganisation des index  ',sysdate from dual;
    exit 0
    L'autre pour les tables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    set serveroutput on
    set head off 
    set feedback off
    ALTER SESSION SET NLS_DATE_FORMAT='dd/mm/yyyy hh24:mi:ss';
     
    -- On sort du script avec le code retour -1 si on rencontre une erreur.
    whenever sqlerror exit -1 
    -- Formatage de la date pour le nom du fichier LOG
    column date_fmt noprint new_value x_date_fmt
    select to_char(sysdate,'YYYY_MM_DD') date_fmt from dual
    /
    spool C:\ComptesRendus\rebuild_tab_&&x_date_fmt..log
    select 'Début du traitement de réorganisation des tables ',sysdate from dual;
    DECLARE
    CURSOR cur_sel_tab IS
    SELECT table_name,
           tablespace_name
    FROM   all_tables 
    WHERE  owner='VITA'
    and tablespace_name is not null
    and not exists (select 1 from all_tab_columns 
    	where all_tables.table_name = all_tab_columns.table_name
              and  all_tables.owner = all_tab_columns.owner
    	and data_type like 'LONG%' );
    var_stmt VARCHAR2(2000);
    cpt      NUMBER:= 0;
    BEGIN
    FOR rec_tab IN cur_sel_tab LOOP
       BEGIN
          var_stmt := 'ALTER TABLE VITA.'||rec_tab.table_name||' MOVE TABLESPACE '||rec_tab.tablespace_name;
          EXECUTE IMMEDIATE (var_stmt);
          cpt := cpt + 1;
       exception
       WHEN OTHERS THEN 
       DBMS_OUTPUT.PUT_LINE (' ERREUR :'||rec_tab.table_name||'  '||sqlerrm);
       END;
    END LOOP;
    DBMS_OUTPUT.PUT_LINE (' Nombre de table reconstruite :'||cpt);
    END;
    /
    select 'Fin du traitement de réorganisation des tables ',sysdate from dual;
    exit
    Y a-t-il un script sql qui pourrait me permettre de vérifier la fragmentation des tables et des indexes ?

    Merci pour vos conseils.

    Cordialement.

  2. #2
    Membre Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Par défaut
    Le script des indexes rebuilde chaque index, celui des tables réorganise chaque table (donc la "défragmente" au passage en quelque sorte)
    Par contre j'ose espérer que le script des table est lancé avant celui des indexes, car la réorganisation des tables entraine justement l'invalidation des indexes et leur rebuild est nécessaire derrière
    Sinon pour voir la fragmentation des objets, regarde la procédure dbms_space.space_usage
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 98
    Par défaut
    Citation Envoyé par scheu Voir le message
    Le script des indexes rebuilde chaque index, celui des tables réorganise chaque table (donc la "défragmente" au passage en quelque sorte)
    Par contre j'ose espérer que le script des table est lancé avant celui des indexes, car la réorganisation des tables entraine justement l'invalidation des indexes et leur rebuild est nécessaire derrière
    Sinon pour voir la fragmentation des objets, regarde la procédure dbms_space.space_usage
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Execution d'un script SQL
    Par Drahu dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/03/2004, 16h55
  2. Génération de script SQL avec les données
    Par borgfabr dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/03/2004, 13h57
  3. Exécuter un script SQL
    Par borgfabr dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/03/2004, 08h47
  4. create user, affectation droits et scripts sql
    Par hirochirak dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 03/02/2004, 10h21
  5. script SQL : affectation de variables
    Par Laura dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/10/2003, 21h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo