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?

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;


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


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

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ć.


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.


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>;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.