Bonjour,
J ai une table fragmentée à 95%, je cherche la méthode la plus adapté en 12c:
alter table xxx deallocate unused space ?
alter table xxx move ... ?
alter table xxx shrink ...?
Merci.
A+
Bonjour,
J ai une table fragmentée à 95%, je cherche la méthode la plus adapté en 12c:
alter table xxx deallocate unused space ?
alter table xxx move ... ?
alter table xxx shrink ...?
Merci.
A+
De mémoire :
- SHRINK : il y a plusieurs options mais c'est, de mémoire, l'option à retenir pour défragmenter ta table
- évite le MOVE car celui-ci est prévu pour migrer un objet d'un tablespace vers un autre, pas pour le défragmenter (même si le MOVE va conduire à recréer ta table)
- Deallocate ne me semble pas être une bonne option : je lis ici que ça ne traite que la fin de la table https://docs.oracle.com/en/database/...ed_clause.html que "Use the deallocate_unused_clause to explicitly deallocate unused space at the end of a database object segment and make the space available for other segments in the tablespace."
Après, tu peux toi même inventé ta propre méthode, par exemple tu peux faire un export datapump, supprimer la table, faire un import datapump et ta table sera toute neuve... mais bon, SHRINK sera bien plus efficace![]()
Autre possibilité, créer un IOT (équivalent de l'index Cluster de SQL Server) puis supprimer l'IOT
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/ * * * * *
Peut-être avec le Segment Advisor?
Un IOT c'est la table dont les lignes sont triées dans l'ordre de la clé d'index. Pour constituer cet index, toutes les lignes sont déplacées et créées dans de nouvelles pages ce qui défragmente de facto la table sauf si l'on précise un PCTFREE (équivalent du FILLFACTOR dans tous les autres SGBDR). En supprimant l'IOT, Oracle est assez intelligent pour ne supprimer que les pages (pardon, "bloc", puisqu'Oracle refuse d'utiliser la terminologie consacrée...) contenant la racine de l'index et celle de navigation, sans toucher aux pages contenant les données...
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/ * * * * *
Bonjour,
Voici pour la requête (récupérée/net):
Dans mon cas, j'opte pour export/import de ma table.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select table_name,avg_row_len,round(((blocks*16/1024)),2)||'MB' "TOTAL_SIZE", round((num_rows*avg_row_len/1024/1024),2)||'Mb' "ACTUAL_SIZE", round(((blocks*16/1024)-(num_rows*avg_row_len/1024/1024)),2) ||'MB' "FRAGMENTED_SPACE", (round(((blocks*16/1024)-(num_rows*avg_row_len/1024/1024)),2)/round(((blocks*16/1024)),2))*100 "percentage" from all_tables WHERE table_name='MATABLE';
A+
Partager