Sauter au contenu

Supprimer les objets d’un schéma

2 novembre 2010
by

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 →
  1. 3 novembre 2010 09:46

    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?

  2. yooo13 permalien
    16 novembre 2010 10:17

    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.

Rétroliens

  1. DB: Supprimer les objets d’un schéma « EASYTEAM LE BLOG « Oracle jgaicc
  2. DB: Supprimer les objets d’un schéma « EASYTEAM LE BLOG « Oracle jgaicc

Répondre

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Twitter picture

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Connexion à %s

Suivre

Get every new post delivered to your Inbox.

Joignez-vous à 385 followers