Comment récupérer de stockage pour supprimé des LOBs
J'ai un LOB d'un tablespace. Actuellement la tenue de 9GO de 12 GO disponibles. Et, autant que je peux dire, la suppression d'enregistrements ne pas demander le remboursement de tout stockage dans l'espace de table. (Ce fut par la méthode simple de suivi de stockage -- requêtes contre user_extents, qui est à peu près tout ce que je suis autorisé en tant que non-DBA) je suis inquiet au sujet de la manipulation de la poursuite du traitement.
Ma préoccupation est tout simplement en cours d'exécution hors de l'espace -- nous sommes à environ 9 GO 12 GO disponibles pour le tablespace et je veux comprendre comment libérer de l'espace avant de demander de plus.
Le LOB colonnes sont stockées dans un autre tablespace, même si le "stockage en ligne" est autorisé pour les petits.
C'est Oracle, 11.1 et les données sont dans un CLOB et une colonne BLOB dans la même table. Le LOB de l'Indice de segments (SYS_IL...) sont de petite taille, tous le stockage est dans les segments de données (SYS_LOB...)
Nous'e essayé de purge et de s'unir et de ne pas obtenir n'importe où-même nombre d'octets dans user_extents.
"Alter table xxx déplacer" de travail, mais nous aurions besoin d'avoir un endroit pour le déplacer vers qui a suffisamment d'espace pour la révision des données. Nous avions également besoin de faire ça en dehors des heures et des de reconstruire les index, bien sûr, mais cela est assez facile.
Copier les bonnes données et de faire un truncate, puis de copier le dos, fonctionnera également. Mais c'est à peu près tout ce que l' "alter table" commande.
Me manque quelques moyens faciles pour réduire vers le bas et obtenir le stockage de retour? Ou est "alter table xxx déplacer" la meilleure approche? Ou est-ce un non-problème et Oracle va saisir l'arrière de l'espace de l'supprimé des lignes lob quand il en a besoin?
OriginalL'auteur Jim Hudson | 2010-06-14
Vous devez vous connecter pour publier un commentaire.
Cette question est ancienne, mais n'a jamais eu un travail de réponse et peut être utile pour beaucoup de gens, voici donc la solution que j'ai trouvé face à ce problème.
Vous avez raison, la suppression de la LOB de ne pas demander le remboursement de tout stockage dans le "tablescape".
L'exécution de cette requête avant et après la suppression du LOB donnent le même résultat
Lecture cette Oracle doc, j'ai découvert que vous devez exécuter l'instruction suivante
Qui permettra de réduire un
BASICFILE
LOB segment.Maintenant, si vous ré-exécuter la requête
Vous remarquerez que l'espace a été libéré pour le tablespace, et sera en mesure de ré-utiliser l'espace comme vous le souhaitez.
Maintenant, pour ceux qui voudraient libérer de l'espace sur le disque, notez que le fichier de données ne sont pas automatiquement re-taille et conservent la taille complète de votre disque.
Mais avant de le re-dimensionnement le fichier de données, assurez-vous de libérer de l'espace inutilisé dans un segment (étole de la même doc comme indiqué précédemment) à l'aide de ces requêtes (utiliser celui que vous voulez)
Noter que le
KEEP
clause est facultative et permet de spécifier la quantité d'espace retenu dans le segment. Vous pouvez vérifier que le libéré de l'espace est libéré par l'examen de laDBA_FREE_SPACE
vue.Maintenant pour une nouvelle taille de votre fichier de données,
Noter que la taille maximale que vous pouvez réduire lorsque le redimensionnement est basé sur la position du dernier bloc de données dans votre fichier de données. Il y a donc beaucoup de chance, après une suppression d'un lot de données, vous ne pouvez pas re-taille. Ensuite, le plus simple est d'exporter les données et de les ré-importer dans un autre tablespace, puis déposez l'ancien espace de table. Lors de l'importation de données, Oracle pack d'eux autant que possible.
Si vous voulez libérer encore plus d'espace, vous pouvez effacer votre tablespace temp ce qui l'a parfois beaucoup d'espace (5 GO pour ma base de données). Utilisez l'instruction suivante pour vérifier la taille :
OriginalL'auteur Jean-François Savard
Généralement, une fois qu'une mesure est attribuée à une table, il reste à alloués. L'espace vide à l'intérieur d'un tableau peut être ré-utilisé si d'autres données sont insérées dans la table. Cependant, il est difficile de récupérer de l'espace de dans un tableau parce que la table peut avoir, par exemple, des blocs de 1 à 100, et les blocs vides sont en blocs de 50 à 75, ou les blocs vides sont 1,3,5,7 etc.
La question est, êtes-vous inquiet au sujet de l'espace ré-utilisé à l'intérieur de la table ou vous avez besoin de l'espace libéré pour d'autres objets dans l'espace de table, ou avez-vous besoin pour être en mesure de réduire l'espace de stockage de fichiers de données ?
OriginalL'auteur Gary Myers