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

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

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

select instance from v$thread;

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

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

select name from v$database;

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

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

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

Если, как и я, ваша цель - получить хост базы данных и 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. Серхио Марсело

Ответ 4

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

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

select * from global_name;

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

Ответ 5

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

SQL> select * from global_name;

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

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

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

Ответ 6

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

select global_name from global_name;

- путь.

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

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