Мы используем функцию переопределения на основе версии в некоторых программах, и как администратор баз данных я хочу иметь возможность определять, какую версию использует каждое данное соединение. Таким образом, мы можем быть уверены, что все соединения с базой данных используют правильный выпуск. Как я могу узнать, какое издание используется в любом сеансе?

2
GregH 26 Окт 2014 в 08:57
1
 – 
a_horse_with_no_name
26 Окт 2014 в 10:58

2 ответа

Лучший ответ

Запросите V$SESSION и включите столбец SESSION_EDITION_ID, содержащий искомое значение.

Ссылка http://docs.oracle.com/cd /E11882_01/server.112/e40402/dynviews_3016.htm#REFRN30223 определяет значения всех столбцов для этого динамического представления; Я бы, наверное, сделал запрос вроде

SELECT SID, USERNAME, SCHEMANAME, OSUSER, 
   PROCESS, MACHINE, TERMINAL, PROGRAM, 
   SESSION_EDITION_ID 
from V$SESSION  
order by SESSION_EDITION_ID;
2
Mark Stewart 28 Окт 2014 в 01:32
Это возвращает 400 строк. Как узнать, какой из них правильный?
 – 
Superdooperhero
30 Авг 2017 в 13:49
-- По-разному; для меня это может быть добавление критериев на основе PROGRAM, OSUSER или SCHEMANAME. Если у вас есть контроль над созданием сеанса, вы можете использовать столбцы MODULE и ACTION в запросе, а при создании сеанса вызывать exec DBMS_APPLICATION_INFO.SET_MODULE(module_name=>'My_Module', action_name=>'do stuff');, а затем запрашивать эти значения.
 – 
Mark Stewart
30 Авг 2017 в 17:16
1
SESSION_EDITION_ID — это просто числовое значение, которое на самом деле не показывает, что запросил запросчик. Смотрите и мой ответ.
 – 
D. Lohrsträter
7 Янв 2022 в 17:24

Чтобы найти название выпуска, используемого сеансом, выполните следующий запрос:

select object_name as USED_EDITION, vses.*
from V$SESSION vses
JOIN ALL_OBJECTS AO on AO.object_id = vses.session_edition_id

Он покажет вам имя, используемое в DBA_EDITIONS или во ALL_EDITIONS.

1
D. Lohrsträter 7 Янв 2022 в 17:35