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

73

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

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

select instance from v$thread;

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

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

select name from v$database;

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

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

Теги:
oracle10g

6 ответов

92
Лучший ответ

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

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

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

  • 1
    Спасибо за быстрый ответ. Экземпляр и оракул SID - это одно и то же?
  • 2
    @Adnan Они не обязательно должны быть одинаковыми, так как может быть несколько экземпляров БД, работающих на одном компьютере, которые они идентифицируют по SID
Показать ещё 8 комментариев
38

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

  • 0
    Отлично. Это именно то, что я хотел знать, но не знал, как сформулировать.
  • 0
    Я тоже. Спасибо, Серхио!
37

Просто для полноты вы также можете использовать 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
  • 0
    Никаких специальных разрешений не требуется для запросов выше. Проверено созданием нового пользователя только с привилегией CONNECT.
15

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

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

select * from global_name;

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

  • 0
    Что насчет оракула SID? Есть ли способ проверить это со счета Скотта?
  • 1
    Это имя службы, а не SID.
4

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

SQL> select * from global_name;

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

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

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

  • 0
    Спасибо, ты сделал мой день.
1

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

select global_name from global_name;

- путь.

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню