SQLPlus Script – Löschen / DROP aller DB-Objekte in DB-Schema
Ein einfaches SQLPlus Script, welches alle Datenbank-Objekte (Packages, Sequences, Procedures, Functions, Views, Tables und Types) aus einem DB-Schema löscht – DROP.
Das SQLPlus Script muss unter dem gewünschten DB-Schema / USER ausgeführt werden, dessen Datenbank-Objekte gelöscht – drop – werden sollen.
Alternativ kann auch der USER gelöscht werden und danach wieder neu angelegt werden. Dies hat ggf. Konsequenzen auf die Rechtevergabe anderer DB-Schemata.
ACHTUNG: Das SQLPlus-Script löscht alle Datenbankobjekte des ausführenden USER’s!
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
/*********************************************** * * Author: Karsten Besserdich * Firma: Besserdich & Redmann GmbH * Date: 02.01.2013 * URL: http://www.besserdich.com * EMail: kb@besserdich-redmann.com * * ACHTUNG: SQLPlus SCript loescht alle DB-Objekte * des ausführenden DB-USERS!!!!!!!!!!! * * Alle ausgefuehrten SQl-Statements werden in * einer Logdatei - drop_all_objects.log - abgespeichert. ************************************************/ SET serveroutput ON SET time ON SET timing ON SET linesize 250 SET Pagesize 50000 SPOOL drop_all_objects.log BEGIN -- Auslesen der DataDict View USER_OBJECTS. -- Einige Objekte werden nicht selektiert, -- da diese indirekt mitgeloescht werden. -- Dazu gehoeren z.B. Trigger, Indizes, Package Bodies usw. FOR rec IN ( SELECT uo.object_type object_type -- Um nicht alle Abhaengigkeiten auslesen und auswerten zu muessen, -- werden beim Objekt 'TYPE' der optionale Parameter FORCE angehaengt. -- Bei TABLE wird CASCADE CONSTRAINTS PURGE ergaenzt. ,case uo.object_type when 'TYPE' then ' "' || uo.object_name || '" FORCE' when 'TABLE' THEN ' "' || uo.object_name || '" CASCADE CONSTRAINTS PURGE' else ' "' || uo.object_name || '"' end object_name FROM user_objects uo WHERE 1=1 AND uo.object_type IN ('PACKAGE' ,'FUNCTION' ,'PROCEDURE' ,'SEQUENCE' ,'VIEW' ,'TABLE' ,'TYPE' ,'DATABASE LINK') order by uo.object_type ) LOOP BEGIN EXECUTE IMMEDIATE 'DROP ' || rec.object_type || rec.object_name; dbms_output.put_line ('DROP ' || rec.object_type || rec.object_name); EXCEPTION WHEN OTHERS THEN dbms_output.put_line ('ERROR: DROP ' || rec.object_type || rec.object_name || ' SQLCODE:' || sqlcode || ' sqlerrm:' || sqlerrm); END; END LOOP; END; / -- Papierkorb leeren :-) PURGE RECYCLEBIN SPOOL OFF |
3 KOMMENTARE

04
.
06
.
2013
Was ist mit database links?

05
.
06
.
2013
Hallo Antonius,
ich habe das Script angepasst. DB Links werden nun auch gelöscht!
Viele Grüße
Karsten Besserdich

31
.
08
.
2015
Ich hab noch einen Verbesserungsvorschlag:
Löschen der Scheduler Jobs und dessen Logging:
FOR rec IN
(
SELECT
job_name
FROM DBA_SCHEDULER_JOBS dsj
WHERE dsj.owner = user)
LOOP
BEGIN
DBMS_SCHEDULER.DROP_JOB (
JOB_NAME => rec.job_name,
FORCE => true
);
dbms_output.put_line ('JOB DROPPED:' || rec.job_name );
-- Loesche das Logging der Jobs
DBMS_SCHEDULER.PURGE_LOG(
LOG_HISTORY => 0,
JOB_NAME => user || '.' || rec.job_name);
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line ('ERROR: DROPPING JOB ' || rec.job_name || ' SQLCODE:' || sqlcode || ' sqlerrm:' || sqlerrm);
END;
END LOOP;