Я хочу проверить SID и текущее имя базы данных.
Я использую следующий запрос для проверки SID оракула
select instance from v$thread;
но таблица или представление не существует. Ошибка.
Я использую следующий запрос для проверки текущего имени базы данных
select name from v$database;
но таблица или представление не существует. Ошибка.
Любая идея для двух вышеперечисленных проблем?
Я предполагаю, что select user from dual;
должен предоставить вам текущего пользователя
и select sys_context('userenv','instance_name') from dual;
имя экземпляра
Я считаю, что вы можете получить SID как SELECT sys_context('USERENV', 'SID') FROM DUAL;
(не может проверить это сейчас)
Если, как и я, ваша цель - получить хост базы данных и 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. Серхио Марсело
Просто для полноты вы также можете использовать 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" и другое то, что было дано на время загрузки оракула.
Как уже упоминалось выше,
select global_name from global_name;
- путь.
Вы не можете запросить поток v $database/v $instance/v $, потому что у вашего пользователя нет необходимых разрешений. Вы можете предоставить им (через учетную запись администратора баз данных):
grant select on v$database to <username here>;