Comment faire pour déplacer la table à partir d'un espace à un autre dans oracle 11g
- Je exécuter oracle 11g
et la nécessité de déplacer table (tbl1)
d'un tablespace (tblspc1)
à l'autre (tblspc2)
. Quelle est la meilleure façon de le faire?
- Pouvez-vous au moins poster ce que vous avez essayé jusqu'à présent?.
- Si vous souhaitez déplacer des tables partitionnées, je l'ai écrit il y a quelques années comment j'ai déplacé les tables à partir d'un espace à l'autre: déplacer les tables partitionnées.
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:-
Très belle suggestion de IVAN dans les commentaires donc pensé à ajouter dans ma réponse
Note: cela entraînera la nullité de tous de la table d'index. Si cette commande est généralement suivie par
SELECT Segment_Name, Segment_Type, Tablespace_Name, Bytes, Blocks, Extents, q'[ALTER ]' || Segment_Type || q'[ ]' || USER || q'[.]' || Segment_Name || CASE WHEN Segment_Type = 'INDEX' THEN q'[ REBUILD ]' ELSE q'[ MOVE ]' END || q'[ TABLESPACE ]' || q'[TABLESPACE_NAME_GOES_HERE]' || q'[;]' FROM Dba_Segments WHERE Owner = USER AND Tablespace_Name <> 'TABLESPACE_NAME_GOES_HERE' ORDER BY Segment_Name;
ALTER TABLE TABLE_NAME MOVE LOB(COLUMN_NAME) STORE AS (TABLESPACE DEST_TABLESPACE)
Utilisation
sql
desql
:bobine de sortie de cette dans un fichier:
spoolfile avoir quelque chose comme ceci:
Déplacer les tables:
Première exécution:
-- Ou suggéré dans les commentaires (n'a pas le tester moi-même)
Où
<schema_name>
est le nom de l'utilisateur.Et
<tablespace_name>
est la destination d'un tablespace.Comme un résultat que vous obtenez des lignes comme:
ALTER TABLE SCOT.LES PIÈCES SE DÉPLACENT TABLESPACE UTILISATEURS;
Coller les résultats dans un script ou dans un oracle sql developer comme application et l'exécuter.
Déplacement d'indices:
Première exécution:
La dernière ligne de ce code, vous pourriez économiser beaucoup de temps, car elle filtre les indices qui sont déjà dans le bon espace de stockage.
Comme un résultat que vous devriez obtenir quelque chose comme:
ALTER INDEX SCOT.PARTS_NO_PK RECONSTRUIRE TABLESPACE UTILISATEURS;
Coller les résultats dans un script ou dans un oracle sql developer comme application et l'exécuter.
Dernier mais non le moindre, le déplacement de LOBs:
Première exécution:
Cela déplace le MÉTIER des objets à l'autre tablespace.
Comme un résultat que vous devriez obtenir quelque chose comme:
ALTER TABLE SCOT.bin$6t926o3phqjgqkjabaetqg==$0 DÉPLACER LOB(calendrier) MAGASIN (TABLESPACE USERS);
Coller les résultats dans un script ou dans un oracle sql developer comme application et l'exécuter.
O et il y a une chose de plus:
Pour une raison quelconque, je n'étais pas en mesure de se déplacer "DOMAINE" de type index. Comme je l'ai abandonné l'index. changé le tablespace par défaut de l'utilisateur dans de désiré tablespace. et puis recréer l'index à nouveau.
Il y a sans doute une meilleure façon, mais cela a fonctionné pour moi.
Essayez ceci pour déplacer votre table (tbl1) à tablespace (tblspc2).
J'ai essayé beaucoup de scripts, mais ils n'ont pas de travail pour tous les objets. Vous ne pouvez pas déplacer cluster objets à partir d'une tablespace à l'autre. Pour cela, vous devrez utiliser expdp, je vais donc suggérer expdp est la meilleure option pour déplacer tous les objets d'un autre tablespace.
Ci-dessous est la commande:
Vous pouvez vérifier ce lien pour plus de détails.