|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 104 ![]() |
Bonjour,
j'ai eu l'erreur Oracle suivante. Code :
ORA-01653: impossible d'étendre la table ... de 256 dans le tablespace ....
je me demande si la Requête suivante: 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. |
|
|
00
|
|
|
#2 |
|
Membre expérimenté
![]() Inscription : juillet 2007 Messages : 495 ![]() |
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. |
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
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 et repeuple ta table de départ avec les données stockées dans la table temporaire. |
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 104 ![]() |
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 |
|
|
00
|
|
|
#5 | ||||
![]() Salim Développeur et DBA Oracle Inscription : octobre 2006 Messages : 872 ![]() |
salut,
Code :
Code :
|
||||
|
|
00
|
|
|
#6 | ||||||
|
Membre expérimenté
![]() Inscription : juillet 2007 Messages : 495 ![]() |
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 :
3. Coalescence du tablespace de la table initiale (équivalent d'un defrag OS, nécessite des droits d'admin.) : Code :
Code :
|
||||||
|
|
00
|
|
|
#7 |
|
Membre expérimenté
![]() Inscription : juillet 2007 Messages : 495 ![]() |
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. |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 104 ![]() |
Merci pour vos réponse,
Merci à toi dgi77 Comme t'as dis je testerai d'abords la mise à Null du champ photo. Sinon, pour contrôler l'espace occupé par mes tablespaces, c'est la Requête qui figure sur la faq Oracle que je dois utiliser? http://oracle.developpez.com/faq/?pa...istetablespace sous le titre: Comment obtenir la liste des tablespaces avec leurs caractéristiques principales ? Merci |
|
|
00
|
|
|
#9 | |||
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Citation:
Code :
|
|||
|
|
00
|
|
|
#10 | |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Citation:
|
|
|
|
00
|
|
|
#11 |
|
Membre expérimenté
![]() Inscription : juillet 2007 Messages : 495 ![]() |
Si je comprends bien ce que tu fais, tu supprimes 1 enregistrement sur 2, ce qui laisse penser qu'il y a beaucoup de trous dans les blocs de données, et qu'aucun bloc n'a été vidé complètement (la table ayant été créée juste avant l'INSERT).
Est-ce que cela veut dire que le ALTER TABLE ... MOVE déplace les données d'un bloc à l'autre, jusquà libérer des extents ? Chapeau ! ![]() Et merci pour l'astuce. |
|
|
00
|
|
|
#12 | |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Oui, par défaut ALTER TABLE MOVE recrée un segment en compactant l'espace dans les blocs. A ma connaissance, ce comportement n'est officiellement documenté que dans des notes Metalink comme dans celle ci:
Citation:
|
|
|
|
00
|
|
|
#13 |
|
Invité régulier
![]() Inscription : septembre 2007 Messages : 7 ![]() |
Si le move reorganise la table, c'est bien dit...
Du coup suivant comment tu mets ton PCT FREE, ta table peut aussi être plus grande à la sortie ![]() En fait il faut que tu mettes un PCTFREE assez petit avant de faire le move pour gagner plus d'espace (mais faire très attention car si tes lignes existantes sont souvent mises à jour c'est pas top !) |
|
|
00
|
|
|
#14 |
|
Membre actif
![]() Inscription : septembre 2007 Messages : 188 ![]() |
Le move permet de regagner l'espace. tu peux meme simuler un move dans le meme tablespace.
Pour en etre sur, il suffit de faire Analyze table MATABLE compute statistics; un select table_name, blocks from user_tables where table_name ='MATABLE'; puis alter table MATABLE move tablespace MONTABLESPACE; Analyze table MATABLE compute statistics; puis à nouveau la requete sur user_tables. ATTENTION : le move mets les index de la table dans un état foireux, il faut donc reconstruire les index après le move. |
|
|
00
|
|
|
#15 | ||
|
Invité régulier
![]() Inscription : juillet 2007 Messages : 25 ![]() |
Citation:
vous pouvez ajoutez des nouvelles extents à votre table en utilisant Citation:
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com