Löschen aller Objekte eines Schemas
Die Abfrage der untenstehenden drop alle Tabellen, die vorhanden sind, in die der aktuelle Benutzer Ein schema (normal-Szenario).
select 'drop '||object_type||' '|| object_name || ';'
from user_objects
where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX');
Was aber, wenn diese Abfrage ausgeführt wird, die durch die DBA mit einem SYS-oder SYSDBA anmelden? Welche Objekte sind in der user_objects anzeigen, wenn Sie angemeldet sind können mit sys/sysdba-Benutzer? Wird es drop alle Tabellen werden alle schemas in der Datenbank oder wird die Abfrage einen Fehler auslösen? Die Absicht ist, fallen nur die Objekte des Schemas A'.
- Um genau zu sein: die Abfrage kein drop, nichts. Es gibt-Anweisung, die etwas fallen lassen. Und die Aussagen fallen sichten, Pakete und einige andere Gegenstände, aber nie wird eine Tabelle gelöscht werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
user_objects
Sicht hat der aktuelle Benutzer die Objekte, so dass, wenn als SYS ausgeführt werden es versuchen würde, um die drop-SYS-Objekte - sehr schlechte Nachrichten, als wäre es Ihre Datenbank zerstören. Sie können Lesen Sie über die drei Versionen des tdas Ansicht in der Dokumentation.SYS zu sehen, ein anderer Benutzer die Objekte, die Sie sollten sich auf die
dba_objects
Ansicht statt, Filter auf den Benutzer, den Sie interessiert sind, und die Ziel-schema (Eigentümer) in die drop-Anweisung zu:Habe ich auch im Lieferumfang enthalten die Verpackung der Objekt-Namen (und weniger sinnvoll, der Eigentümer), in Anführungszeichen, im Falle dass es irgendwelche Objekte, die erstellt wurden, mit Bezeichner.
Wenn man die Tabellen in der Abfrage, und versucht zu starten der Ausgabe erhalten Sie möglicherweise Fehler, zu versuchen zu fallen abhängig obects in der falschen Reihenfolge, D. H. ablegen in einer übergeordneten Tabelle, bevor Sie seine Kinder. Es gibt Objekt-Typen auch, aber wenn Sie letztlich wollen, um alles zu löschen, könnte es einfacher sein, zu löschen und neu erstellen der Benutzer - Erfassung und Nachbildung der Ihre Privilegien zu.
Nicht ausgeführt, wenn Sie als SYS es wird Ihre Datenbank zerstören.
Versuchen diese. Es wird prompt 3 mal für schema-name gelöscht werden.
Hüten Sie dieses Skript vielleicht stecken in einer Endlosschleife, wenn Sie neugierig Objekt-Typ in Ihrem schema (wie SCHEDULER KETTE - für Beispiel)
FYI, die folgende Abfrage generiert nur alle sql -, dann müssen Sie die Ausführung der generierten sql-Code, um tatsächlich Dinge zu erledigen.
select 'drop '||object_type||' '|| object_name || ';'
from user_objects
wo object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX', 'TABELLE');