DROP USER CASCADE beschleunigen

30.
November
2006
Veröffentlicht von: Bernhard Koch

Ab und an müssen Datenbankuser gelöscht werden. Gibt es also eine Möglichkeit diesen Befehl zu beschleunigen? 

Ab und an müssen Datenbankuser gelöscht werden. Dieser Prozess kann einige Zeit in Anspruch nehmen, auch wenn die User "nur" über eine große Anzahl an Synonymen verfügen. Einige Minuten Wartezeit sind an dieser Stelle durchaus normal!

Gibt es also eine Möglichkeit diesen Befehl zu beschleunigen? 

Die Antwort lautet nein, aber es gibt die Möglichkeit den Prozess im Hintergrund laufen zu lassen. Dadurch sieht es so aus, als ob der Benutzer sofort gelöscht wird.

Das DBMS_JOB Package macht diesen kleinen Trick möglich.


Beispiel:

In diesem Beispiel soll der Benutzer TEST gelöscht werden.

Als erstes wird der Benutzer gesperrt. Nun kann sich kein Benutzer mehr unter diesem Account anmelden. Als nächsten Schritt starten wir einen Job, der im Hintergrund den Befehl ausführt.


Wichtig:

Das Löschen des Benutzers funktioniert nur, wenn Sie als SYS angemeldet sind oder als Benutzer, der das DROP USER-Recht direkt und nicht über eine Rolle zugewiesen bekommen hat.

CONNECT / as sysdba

DECLARE  
  JOB_ID NUMBER := 1;
BEGIN  
  EXECUTE IMMEDIATE('ALTER USER TEST ACCOUNT LOCK');  
  DBMS_JOB.SUBMIT(JOB_ID, 'EXECUTE IMMEDIATE ''DROP USER TEST CASCADE'';');  
  COMMIT;
END;
/


Zusammenfassung

Es gibt keine Möglichkeit, den DROP USER zu beschleunigen, da das Löschen der Objekte eine gewisse Zeit dauert. Es existiert aber die Chance, den Befehl im Hintergrund laufen zu lassen. Damit ist das Befehlsfenster nicht blockiert und die "normale" Arbeit kann ohne Beeinträchtigung fortgeführt werden.

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.