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 :

Espace libre table


Sujet :

Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 82
    Points : 49
    Points
    49
    Par défaut Espace libre table
    Bonjour,

    J'ai effectuée plusieurs delete sur des tables d'un même tablespace.

    En interrogant l'espace libre disponible dans le tablespace celui-ci reste inchangé par rapport à avant le delete.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select tablespace_name,round(sum(bytes)/1048576,2) || ' Mb' free from sys.dba_Free_space where tablespace_name in ('TS_1','UNDOTBS1') group by tablespace_name;

    Vous allez-me dire que l'espace liébérér au niveaux de chaque table appartient à chaque table et n'est pas redistribué au tablespace.

    Existe-il une requête qui permet de voir l'espace table libre dans un tablespace ?

    cordialement,

  2. #2
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Points : 926
    Points
    926
    Par défaut
    J'ai effectuée plusieurs delete sur des tables d'un même tablespace.

    En interrogant l'espace libre disponible dans le tablespace celui-ci reste inchangé par rapport à avant le delete.
    Ceci est normal, car le DELETE ne libère pas d'espace dans le TBS.
    Le DELETE se contente de supprimer des occurrences dans les blocs Oracle de ta table. La seule chose qui peut se passer ensuite, c'est que si ton bloc était plein (donc plus dans la Free List), alors le bloc Oracle regagne la Free List de la table si on redescend en dessous du PCT FREE.

    Existe-il une requête qui permet de voir l'espace table libre dans un tablespace ?
    Il faut regarder la vue DBA_FREE_SPACE, laquelle te donne tous les fragments libres par TBS.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 82
    Points : 49
    Points
    49
    Par défaut
    Ok,

    Mais DBA_FREESPACE renseigne l'espace libre au niveau du tablespace.

    Ce qui m'intérresse c'est l'espace libre dans chaques tables.

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    il y a bien la colonne EMPTY_BLOCKS de la vue USER_TABLES.

  5. #5
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Points : 926
    Points
    926
    Par défaut
    Il est difficile de savoir exactement quel est l'espace libre dans chaque table.

    Je sais qu'il existe pour cela le package DBMS_SPACE, avec ses nombreuses procédures, mais je ne l'ai jamais utilisé.

    Sinon, pour avoir une petite idée, tu peux utiliser la requête suivante, laquelle suppose d'avoir des statistiques à jour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select a.table_name, b.bytes - a.num_rows * a.avg_row_len "Espace dispo"
    from user_tables a, user_segments b
    where a.table_name = b.segment_name ;
    Cette requête va chercher le nombre d'octets du segment, et retranche le volume consommé (soit nombre de lignes dans ma table * longueur moyenne d'une ligne).

    Cela donne une bonne idée, mais il ne faut pas prendre ce chiffre à l'octet, car on ne tient pas compte ici des entêtes de segment, de blocs et du PCT Free.

  6. #6
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Est-ce-que le script suivant ne peut pas vous aider : http://oracle.developpez.com/sources...#DISPO_SEGMENT

    Il donne la disposition des objets dans un tablespace.


    Laly.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 82
    Points : 49
    Points
    49
    Par défaut
    Merci pour ces précieuses info

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

Discussions similaires

  1. [Système] Connaitre la capacité d'un disque dur et l'espace libre
    Par sebastakis dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 03/12/2007, 12h48
  2. LMT gestion de l'espace libre
    Par milka dans le forum Oracle
    Réponses: 2
    Dernier message: 04/05/2006, 11h43
  3. [9i] taille d'une tablespace et espace libre ?
    Par sali dans le forum Oracle
    Réponses: 6
    Dernier message: 17/02/2006, 15h13
  4. [SYBASE]Libérer espace libre dans une base de données ?
    Par le_parrain dans le forum Sybase
    Réponses: 3
    Dernier message: 14/05/2004, 10h36
  5. Réponses: 3
    Dernier message: 09/01/2004, 15h37

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