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

Administration Oracle Discussion :

réinitialisation d'un champ Blob


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 109
    Par défaut réinitialisation d'un champ Blob
    Bonjour,

    j'ai eu l'erreur Oracle suivante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-01653: impossible d'étendre la table ... de 256 dans le tablespace ....
    sachant que par erreur j'ai stocké des images dans un champ de type Blob, et je veux vider ces champs.
    je me demande si la Requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Update MaTable set Photo=NULL
    va me libérer l'espace ou il ya un autre moyen de supprimer le contenu de la colonne? sachant que j'ai pas la permission d'augmenter la taille de la base et je n'ai qu'à supprimer ces photos pour libérer l'espace.

    Merci pour toute aide.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Par défaut
    Ce n'est que en faisant un TRUNCATE ou un DROP sur une table qu'on peut récupérer ses extents et donc de la place.

    Tu ne pourras donc pas récupérer de place en mettant la colonne Photo à null, il faut donc que tu tronques la table et que tu la réalimentes avec Photo = null

    Si tu es en 8i, une coalescence du taplespace s'impose après le TRUNCATE ou le DROP pour "recoller" les espaces libres consécutifs.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Essaie de supprimer la colonne puis de la recréer.

    Si ça ne te libère pas d'espace, créé une table temporaire et recopie toutes tes colonnes sauf photos.
    Fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    truncate table TOTO drop storage
    et repeuple ta table de départ avec les données stockées dans la table temporaire.

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 109
    Par défaut
    Merci pour vos réponses,

    En fait les données de la table sur laquelle je travaille sont très sensibles. je pense qu'il serait risqué de faire un truncate de la table ou même de faire un Alter.

    la question que je me pose: en mettant le champ à Null je ne vais pas libérer de l'espace mais est ce que à la prochaine insertion j'aurais l'erreur ORA-01653 ?

    Merci

  5. #5
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    EMPTY_BLOB 
    Null BLOB --->dbms_lob.empty_blob(); 
    CREATE TABLE ebdemo (
    fid   NUMBER(3),
    iclob BLOB);
     
    INSERT INTO ebdemo
    (fid, iblob)
    VALUES
    (1, EMPTY_BLOB());
    Pour initialiser un champ BLOB, il suffit de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Update MaTable set Photo=EMPTY_BLOB()

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Par défaut
    Oui, tu auras toujours la même erreur !
    Ce n'est pas parce que tu mets une colonne à null que tu vides complètement les blocs de données, et par conséquent les extents.
    Tu as besoin d'un ordre DDL (TRUNCATE ou DROP) pour que les extents redeviennent de l'espace libre.

    Sinon, je te propose une solution de contournement, à condition que tu aies de la place sur un autre tablespace :

    1. Sauvegarde de la table dans un autre tablespace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CREATE TABLE table_save
    TABLESPACE autre_tablespace
    AS SELECT * FROM table;
    2. Tronquage de la table initiale avec récupération de l'espace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TRUNCATE TABLE table DROP STORAGE;
    3. Coalescence du tablespace de la table initiale (équivalent d'un defrag OS, nécessite des droits d'admin.) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ALTER TABLESPACE tablespace COALESCE;
    4. Réalimentation de la table initiale sans les photos :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO table (col1, col2, col3, Photo, col5)
    SELECT col1, col2, col3, null, col5 FROM table_save;
    5. Suppression de la sauvegarde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DROP TABLE table_save;

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Par défaut
    Maintenant que j'y pense, tu peux quand même essayer de passer ta colonne Photo à null, des fois que ça te permette que l'occupation des blocs de données redescende sous la PCTUSED, ce qui équivaudrait à récupérer de l'espace.
    Mais il faudrait quand même un heureux concours de circonstances pour que ça marche sur tous les blocs de la table.
    En cas d'échec, je ne vois que la solution que je t'ai donnée précédemment.

  8. #8
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Par défaut
    Citation Envoyé par safisafi Voir le message
    Bonjour,

    j'ai eu l'erreur Oracle suivante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-01653: impossible d'étendre la table ... de 256 dans le tablespace ....
    sachant que par erreur j'ai stocké des images dans un champ de type Blob, et je veux vider ces champs.
    je me demande si la Requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Update MaTable set Photo=NULL
    va me libérer l'espace ou il ya un autre moyen de supprimer le contenu de la colonne? sachant que j'ai pas la permission d'augmenter la taille de la base et je n'ai qu'à supprimer ces photos pour libérer l'espace.

    Merci pour toute aide.


    vous pouvez ajoutez des nouvelles extents à votre table en utilisant
    ALTER TABLE table ALLOCATE EXTENT

Discussions similaires

  1. Champs BLOB avec une connexion ADO
    Par Ol' dans le forum Bases de données
    Réponses: 6
    Dernier message: 18/05/2004, 19h21
  2. Créer un champ BLOB
    Par Bweb dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/04/2004, 12h01
  3. [interbase] transferer un champ blob en par prog
    Par Harry dans le forum Bases de données
    Réponses: 4
    Dernier message: 26/02/2004, 10h39
  4. Update d'un champ BLOB
    Par ZeKlubb dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 17/01/2004, 16h04
  5. faire un insert pour un champ blob
    Par tripper.dim dans le forum InterBase
    Réponses: 10
    Dernier message: 02/05/2003, 16h56

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