Pracuję nad projektem migracji danych i każdy programista ma swój własny zestaw schematów. (Niektórzy programiści odeszli, a niektóre zestawy schematów nie są już używane).
vicsz
Odpowiedzi:
130
Korzystanie z sqlplus
sqlplus / jako sysdba
biegać:
WYBIERZ *
OD dba_users
Jeśli chcesz, aby nazwy użytkowników były tylko następujące:
Upewnij się jednak, że masz uprawnienia swojego użytkownika.
diagonalbatman
2
@Andy: dlatego napisałem „jako uprzywilejowany użytkownik”;)
a_horse_with_no_name
@horse Przepraszamy, brakowało mi tego.
diagonalbatman
@a_horse_with_no_name czy to oznacza, że schemat w Oracle oznacza, że jest to użytkownik? Mam na myśli schemat = użytkownik? i pod tym użytkownikiem wszystkie tabele utworzone tak samo jak MySQL?
Osama Al-Banna
66
Najprawdopodobniej chcesz
SELECT username
FROM dba_users
To pokaże Ci wszystkich użytkowników w systemie (a tym samym wszystkie potencjalne schematy). Jeśli Twoja definicja „schematu” pozwala, aby schemat był pusty, tego właśnie chcesz. Jednak może istnieć rozróżnienie semantyczne, w którym ludzie chcą nazywać coś schematem tylko wtedy, gdy faktycznie jest właścicielem co najmniej jednego obiektu, więc setki kont użytkowników, które nigdy nie będą posiadać żadnych obiektów, zostaną wykluczone. W tym wypadku
SELECT username
FROM dba_users u
WHEREEXISTS(SELECT1FROM dba_objects o
WHERE o.owner = u.username )
Zakładając, że ktokolwiek stworzył schematy był rozsądny w przypisywaniu domyślnych obszarów tabel i zakładając, że nie jesteś zainteresowany schematami dostarczonymi przez Oracle, możesz odfiltrować te schematy, dodając predykaty na default_tablespace, tj.
SELECT username
FROM dba_users
WHERE default_tablespace notin('SYSTEM','SYSAUX')
lub
SELECT username
FROM dba_users u
WHEREEXISTS(SELECT1FROM dba_objects o
WHERE o.owner = u.username )AND default_tablespace notin('SYSTEM','SYSAUX')
Nierzadko zdarza się jednak natknąć się na system, w którym ktoś niepoprawnie dał użytkownikowi niesystemowemu wartość default_tablespaceof SYSTEM, więc upewnij się, że założenia są prawdziwe , zanim spróbujesz odfiltrować schematy dostarczone przez Oracle w ten sposób.
Odpowiedzi:
Korzystanie z sqlplus
sqlplus / jako sysdba
biegać:
Jeśli chcesz, aby nazwy użytkowników były tylko następujące:
źródło
Najprawdopodobniej chcesz
To pokaże Ci wszystkich użytkowników w systemie (a tym samym wszystkie potencjalne schematy). Jeśli Twoja definicja „schematu” pozwala, aby schemat był pusty, tego właśnie chcesz. Jednak może istnieć rozróżnienie semantyczne, w którym ludzie chcą nazywać coś schematem tylko wtedy, gdy faktycznie jest właścicielem co najmniej jednego obiektu, więc setki kont użytkowników, które nigdy nie będą posiadać żadnych obiektów, zostaną wykluczone. W tym wypadku
Zakładając, że ktokolwiek stworzył schematy był rozsądny w przypisywaniu domyślnych obszarów tabel i zakładając, że nie jesteś zainteresowany schematami dostarczonymi przez Oracle, możesz odfiltrować te schematy, dodając predykaty na
default_tablespace
, tj.lub
Nierzadko zdarza się jednak natknąć się na system, w którym ktoś niepoprawnie dał użytkownikowi niesystemowemu wartość
default_tablespace
ofSYSTEM
, więc upewnij się, że założenia są prawdziwe , zanim spróbujesz odfiltrować schematy dostarczone przez Oracle w ten sposób.źródło
select distinct owner from dba_objects
?źródło
dba_users
(np. BłądORA-00942 : table or view does not exist
)źródło
Co powiesz na :
zwróci listę wszystkich użytkowników / schematów, ich ID i datę utworzenia w DB:
źródło
Poniżej sql zawiera listę wszystkich schematów w Oracle, które są tworzone po instalacji ORACLE_MAINTAINED = 'N' to filtr. Ta kolumna jest nowa w 12c.
źródło
Każda z poniższych instrukcji SQL zwróci cały schemat w bazie danych Oracle.
select owner FROM all_tables group by owner;
select distinct owner FROM all_tables;
źródło