Jak wyświetlić listę baz danych w Oracle?

33

Czy istnieje odpowiednik SHOW DATABASESinstrukcji MySQL ?

Czy można znaleźć bazy danych w klastrze? tj. bazy danych obecne w sieci w innym systemie?

Czy mogę przeanalizować pliki obecne w instalacji Oracle, aby znaleźć to samo?

Biorąc pod uwagę pełne dane dostępu do systemu Oracle, jak byś wyliczył wszystkie istniejące bazy danych?

Kshitiz Sharma
źródło
4
Należy również zauważyć, że istnieje niezgodność terminologiczna między MySQL a bazą danych Oracle. Pod względem architektury Oracle ma table-> schemat-> bazę danych, a jednocześnie table-> tablepace-> bazę danych. MySQL ma po prostu tabelę-> bazę danych. Więc może naprawdę szukasz listy schematów Oracle (pomyśl: przestrzenie nazw SQL dla tabel) lub listy obszarów tabel Oracle (pomyśl: grupy plików systemu operacyjnego dla tabel).
kubańczyk

Odpowiedzi:

22

Czy istnieje odpowiednik SHOW DATABASESinstrukcji MySQL ?

Nie ma takiej rzeczy. Możesz wysyłać zapytania do detektorów na maszynie ( lsnrctl status), aby zobaczyć, jakie usługi są tam zarejestrowane, ale to nie mapuje jeden do jednego do bazy danych (i może być wielu detektorów na tym samym komputerze). W przeciwnym razie często używane narzędzia łączą się z jedną instancją bazy danych, a instancja należy do jednej bazy danych.

Jeśli mówisz o klastrach Oracle RAC, to każda instancja wie o swoich elementach równorzędnych (inne instancje obsługujące tę samą bazę danych) i możesz znaleźć inne instancje aktualnie uruchomione dla tej bazy danych za pomocą gv$instancewidoku.
Możesz także użyć tego crsctlnarzędzia, aby wyświetlić listę usług (w tym baz danych) zarejestrowanych w klastrze oraz ich status.
Jeśli mówisz o oprogramowaniu do klastrowania innego dostawcy, jestem prawie pewien, że wszystkie mają tego rodzaju narzędzia do zarządzania zasobami, które mogą wysyłać zapytania.

Jeśli mówisz tylko o kilku maszynach, to nie, nie ma 100% niezawodnego sposobu wyliczenia wszystkich baz danych w sieci.

Aby znaleźć aktywne (tj. Uruchomione) bazy danych, poszukaj *_pmon_*procesów w systemie Unix (istnieje jedna na instancję bazy danych) i usług Oracle w systemie Windows.

Aby zlokalizować instalacje oprogramowania bazy danych Oracle, spójrz /etc/oratabna Unix. Powinien zawierać wszystkie ORACLE_HOMEzainstalowane. Można zajrzeć do wnętrza każdego z tych w $ORACLE_HOME/dbsza spfile<SID>.orai / lub init<SID>.oraplików - nie będzie po jednym dla każdej bazy danych.

(Myślę, że możesz znaleźć odpowiednik informacji w oratabkluczach rejestru systemu Windows poniżej HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE, ale nie znam jego struktury).

Teraz, oczywiście, jeśli zarejestrowałeś całą bazę danych na serwerze OEM (Enterprise Manager) podczas ich instalacji, możesz znaleźć tam pełną listę - ale myślę, że jeśli pytasz, to nie jest tak.

Mata
źródło
12

Oracle nie ma baz danych, ale schematy, z których można je wymienić

SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME; 

lub coś w tym stylu :

SELECT TABLESPACE_NAME FROM USER_TABLESPACES;
DevYudh
źródło
2
Przestrzenie tabel nie są ogólnie powiązane ze schematami.
Mat.
2
WSZYSCY UŻYTKOWNICY? USER_TABLESPACES?
kubańczyk
„Czy istnieje odpowiednik instrukcji MySQL SHOW DATABASES?” Próbuję odpowiedzieć na to pytanie. nie mów, że nie wiesz
DevYudh
1
@DevYudh: obszar tabel w Oracle jest czymś zupełnie innym niż „baza danych” w MySQL. Pierwsze zapytanie, jeśli jest poprawne, drugie zapytanie jest po prostu błędne
a_horse_w_na_nazwa
11

Mówiąc najprościej, nie ma bezpośredniej analogii do „baz danych” MySQL lub „klastra” w Oracle: najbliższym dopasowaniem jest „schemat”, ale wciąż jest to zupełnie inne.

Wygląda na to, że zmieni się to w 12c wraz z wprowadzeniem wtykowych baz danych:

Czyste oddzielenie operacji bazy danych od treści użytkownika jest poważną transformacją w stosunku do tradycyjnych architektur baz danych. Kyte powiedział, że Oracle 11g i wszystkie jego poprzednicy mogą uruchamiać tylko jedną bazę danych na raz. Jeśli organizacja chce uruchomić wiele baz danych na jednym serwerze, musi uruchomić wiele instancji Oracle 11g, po jednej dla każdej bazy danych. Jak sama nazwa wskazuje, wtykowe bazy danych umożliwiają działanie wielu baz danych dzierżawców w ramach jednej kopii Oracle 12c.

Jack Douglas
źródło
Uh, więcej komplikacji, więcej bezpieczeństwa pracy ...
kubańczyk
6

Myślę, że odpowiedzią dla przyszłych przeglądarek na * nix może być:

cat / etc / oratab

rlblyler
źródło
3

Wystarczy połączyć się z ASM i sprawdzić klienta bazy danych.

set pages 999 lines 120
col SOFTWARE_VERSION for A15
col INSTANCE_NAME for A20
col DB_NAME for A20 trunc
select INSTANCE_NAME, DB_NAME, STATUS, SOFTWARE_VERSION as "version"
from  V$ASM_CLIENT;
t.menard
źródło
1
Zakłada się, że ASM jest używany! Co z bazami danych przechowywanymi w systemie plików lub sieci SAN?
Colin 't Hart
3

Jeśli masz wtykowe bazy danych (zalecane) na Oracle 12, możesz wykonać następujące czynności:

SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID;
Piotr
źródło
0

W przypadku autonomicznej bazy danych, aby uzyskać listę baz danych, które są uruchamiane automatycznie po ponownym uruchomieniu hosta:

cat /etc/oratab | grep -i ":y" | grep -v "^#"

lub po prostu, aby uzyskać listę wszystkich baz danych:

cat /etc/oratab | grep -v "^#"

W przypadku baz danych RAC przydatna może być następująca metoda:

crsctl stat res -t | grep "\.db"

Jak już wspomniano, baza danych w MySQL nie jest tym samym, co baza danych w Oracle. W Oracle jest bardziej zbliżony do schematu - który jest nazywany kontenerem dla obiektów użytkownika. Aby uzyskać listę schematów, możesz użyć następującej instrukcji SQL:

select username from dba_users order by 1;

lub aby uzyskać listę schematów niezwiązanych z systemem (dostępne w Oracle RDBMS od wersji 12c):

select username from dba_users where ORACLE_MAINTAINED='N' order by 1;
Prochochii
źródło