Base de conocimiento

Creado por eth0
2011-04-29
12:40:52

Categorías
Etiquetas

Limpiar un esquema de base de datos en Oracle

Si alguna vez necesitamos limpiar un esquema de base de datos, podemos usar este bloque de código PL/SQL:

  1. CURSOR c_obj( b_owner IN VARCHAR2)
  2.     SELECT object_type
  3.     ,      object_name
  4.     ,      owner
  5.     FROM   dba_objects
  6.     WHERE  owner = b_owner
  7.     AND    object_type NOT IN ( 'PACKAGE BODY','TYPE BODY', 'INDEX', 'TRIGGER', 'UNDEFINED', 'LOB')
  8.     AND    ( object_type <> 'TABLE' OR object_name NOT LIKE 'BIN%')  -- do not attempt to drop alrea
  9.     ;
  10. l_execute VARCHAR2(2000);
  11. FOR r_obj IN c_obj( b_owner => UPPER('&schemaname')) LOOP
  12.     l_execute:= 'drop '||r_obj.object_type||' '||r_obj.owner||'.'||r_obj.object_name;
  13.     IF r_obj.object_type = 'TABLE'
  14.     THEN
  15.     l_execute:= l_execute || ' CASCADE CONSTRAINTS';
  16.     END IF;
  17.     EXECUTE IMMEDIATE l_execute;

Dicho bloque PL/SQL nos preguntará qué esquema queremos limpiar y, a continuación, procederá a borrar todas las tablas, disparadores, secuencias, vistas…

No obstante, hay que tener en cuenta que, desde Oracle 10g, todo lo borrado irá a parar a la papelera, que debemos vaciar con el siguiente comando:

PURGE RECYCLEBIN;

Fuente: AMIS Technology Blog