Ich wollte einige nicht verwendete Schemas in unserer Oracle-Datenbank löschen.
Wie kann ich alle Schemanamen abfragen?
Ich wollte einige nicht verwendete Schemas in unserer Oracle-Datenbank löschen.
Wie kann ich alle Schemanamen abfragen?
Antworten:
Verwenden von sqlplus
sqlplus / as sysdba
Lauf:
WÄHLEN * FROM dba_users
Wenn Sie nur die Benutzernamen möchten, gehen Sie wie folgt vor:
Benutzernamen auswählen FROM dba_users
Höchstwahrscheinlich möchten Sie
SELECT username
FROM dba_users
Das zeigt Ihnen alle Benutzer im System (und damit alle möglichen Schemata). Wenn Ihre Definition von "Schema" zulässt, dass ein Schema leer ist, möchten Sie dies. Es kann jedoch eine semantische Unterscheidung geben, bei der Benutzer etwas nur dann als Schema bezeichnen möchten, wenn es tatsächlich mindestens ein Objekt besitzt, sodass die 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 sinnvoll, Standardtabellenbereiche zuzuweisen, und wenn Sie nicht an von Oracle bereitgestellten Schemas interessiert sind, können Sie diese Schemas herausfiltern, indem Sie Prädikate für das hinzufügen default_tablespace
, d. H.
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 jedoch nicht ungewöhnlich, dass Sie auf ein System stoßen, bei dem jemand einem Nicht-Systembenutzer fälschlicherweise eine default_tablespace
von gegeben SYSTEM
hat. Stellen Sie daher sicher, dass die Annahmen zutreffen , bevor Sie versuchen, die von Oracle bereitgestellten Schemata auf diese Weise herauszufiltern.
select distinct owner from dba_objects
?
SELECT username FROM all_users ORDER BY username;
dba_users
(zB: Fehler ORA-00942 : table or view does not exist
)
select distinct owner
from dba_segments
where owner in (select username from dba_users where default_tablespace not in ('SYSTEM','SYSAUX'));
Wie wäre es mit :
SQL> select * from all_users;
Es wird eine Liste aller Benutzer / Schemas, deren IDs und Erstellungsdatum in der Datenbank zurückgegeben:
USERNAME USER_ID CREATED
------------------------------ ---------- ---------
SCHEMA1 120 09-SEP-15
SCHEMA2 119 09-SEP-15
SCHEMA3 118 09-SEP-15
Unter SQL sind alle Schemata in Oracle aufgeführt, die nach der Installation erstellt wurden. ORACLE_MAINTAINED = 'N' ist der Filter. Diese Spalte ist neu in 12c.
Wählen Sie einen eindeutigen Benutzernamen ORACLE_MAINTAINED aus dba_users aus, wobei ORACLE_MAINTAINED = 'N';
Jedes der folgenden SQLs gibt alle Schemas in Oracle DB zurück.
select owner FROM all_tables group by owner;
select distinct owner FROM all_tables;