Bonjour tout le monde,
j'utilise deux instances d'une BDD oracle 8i ,on a neglige leur gestion et il est recommande dans mon cas de les purger
quelqu'un pourrait m'aider a le faire!
merci d'avance!
Bonjour tout le monde,
j'utilise deux instances d'une BDD oracle 8i ,on a neglige leur gestion et il est recommande dans mon cas de les purger
quelqu'un pourrait m'aider a le faire!
merci d'avance!
Pour vider toutes les tables :
Il faut aussi désactivé les FK si il y en a
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 BEGIN FOR i IN (SELECT * FROM all_tables WHERE owner NOT LIKE 'SYS%') LOOP EXECUTE IMMEDIATE('TRUNCATE TABLE '||i.table_owner||'.'||i.table_name); END LOOP; END;
Attention Orafrance...
cet ordre ne fonctionnera pas non plus sur les tables en cluster... là il faudra faire un truncate du cluster...
Mouais, mais si le demandeur daignait préciser son besoin, ça éviterait aux bonnes volontés de se décarcasser dans le vide...
Effectivement, on pourrait prèvoir des DELETE après les TRUNCATE pour les cas particuliersEnvoyé par Yorglaa
Pardon , je ne voie pas qu'est ce que des tables en cluster;
c'est bette comme question mais sacher que je suis novice en ORACLE
en plus Quelle est la differance entre un DELATE et TRUNCATE ,si je ne me trompe pas c'est question de memoire ,
TRUNCATE : vide les tables mais ne libere pas la memoire
par contre DELATE libere te les tables et la memoire :
Merci tout le monde!
là c'est mon script , je ne sais si ca fontionne correctement pour purger MES tables :
DECLARE
CURSOR C1 is select table_name from user_tables;
V_C1 C1%ROWTYPE
BEGIN
OPEN C1;
LOOP
FETCH C1 INTO V_C1
EXECUTE IMMEDIATE(' TRUNCATE TABLE'||C1.TABLE_NAME);
ENDLOOP;
END;
Biensur je me suis inspire de celui de "ORAFRANCE"
Merci "Orafrance"
Merci "Yorglaa"
Ca marche pas et voila ce que j'ai comme erreur!
----------------------------------------------------------------------------------
BEGIN
*
ERREUR à la ligne 4 :
ORA-06550: line 4, column 1:
PLS-00103: Encountered the symbol "BEGIN" when expecting one of the following:
:= ( ; not null range default character
The symbol ";" was substituted for "BEGIN" to continue.
ORA-06550: line 8, column 1:
PLS-00103: Encountered the symbol "EXECUTE" when expecting one of the
following:
. ( , % ; limit
----------------------------------------------------------------------------------
Quoi faire?
Merci!
il manque un point-virgule après
Code : Sélectionner tout - Visualiser dans une fenêtre à part V_C1 C1%ROWTYPE
Il manque également un point virgule après le fetch.
C'est plus joli avec les balises codes !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 DECLARE CURSOR C1 is select table_name from user_tables; V_C1 C1%ROWTYPE; BEGIN OPEN C1; LOOP FETCH C1 INTO V_C1; EXECUTE IMMEDIATE(' TRUNCATE TABLE'||C1.TABLE_NAME); END LOOP; END;
Envoyé par PlaineR
Code : Sélectionner tout - Visualiser dans une fenêtre à part ça c'est bien vrai
Envoyé par manar
1°) C'est DELETE et non DELATE
2°) en gros, le DELETE passe par les rollback segments (donc TRES long si la table est grosse) contrairement à TRUCATE qui purge instantanément la table
Attention, autre différence MAJEURE (mais relative à la remarque de orafrance) :
- avec un DELETE tu peux faire ensuite un Rollback en cas d'erreur...
- Avec le TRUNCATE la suppression est immédiatement définitive
différence à ne pas négliger !
Pour forcer le truncate à désallouer les blocks de la table, il faut lui rajouter la clause DROP STORAGE.Envoyé par Manar
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 DECLARE CURSOR C1 is select table_name from user_tables; V_C1 C1%ROWTYPE; BEGIN OPEN C1; LOOP FETCH C1 INTO V_C1; EXECUTE IMMEDIATE(' TRUNCATE TABLE '||C1.TABLE_NAME||' DROP STORAGE'); END LOOP; END;
Merci vous etes super!
Mais "ORAFRANCE" :-------------------------------------------------------------
2°) en gros, le DELETE passe par les rollback segments (donc TRES long si la table est grosse) contrairement à TRUCATE qui purge instantanément la table
-------------------------------------------------------------------------------------
attention c'est TRUNCATE et non TRUCATE
pourquoi ne pas tout simplement faire un DROP USER CASCADE ???
Suivant les grants que ce user peut déjà avoir sur des objets d'autres schéma, il peut être assez long de le recréer au complet...
du moins j'ai déjà vécu ce problème...alors j'ai utilisé la console OEM pour fair un "create like..." du user en question pour en faire un "shell" vide, avec juste les grants nécéssaires. Puis "drop user... cascade" du user principal et à nouveau "create like..." basé sur mon user "shell vide"...
je me sens assez lamentable de ne pas y avoir pensé plus tôt... désolé !
PS Attention, pour que ça fonctionne, les grants sur les objets d'autres schémas (SYS, autre user, etc...) et autres joyeusetés du genre doivent être "with admin option" pour pouvoir les propager sur le "shell vide" et retour...
c'est bien... tu apprends viteEnvoyé par manar
Partager