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

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

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

select instance from v$thread;

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

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

select name from v$database;

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

любая идея для выше двух проблем?

6 ответов


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

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

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


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

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

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

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

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

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

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

Att. Серхио Марсело!--4-->


для полноты вы также можете использовать 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

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

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

select * from global_name;

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


типа sqlplus командная строка

SQL> select * from global_name;

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

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

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


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

select global_name from global_name;

- это путь.

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

grant select on v$database to <username here>;