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.
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.
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;
/
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.
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.