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

Oracle Discussion :

Réorganisation d'une table


Sujet :

Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Points : 52
    Points
    52
    Par défaut Réorganisation d'une table
    Bonjour les Experts ,

    En 11g , faut-il de temps en temps réorganiser une table par un ALTER TABLE MOVE ?
    Si oui quand ? symptômes ?
    Quelles sont les autres méthodes de réorganisation à part le CTAS ou export / import ?

    merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Si votre table possède une clef auto incrémentée ou bien une colonne d'horodatage, considérez d'utiliser un IOT.
    Sinon, il faudra effectivement la réorganiser physiquement pour que les espaces perdus soient libérés.
    Ceci n'est à faire que de temps à autre.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Si votre table possède une clef auto incrémentée ou bien une colonne d'horodatage, considérez d'utiliser un IOT.
    Sinon, il faudra effectivement la réorganiser physiquement pour que les espaces perdus soient libérés.
    Ceci n'est à faire que de temps à autre.
    Fred, rassure-moi : tu as parié avec quelqu'un que tu placerais 2 énormités en 2 phrases ??
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  4. #4
    Membre éprouvé Avatar de 13thFloor
    Homme Profil pro
    DBA Oracle freelance
    Inscrit en
    Janvier 2005
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    Points : 945
    Points
    945
    Par défaut
    Bonjour,
    un exemple de symptôme : davantage de blocs à parcourir pour faire un fts par rapport au nombre de blocs occupés.

    J'utilise pour cela un package très utile (en assm) :
    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
    set serveroutput on
    declare
       l_fs1_bytes number;
       l_fs2_bytes number;
       l_fs3_bytes number;
       l_fs4_bytes number;
       l_fs1_blocks number;
       l_fs2_blocks number;
       l_fs3_blocks number;
       l_fs4_blocks number;
       l_full_bytes number;
       l_full_blocks number;
       l_unformatted_bytes number;
       l_unformatted_blocks number;
    begin
       dbms_space.space_usage(
          segment_owner      => 'OWNER',
          segment_name       => 'NOM DE SEGMENT',
          segment_type       => 'TYPE DE SEGMENT',
          fs1_bytes          => l_fs1_bytes,
          fs1_blocks         => l_fs1_blocks,
          fs2_bytes          => l_fs2_bytes,
          fs2_blocks         => l_fs2_blocks,
          fs3_bytes          => l_fs3_bytes,
          fs3_blocks         => l_fs3_blocks,
          fs4_bytes          => l_fs4_bytes,
          fs4_blocks         => l_fs4_blocks,
          full_bytes         => l_full_bytes,
          full_blocks        => l_full_blocks,
          unformatted_blocks => l_unformatted_blocks,
          unformatted_bytes  => l_unformatted_bytes
       );
       dbms_output.put_line(' vide           = '||l_unformatted_blocks||' Bytes = '||l_unformatted_bytes);
       dbms_output.put_line(' 0-25%   Blocks = '||l_fs1_blocks||' Bytes = '||l_fs1_bytes);
       dbms_output.put_line(' 25-50%  Blocks = '||l_fs2_blocks||' Bytes = '||l_fs2_bytes);
       dbms_output.put_line(' 50-75%  Blocks = '||l_fs3_blocks||' Bytes = '||l_fs3_bytes);
       dbms_output.put_line(' 75-100% Blocks = '||l_fs4_blocks||' Bytes = '||l_fs4_bytes);
       dbms_output.put_line('Full Blocks = '||l_full_blocks||' Bytes = '||l_full_bytes);
    end;
    /
    S'il y a beaucoup de places perdues, une réorganisation (compactage) peut s'imposer pour réduire les IO lors des FTS.

    Ma méthode de prédilection : alter table shrink space cascade (en ayant fait au préalable un alter table enable row movement).
    Mais ça nécessite notamment de ne pas avoir (en 11gr1) :
    - de long
    - de fbi
    - de compression

  5. #5
    Membre actif Avatar de Ahmed AANGOUR
    Homme Profil pro
    DBA Oracle
    Inscrit en
    Janvier 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle

    Informations forums :
    Inscription : Janvier 2010
    Messages : 139
    Points : 271
    Points
    271
    Par défaut
    Bonjour à tous,

    La question à se poser c'est pourquoi réorganiser votre table?
    Réorganiser pour réorganiser à quoi bon?
    Attentions à ces mythes qui gangrainent les DBAs.
    L'espace libéré dans les blocs par des deletes ne sont pas perdus dans Oracle.
    Oracle sait parfaitement réutiliser l'espace libre lors des prochains inserts.

    La question de réorganisation peut se poser dans les cas suivants:
    - vous avez effectué un delete massif sur une table (mais pas d'insert massif derrière) => un shrink peut alors s'avérer utilie pr défragmenter la table et faire redescendre le high water mark
    - vous effectuez des deletes mais vos insert se font en mode APPEND (écriture après le HWM) et du coup l'espace libéré n'est jamais réutilisé

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Points : 52
    Points
    52
    Par défaut
    Bonjour ,
    Je n'ai pas la console d'admin , je pourrais peut-être utiliser le script suivant (SEGMENT ADVISOR) pour surveiller la défragmentation d'une table ?
    Après je consulterai les vues DBA_ADVISOR_xxx ?
    Votre avis ?
    merci
    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
     
    variable id number;
    begin
      declare
      name varchar2(100);
      descr varchar2(500);
      obj_id number;
      begin
      name:='Manual_Employees';
      descr:='Segment Advisor Example';
     
      dbms_advisor.create_task (
        advisor_name     => 'Segment Advisor',
        task_id          => :id,
        task_name        => name,
        task_desc        => descr);
     
      dbms_advisor.create_object (
        task_name        => name,
        object_type      => 'TABLE',
        attr1            => 'HR',
        attr2            => 'EMPLOYEES',
        attr3            => NULL,
        attr4            => NULL,
        attr5            => NULL,
        object_id        => obj_id);
     
      dbms_advisor.set_task_parameter(
        task_name        => name,
        parameter        => 'recommend_all',
        value            => 'TRUE');
     
      dbms_advisor.execute_task(name);
      end;
    end; 
    /

Discussions similaires

  1. Réorganisation d'une table/base
    Par skyarnangel dans le forum Administration
    Réponses: 7
    Dernier message: 17/09/2014, 13h31
  2. pb de recordset pour réorganisation d'une table
    Par kgb1917 dans le forum VBA Access
    Réponses: 7
    Dernier message: 24/10/2010, 18h54
  3. réorganiser une table avec des variables dynamiques
    Par Stefan_H dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/11/2007, 12h40
  4. [phpMyAdmin] Réorganisation des colonnes d'une table
    Par ybruant dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 09/10/2007, 11h19
  5. Réorganiser vue d'une table Oracle dans un DataGrid
    Par Tatoine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 19/06/2007, 10h24

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