Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Administration
Administration Forum d'entraide sur l'administration du serveur Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/02/2008, 18h14   #1
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 485
Points : 1 485
Par défaut Import de table plus long si table vidée que si table droppée/recréée ?

Tout est dit dans le titre : comment se fait-il qu'un import de table soit plus long lorsque l'on a fait au préalable un TRUNCATE que si on l'a droppée puis recréée ?

PS : je suis en 9i
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 09h34   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
A priori il n'y a pas de raison... mais on peut imaginer qu'après le DROP tu ne recrées pas tout de suite les indexes et contraintes et que du coup l'import est plus rapide.
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 10h16   #3
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 485
Points : 1 485
En fait je devais purger plusieurs tables non partitionnées qui faisaient chacune plusieurs millions de lignes, donc j'avais fait pour chaque table :
1) export partiel (clause where en ne gardant que les lignes que je veux garder)
2) truncate
3) drop indexes et désactivation contraintes
4) import du dump partiel
C'est bizarre à chaque fois c'était beaucoup plus long que si j'avais droppé puis recréé la table, en mettant les mêmes paramètres d'import (j'ai fait le test) ..

Autre question, pourquoi quand on truncate une table, sa taille dans la vue dba_segments reste à sa taille d'origine (avant le truncate) au lieu de revenir à la taille d'un extent ? Ca veut dire qu'elle occupe physiquement toujours le même espace dans le tablespace ? Y a-t-il un moyen d'y remédier ?

Merci d'avance
__________________
La théorie, c'est quand on sait tout mais que rien ne fonctionne.
La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 11h11   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Citation:
Envoyé par scheu Voir le message
C'est bizarre à chaque fois c'était beaucoup plus long que si j'avais droppé puis recréé la table, en mettant les mêmes paramètres d'import (j'ai fait le test) ..
Avec les mêmes règles de partitionnement ?

Citation:
Envoyé par scheu Voir le message
Autre question, pourquoi quand on truncate une table, sa taille dans la vue dba_segments reste à sa taille d'origine (avant le truncate) au lieu de revenir à la taille d'un extent ? Ca veut dire qu'elle occupe physiquement toujours le même espace dans le tablespace ? Y a-t-il un moyen d'y remédier ?
Probablement que cette taille correspond au INITIAL * nb de partitions. Seul moyen d'y remédier : réduire le INITIAL ou le nombre de partition
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 11h16   #5
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 485
Points : 1 485
Mes tables n'étaient pas partitionnées (c'était justement pour ça que je devais faire des exports/imports partiels pour pouvoir les purger)
__________________
La théorie, c'est quand on sait tout mais que rien ne fonctionne.
La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 11h38   #6
Membre régulier
 
Inscription : septembre 2005
Messages : 71
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 71
Points : 72
Points : 72
Citation:
Envoyé par scheu Voir le message

Autre question, pourquoi quand on truncate une table, sa taille dans la vue dba_segments reste à sa taille d'origine (avant le truncate) au lieu de revenir à la taille d'un extent ? Ca veut dire qu'elle occupe physiquement toujours le même espace dans le tablespace ? Y a-t-il un moyen d'y remédier ?

Merci d'avance
Hello,

BIzarre je pense que tu ne lis pas les bonnes infos...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
COL SEGMENT_NAME FORMAT A20
COL BLOCKS FORMAT 99
DROP TABLE BIGEXTENT;
CREATE TABLE BIGEXTENT (a varchar2(255));
SELECT SEGMENT_NAME, BLOCKS
FROM dba_segments
WHERE SEGMENT_NAME = 'BIGEXTENT';
DECLARE
a varchar2(254);
i integer;
BEGIN
FOR i IN 1..10000 LOOP
INSERT INTO BIGEXTENT VALUES ('ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789');
end loop;
END;
/
SELECT SEGMENT_NAME, BLOCKS
FROM dba_segments
WHERE SEGMENT_NAME = 'BIGEXTENT';
TRUNCATE TABLE BIGEXTENT;
SELECT SEGMENT_NAME, BLOCKS
FROM dba_segments
WHERE SEGMENT_NAME = 'BIGEXTENT';
Résultat

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
SQL> 
TABLE dropped.
 
SQL> 
TABLE created.
 
SQL>   2    3  
SEGMENT_NAME         BLOCKS
-------------------- ------
BIGEXTENT                 8
 
SQL>   2    3    4    5    6    7    8    9  
PL/SQL procedure successfully completed.
 
SQL>   2    3  
SEGMENT_NAME         BLOCKS
-------------------- ------
BIGEXTENT                64
 
SQL> 
TABLE truncated.
 
SQL>   2    3  
SEGMENT_NAME         BLOCKS
-------------------- ------
BIGEXTENT                 8
 
SQL>
Tracnac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2008, 12h29   #7
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 485
Points : 1 485
Pour ceux qui auraient le même problème j'ai trouvé la solution pour éviter les problèmes lorsqu'on vide une table en vue de la réimporter (partiellement ou non), il faut faire
Code :
TRUNCATE TABLE matable DROP STORAGE;
J'avais oublié le DROP STORAGE
__________________
La théorie, c'est quand on sait tout mais que rien ne fonctionne.
La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h13.


 
 
 
 
Partenaires

Hébergement Web