Проверка оракула sid и имени базы данных - PullRequest
96 голосов
/ 09 июня 2011

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

Я использую следующий запрос для проверки SID оракула

select instance from v$thread;

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

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

select name from v$database;

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

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

Ответы [ 6 ]

129 голосов
/ 09 июня 2011

Полагаю, select user from dual; должен дать текущему пользователю

и select sys_context('userenv','instance_name') from dual; имя экземпляра

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

51 голосов
/ 11 декабря 2013

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

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. Серхио Марсело

44 голосов
/ 14 июня 2011

Просто для полноты вы также можете использовать 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
19 голосов
/ 09 июня 2011

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

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

select * from global_name;

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

4 голосов
/ 09 июня 2015

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

SQL> select * from global_name;

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

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

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

2 голосов
/ 09 июня 2011

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

select global_name from global_name;

- это путь.

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

grant select on v$database to <username here>;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...