wake-up-neo.net

Oracle SQL-Abfrage zum Auflisten aller Schemas in einer Datenbank

Ich wollte einige nicht verwendete Schemas in unserer Oracle-Datenbank löschen. 

Wie kann ich alle Schemanamen abfragen?

78
vicsz

Sqlplus verwenden

sqlplus/als sysdba

lauf:

 SELECT * 
 FROM dba_users 

Wenn Sie nur die Benutzernamen wünschen, gehen Sie wie folgt vor:

 SELECT Benutzername 
 FROM dba_users 
113

Wahrscheinlich willst du

SELECT username
  FROM dba_users

Das zeigt Ihnen alle Benutzer im System (und damit alle möglichen Schemata). Wenn Ihre Definition von "Schema" ein leeres Schema zulässt, möchten Sie dies auch. Es kann jedoch eine semantische Unterscheidung geben, bei der Personen nur dann etwas als Schema bezeichnen möchten, wenn es tatsächlich mindestens ein Objekt besitzt, sodass Hunderte von Benutzerkonten, die niemals Objekte besitzen, ausgeschlossen werden. In diesem Fall

SELECT username
  FROM dba_users u
 WHERE EXISTS (
    SELECT 1
      FROM dba_objects o
     WHERE o.owner = u.username )

Angenommen, derjenige, der die Schemas erstellt hat, war mit der Zuweisung von Standard-Tablespaces und der Annahme, dass Sie kein Interesse an von Oracle bereitgestellten Schemas haben, geeignet, Sie können diese Schemas herausfiltern, indem Sie Prädikate im default_tablespace hinzufügen, d.

SELECT username
  FROM dba_users
 WHERE default_tablespace not in ('SYSTEM','SYSAUX')

oder

SELECT username
  FROM dba_users u
 WHERE EXISTS (
    SELECT 1
      FROM dba_objects o
     WHERE o.owner = u.username )
   AND default_tablespace not in ('SYSTEM','SYSAUX')

Es ist nicht ungewöhnlich, auf ein System zu stoßen, bei dem jemand einem Nicht-Systembenutzer einen default_tablespace von SYSTEM falsch gegeben hat. Stellen Sie daher sicher, dass die Annahmen zutreffen, bevor Sie versuchen, die von Oracle bereitgestellten Schemata auf diese Weise herauszufiltern.

58
Justin Cave
SELECT username FROM all_users ORDER BY username;
21
suhprano
select distinct owner 
from dba_segments
where owner in (select username from dba_users where default_tablespace not in ('SYSTEM','SYSAUX'));
7
FeRtoll

Wie wäre es mit :

SQL> select * from all_users;

es wird eine Liste aller Benutzer/Schemas, deren IDs und Datums in der DB erstellt:

USERNAME                          USER_ID CREATED
------------------------------ ---------- ---------
SCHEMA1                         120 09-SEP-15
SCHEMA2                         119 09-SEP-15
SCHEMA3                         118 09-SEP-15
3
mauek unak

Unterhalb von sql sind alle in Oracle nach der Installation erstellten Schemas aufgeführt Oracle_MAINTAINED = 'N' ist der Filter. Diese Spalte ist neu in 12c.

wählen Sie einen eindeutigen Benutzernamen, Oracle_MAINTAINED von dba_users aus, wobei Oracle_MAINTAINED = 'N';
1
sidnakoppa

Eine der folgenden SQL-Anweisungen gibt das gesamte Schema in Oracle DB zurück. 

  1. select owner FROM all_tables group by owner;
  2. select distinct owner FROM all_tables;
0
Sreeju