Supprimer les objets d’un schéma
2 novembre 2010
Il arrive parfois d’avoir besoin de supprimer tous les objets d’un schéma, mais, par facilité ou pour différentes raisons, sans supprimer l’utilisateur. Par défaut la base de données Oracle ne fournit pas d’ordre SQL simple pour effectuer une telle tache. Je vous propose ainsi le petit script suivant pour exécuter cette opération.
Le code assez simple à exécuter en temps que SYS est le suivant :
declare
cursor c_get_objects is
select owner, object_type,'"'||object_name||'"'||decode(object_type,'TABLE' ,' cascade constraints purge',null) obj_name
from dba_objects
where object_type in ('TABLE','VIEW','PACKAGE','SEQUENCE','PROCEDURE','FUNCTION', 'SYNONYM', 'MATERIALIZED VIEW')
and owner in ('MYUSER');
cursor c_get_objects_type is
select owner, object_type, '"'||object_name||'"' obj_name
from dba_objects
where object_type in ('TYPE')
and owner in ('MYUSER') ;
begin
for object_rec in c_get_objects
loop
execute immediate ('drop ' || object_rec.object_type || ' ' || object_rec.owner || '.' ||object_rec.obj_name);
end loop;
for object_rec in c_get_objects_type
loop
begin
execute immediate ('drop '||object_rec.object_type || ' ' || object_rec.owner ||'.' || object_rec.obj_name);
end;
end loop;
end;
/
Et voila un beau schéma tout neuf.
Il se peut que des segments LOB restent coincés. Il faut alors se connecter avec l’utilisateur et purger la corbeille :
purge recyclebin ;
Merci à http://arjudba.blogspot.com/2008/09/dropping-all-objects-in-schema.html
6 Commentaires
laisser un →



Beau script, mais comment se connecter en tant que l’utilisateur sans devoir ( pouvoir) lui demander son mot de passe ? A-t-on enfin un équivalent de “su -” sous Unix transposé sous Oracle?
Je ne connais pas d’équivalent de “su -” mais par contre de sudo oui, ce qui devrait faire l’affaire : http://blog.easyteam.fr/2010/04/26/sudo-dans-une-base-oracle/
Une commande Oracle permet de se positionner en tant que l’utilisateur sur lequel on veut manipuler :
ALTER SESSION SET CURRENT_SCHEMA = NOM_DE_L_UTILISATEUR;
pas tout à fait car ca ne positionne pas le contexte de l’utilisateur (par exemple les vues user_* ne sont pas bonnes) et ca peut conduire à un drame si on s’était connecté initialement en sys.