Oracle löscht Benutzer und Tablespaces
Oracle wird seit langem verwendet und viele neue Benutzer und Tablespaces wurden hinzugefügt
Für eine Einzelbenutzer und Tabellenbereich können Sie mit dem folgenden Befehl abschließen.
Schritt 1: Benutzer löschen
drop user ×× cascade
Hinweis: Durch das Löschen eines Benutzers werden nur die Schemaobjekte unter dem Benutzer gelöscht, nicht jedoch der entsprechende Tablespace.
Schritt 2: Tabellenbereich löschen
DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;
Da es sich jedoch um eine Datenbank für die Entwicklungsumgebung handelt, müssen viele Benutzer- und Tabellenbereiche bereinigt werden.
Idee:
Alle Benutzer und Tablespaces in die Datenbank exportieren, System- und nützliche Tablespaces herausfiltern und nützliche Informationen in eine Tabelle laden. Schreiben Sie dann eine Routineschleife, um den Tablespace zu löschen, der nicht in der nützlichen Tabelle enthalten ist
1 select username,default_tablespace from dba_users;
2 >
3.create table MTUSEFULSPACE ( ID Number(4) NOT NULL PRIMARY KEY, USERNAME varchar2(30), TABLESPACENAME varchar2(60), OWNERNAME varchar2(30) );
declare icount number(2); tempspace varchar2(60); begin for curTable in (select username as allusr,default_tablespace as alltblspace from dba_users) loop tempspace :=curTable.alltblspace; dbms_output.put_line(tempspace); select count(TABLESPACENAME) into icount from MTUSEFULSPACE where TABLESPACENAME = tempspace; if icount=0 then DROP TABLESPACE tempspace INCLUDING CONTENTS AND DATAFILES; end if; commit; end loop; end;
Nach der Ausführung wird der folgende Fehler gemeldet
ORA-06550: 第 10 行, 第 5 列: PLS-00103: 出现符号 "DROP"在需要下列之一时: begin case declare exit for goto if loop mod null pragma raise return select update while with <an identifier> <a double-quoted delimited-identifier> <a bind variable> << close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe 06550. 00000 - "line %s, column %s:\n%s" *Cause: Usually a PL/SQL compilation error. *Action:
Es scheint gesperrt zu sein. .
Es gibt keine Möglichkeit, die Routine kann nicht geschrieben werden, also können wir nur Anweisungen formulieren und ausführen.
Exportieren Sie die Benutzer und Tablespaces, die gelöscht werden müssen, nach Excel. Verwenden Sie CONCATENATE, um die SQL zu gruppieren.
Posten Sie sie zur Stapelausführung in SQLdevelop.
Die gesamte Löschung wird zeitaufwändig sein. Bei mehr als 100 Benutzern dauerte es etwa 12 Stunden.
Wenn Sie den spezifischen Speicherort der Datendatei ermitteln möchten, können Sie
select t1.name,t2.name from v$tablespace t1, v$datafile t2 where t1.ts# = t2.ts#;
SQL-Code
--Leere Tabellenbereiche löschen, die jedoch keine physischen Dateien enthalten
drop tablespace tablespace_name;
--Nicht leere Tabellenbereiche löschen , aber keine physischen Dateien enthalten. Datei
drop tablespace tablespace_name including contents;
– leeren Tabellenbereich löschen, einschließlich physischer Datei
drop tablespace tablespace_name including datafiles;
--Löschen Sie nicht leere Tabellenbereiche, einschließlich physischer Dateien
drop tablespace tablespace_name including contents and datafiles;
--Wenn andere Tabellenbereiche Wenn die Tabelle in Fremdschlüssel und andere Einschränkungen aufweist, die mit den Feldern der Tabelle in diesem Tabellenbereich verknüpft sind, müssen Sie CASCADE CONSTRAINTS hinzufügen
Vielen Dank fürs Lesen, ich hoffe, dass dies möglich ist Helfen Sie allen, vielen Dank für Ihre Unterstützung dieser Website!
drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;