Sprawdzanie identyfikatora Oracle i nazwy bazy danych

115

Chcę sprawdzić SID i nazwę aktualnej bazy danych.

Używam następującego zapytania do sprawdzania identyfikatora SID Oracle

select instance from v$thread;

ale tabela lub widok nie istnieje, nadchodzi błąd.

Używam następującego zapytania do sprawdzenia aktualnej nazwy bazy danych

select name from v$database;

ale tabela lub widok nie istnieje, nadchodzi błąd.

Masz jakiś pomysł na powyższe dwa problemy?

Adnan
źródło

Odpowiedzi:

148

Przypuszczam, że SELECT user FROM dual;powinienem podać aktualnego użytkownika

i SELECT sys_context('userenv','instance_name') FROM dual;nazwa instancji

Wierzę, że możesz uzyskać SID jako SELECT sys_context('USERENV', 'SID') FROM DUAL;

V4Vendetta
źródło
1
Dzięki za szybką odpowiedź. Czy instancja i Oracle SID to to samo?
Adnan,
2
@Adnan Nie muszą być takie same, ponieważ może istnieć wiele instancji bazy danych działających na jednym komputerze, które są identyfikowane przez SID
V4Vendetta,
@adnan Czy otrzymałeś potrzebne wartości?
V4Vendetta
8
select sys_context('userenv','db_name') from dual;dla nazwy bazy danych i identyfikatora sid już dodałem w odpowiedzi. mam nadzieję, że to daje ci to, czego chcesz
V4Vendetta
2
Proszę sprawdzić ten link
V4Vendetta,
57

Jeśli, tak jak ja, Twoim celem jest uzyskanie hosta bazy danych i identyfikatora SID w celu wygenerowania adresu URL Oracle JDBC, as

jdbc:oracle:thin:@<server_host>:1521:<instance_name>

następujące polecenia pomogą:

Polecenie zapytania Oracle w celu sprawdzenia identyfikatora SID (lub nazwy instancji):

select sys_context('userenv','instance_name') from dual; 

Polecenie zapytania Oracle w celu sprawdzenia nazwy bazy danych (lub hosta serwera):

select sys_context('userenv', 'server_host') from dual;

Att. Sergio Marcelo

Sergio MC Figueiredo
źródło
Idealny. To jest dokładnie to, co chciałem wiedzieć, ale nie wiedziałem, jak to wyrazić.
Addison
Ja też. Dzięki Sergio!
końskie chwasty
48

Dla kompletności możesz również użyć ORA_DATABASE_NAME.

Warto zauważyć, że nie wszystkie metody dają takie same wyniki:

SQL> select sys_context('userenv','db_name') from dual;

SYS_CONTEXT('USERENV','DB_NAME')
--------------------------------------------------------------------------------
orcl

SQL> select ora_database_name from dual;

ORA_DATABASE_NAME
--------------------------------------------------------------------------------
ORCL.XYZ.COM

SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
ORCL.XYZ.COM
Patrick Marchand
źródło
Powyższe zapytania nie wymagają żadnych specjalnych uprawnień. Weryfikacja polega na utworzeniu nowego użytkownika tylko z uprawnieniem CONNECT.
bdeem
22

Wyświetlenia V $ to głównie dynamiczne widoki metryk systemowych. Są one używane do dostrajania wydajności, monitorowania sesji itp. Dlatego dostęp jest domyślnie ograniczony do użytkowników DBA, i dlatego otrzymujesz ORA-00942.

Najłatwiejszym sposobem znalezienia nazwy bazy danych jest:

select * from global_name;

Ten widok jest przyznawany PUBLIC, więc każdy może go zapytać.

APC
źródło
Co z Oracle SID? Czy jest jakaś metoda sprawdzenia tego z konta Scott?
Adnan,
1
To nazwa usługi, a nie identyfikator SID.
jpmc26
5

Wpisz w sqlpluswierszu polecenia

SQL> select * from global_name;

wtedy zobaczysz wynik w wierszu polecenia

SQL ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM

Tutaj pierwszy "ORCL" to nazwa bazy danych, może to być twój system "XE" i inne to, co zostało podane w czasie pobierania oracle.

anant kumar
źródło
Dzięki, poprawiłeś mi humor.
Muhammad Ashikuzzaman
2

Jak wspomniano powyżej,

select global_name from global_name;

jest droga do zrobienia.

Nie można wysłać zapytania do wątku v $ database / v $ instance / v $, ponieważ użytkownik nie ma wymaganych uprawnień. Możesz im przyznać (za pośrednictwem konta DBA):

grant select on v$database to <username here>;
Phil
źródło