Проверка sid оракула и имени базы данных


115

Я хочу проверить SID и текущее имя базы данных.

Я использую следующий запрос для проверки идентификатора безопасности оракула

select instance from v$thread;

но таблица или представление не существует, возникает ошибка.

Я использую следующий запрос для проверки текущего имени базы данных

select name from v$database;

но таблица или представление не существует, возникает ошибка.

Есть идеи по поводу двух вышеуказанных проблем?

Ответы:


148

Я полагаю, SELECT user FROM dual;должен дать вам текущего пользователя

и SELECT sys_context('userenv','instance_name') FROM dual;название экземпляра

Я считаю, что вы можете получить SID как SELECT sys_context('USERENV', 'SID') FROM DUAL;


1
Спасибо за быстрый ответ. Являются ли SID экземпляра и Oracle SID одним и тем же?
Аднан

2
@Adnan Они не обязательно должны быть одинаковыми, поскольку на одной машине может быть несколько экземпляров БД, которые идентифицируются по SID
V4Vendetta

@adnan Получили ли вы нужные значения?
V4Vendetta 09

8
select sys_context('userenv','db_name') from dual;для имени базы данных и sid я уже добавил в ответ. надеюсь, это даст вам то, что вы хотите
V4Vendetta

2
Пожалуйста, проверьте эту ссылку
V4Vendetta

57

Если, как и я, ваша цель - получить хост базы данных и SID для создания URL-адреса Oracle JDBC, как

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

следующие команды помогут:

Команда запроса Oracle для проверки SID (или имени экземпляра):

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

Команда запроса Oracle для проверки имени базы данных (или хоста сервера):

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

Att. Серджио Марсело


Отлично. Это именно то, что я хотел знать, но не знал, как сформулировать.
Addison

Я тоже. Спасибо, Серджио!
Horseatingweeds

49

Для полноты вы также можете использовать ORA_DATABASE_NAME.

Возможно, стоит отметить, что не все методы дают одинаковый результат:

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

Для приведенных выше запросов не требуются специальные разрешения. Проверено путем создания нового пользователя только с привилегией CONNECT.
bdeem 03

22

Представления V $ - это в основном динамические представления системных показателей. Они используются для настройки производительности, мониторинга сеансов и т. Д. Таким образом, по умолчанию доступ ограничен для пользователей DBA, поэтому вы и получаете ORA-00942.

Самый простой способ найти имя базы данных:

select * from global_name;

Это представление предоставляется PUBLIC, поэтому любой может запросить его.


Что насчет SID оракула? Есть ли какой-нибудь способ проверить это со счета scott?
Аднан

1
Это имя службы, а не SID.
jpmc26

5

Введите в sqlplusкомандной строке

SQL> select * from global_name;

тогда вы увидите результат в командной строке

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

Здесь первое "ORCL" - это имя базы данных, может быть ваша система "XE" и другое, что было дано во время загрузки оракула.


Спасибо, ты сделал мой день.
Мухаммад Ашикуззаман

2

Как уже упоминалось выше,

select global_name from global_name;

это путь.

Вы не можете запросить v $ database / v $ instance / v $ thread, потому что у вашего пользователя нет необходимых разрешений. Вы можете предоставить их (через учетную запись администратора базы данных) с помощью:

grant select on v$database to <username here>;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.