Ich arbeite an einem Datenmigrationsprojekt, und jeder Entwickler hat seine eigenen Schemata. (Einige Entwickler sind gegangen und einige Schemasätze werden nicht mehr verwendet.)
Vicsz
Antworten:
130
Verwenden von sqlplus
sqlplus / as sysdba
Lauf:
WÄHLEN *
FROM dba_users
Wenn Sie nur die Benutzernamen möchten, gehen Sie wie folgt vor:
Stellen Sie jedoch sicher, dass Sie über Berechtigungen für Ihren Benutzer verfügen.
Diagonalbatman
2
@ Andy: Deshalb habe ich "als privilegierter Benutzer" geschrieben;)
a_horse_with_no_name
@horse Entschuldigung, das habe ich verpasst.
Diagonalbatman
@a_horse_with_no_name bedeutet das, dass ein Schema in Oracle bedeutet, dass es ein Benutzer ist? Ich meine ein Schema = Benutzer? und unter diesem Benutzer alle Tabellen wie MySQL erstellt?
Osama Al-Banna
66
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
WHEREEXISTS(SELECT1FROM 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 notin('SYSTEM','SYSAUX')
oder
SELECT username
FROM dba_users u
WHEREEXISTS(SELECT1FROM dba_objects o
WHERE o.owner = u.username )AND default_tablespace notin('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_tablespacevon gegeben SYSTEMhat. Stellen Sie daher sicher, dass die Annahmen zutreffen , bevor Sie versuchen, die von Oracle bereitgestellten Schemata auf diese Weise herauszufiltern.
Wenn Sie dies mit dem Prädikat where aus der FeRtoll-Abfrage kombinieren, erhalten Sie eine ziemlich sichere Abfrage (die SYS oder SYSTEM wahrscheinlich nicht beeinträchtigt).
Karl
1
Wie unterscheidet sich das von select distinct owner from dba_objects?
Dawood ibn Kareem
1
Nun, auf einer sauberen Oracle-Instanz liefert Ihre Abfrage @David einen zusätzlichen PUBLIC-Eigentümer
Soweit ich weiß, werden bei dieser Abfrage alle Schemas angezeigt, die Tabellen enthalten. Ist das richtig?
Andrew Spencer
1
Dies funktioniert nur in älteren Versionen von Oracle zuverlässig. Mit der verzögerten Segmenterstellung ist es möglich, ein Objekt ohne Segment zu haben.
Jon Heller
4
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:
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';
Antworten:
Verwenden von sqlplus
sqlplus / as sysdba
Lauf:
Wenn Sie nur die Benutzernamen möchten, gehen Sie wie folgt vor:
quelle
Höchstwahrscheinlich möchten Sie
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
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.oder
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 gegebenSYSTEM
hat. Stellen Sie daher sicher, dass die Annahmen zutreffen , bevor Sie versuchen, die von Oracle bereitgestellten Schemata auf diese Weise herauszufiltern.quelle
select distinct owner from dba_objects
?quelle
dba_users
(zB: FehlerORA-00942 : table or view does not exist
)quelle
Wie wäre es mit :
Es wird eine Liste aller Benutzer / Schemas, deren IDs und Erstellungsdatum in der Datenbank zurückgegeben:
quelle
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.
quelle
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;
quelle