Heim  >  Artikel  >  php教程  >  Detaillierte Einführung in das Löschen von Benutzern und Tabellenbereichen in Oracle

Detaillierte Einführung in das Löschen von Benutzern und Tabellenbereichen in Oracle

高洛峰
高洛峰Original
2017-01-06 11:37:221572Durchsuche

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;
Weitere Oracle-bezogene Artikel zum detaillierten Löschen von Benutzern und Tabellenbereichen finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn