Перевірка sracle і імені бази даних


115

Я хочу перевірити SID та поточну назву бази даних.

Я використовую наступний запит для перевірки Oracle SID

select instance from v$thread;

але таблиця чи перегляд не існує помилка приходить.

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

select name from v$database;

але таблиця чи перегляд не існує помилка приходить.

Будь-яка ідея для вище двох проблем?

Відповіді:


148

Я припускаю, що SELECT user FROM dual;ви повинні дати вам поточного користувача

і SELECT sys_context('userenv','instance_name') FROM dual;ім'я екземпляра

Я вважаю, ви можете отримати SID як SELECT sys_context('USERENV', 'SID') FROM DUAL;


1
Дякую за швидку відповідь. Є екземпляр та Oracle SID те саме?
Аднан

2
@Adnan Вони не повинні бути однаковими, оскільки може бути декілька екземплярів БД, що працюють на одній машині, їх ідентифікує SID
V4Vendetta

@adnan Чи отримали ви потрібні значення?
V4Vendetta

8
select sys_context('userenv','db_name') from dual;для імені бази даних та sid я вже додав у відповідь. сподіваємось, це дає вам те, що ви хочете
V4Vendetta

2
Перевірте це посилання
V4Vendetta

57

Якщо, як і я, ваша мета - отримати хост бази даних та 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. Серхіо Марсело


Ідеально. Це саме те, що я хотів знати, але не знав, як це висловити.
Аддісон

Я також. Дякую Серхіо!
кінний потік

48

Для повноти ви також можете використовувати 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

Для вищезазначених запитів не потрібні спеціальні дозволи. Підтверджено, створивши нового користувача лише з привілеєм CONNECT.
беріть

22

Перегляди V $ - це в основному динамічні представлення системних показників. Вони використовуються для налаштування продуктивності, моніторингу сеансів тощо. Отже, доступ за замовчуванням обмежений для користувачів DBA, саме тому ви отримуєте доступ ORA-00942.

Найпростіший спосіб пошуку імені бази даних:

select * from global_name;

Цей погляд надано PUBLIC, тому кожен може його запитувати.


Що про Sracle Oracle? Чи є спосіб перевірити це з рахунку scott?
Аднан

1
Це ім'я служби, а не SID.
jpmc26

5

Введіть у sqlplusкомандному рядку

SQL> select * from global_name;

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

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

Тут перший "ORCL" - це ім'я бази даних, може бути ваша система "XE" та інше, що було задано під час завантаження Oracle.


Дякую, ти зробив мій день.
Мухаммед Ашикуззаман

2

Як вже було сказано вище,

select global_name from global_name;

це шлях.

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

grant select on v$database to <username here>;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.