powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как связать/найти сессии в двух базах при работе через дблинк
24 сообщений из 24, страница 1 из 1
Как связать/найти сессии в двух базах при работе через дблинк
    #38691072
Фотография Takurava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, помогите с проблемкой - не нашёл ответов на просторах интернета - как узнать sid сессии в базе, в которую моя сессия полезла по дблинку?
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38691090
UDW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделай запрос
select * from v$session@your_dblink;
и ищи себя по названию терминала и имени юзера.
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38691092
Фотография Takurava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UDW,

Сорри, некорректно сформулировал вопрос - как связать не мою сессию, а чужую?
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38691093
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UDWсделай запрос
select * from v$session@your_dblink;
и ищи себя по названию терминала и имени юзера.это ежели сессия своя
Обычно надо, когда не твоя
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38691095
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TakuravaUDW,

Сорри, некорректно сформулировал вопрос - как связать не мою сессию, а чужую?я обычно визуально , по osuser
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38691100
UDW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то в словаре отображаются все действующие сессии, а v$session вьюшка словарная. Можешь приставить sys.v$session
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38691160
Фотография Takurava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxя обычно визуально , по osuser
Дак у нас трёхзвенка - все лезут на первую базу с одного сервера приложений под одним пользователем вебсервиса, и, естественно, под одним пользователем дблинка видятся на второй базе - хрен там кого отличишь :(
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38691173
если dedicated
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Takurava,

ид пользователького процесса первичной бд ддя вторичной является клиентским. в сочетани с "клиентским" адресом.
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38691188
Фотография Takurava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если dedicatedид пользователького процесса первичной бд для вторичной является клиентским. в сочетани с "клиентским" адресом.
Ээээ, мня.... А как это называется, если по полям в v$session?
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38692909
vr-frost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Узнать ИД сессии на клиенте, например вот так:
Код: plsql
1.
Select userenv('sessionid') from dual


Ну а потом отслеживать ее по v$session
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38692929
Фотография Takurava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vr-frostУзнать ИД сессии на клиенте
Ну а потом отслеживать ее по v$session
Как связать сессию в одной базе (local) с сессией в другой (remote) при запросе по database link?
Да, а точно знаю сессию в первой, локальной, базе - но её AUDSID никак не проявляется в v$session на удалённой базе.
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38692953
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Takurava,

Note:104420.1
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38692968
vr-frost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Takuravaеё AUDSID никак не проявляется в v$session на удалённой базе.
Ну тут или ИД не верный или смотришь не туда, может той сессии к моменту выборки вообще нет уже.
Напрямую то видишь сессию?
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38692989
Фотография Takurava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender,

Йоу, оно самое ! :)
А саппорт оракловый мне уже третий день мозги промывает насчёт osuser, username и logon_time из v$session
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38692994
Фотография Takurava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vr-frostНу тут или ИД не верный или смотришь не туда, может той сессии к моменту выборки вообще нет уже.
Напрямую то видишь сессию?
Товарищ, а выложить логи из sqlplus с реальным применением вашей идеи вы можете? Или у вас нет в наличии двух БД?
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38693153
dba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Takurava,

dbms_session.set_identifier разве не поможет?
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38693264
Фотография Takurava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dba123dbms_session.set_identifier разве не поможет?
Поможет всё, что я могу сделать в своей сессии - но мы имеем сферического коня в вакууме без возможности что-то изменить:
1. Трёхзвенку - все сессии приходят в первую базу под одним username, с одним osuser, с одной machine, из одной program и с одним и тем же module
2. 10000 сессий по 20-50 соединений в минуту - никакие logon_time не прокатят.
3. В v$session никакие поля не коррелируют на локальной и удалённой базах.

Так что приведённый xtender номер ноты это единственное правильное решение.
Как я уже упоминал на support.oracle.com мне уже три дня крутят яйца про osuser, username и logon_time и т.п. и т.д.
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38693361
Фотография Takurava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот для не совсем сферического коня (UNIX системы с dedicated):

В локальной базе SPID из v$process равен process из v$session на удалённой
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38693366
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не очень понял, что нужно, но, может быть, что-то вроде этого
Это обсуждалось здесь несколько лет назад
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38693382
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
имхо v$global_transaction просто ораклу было бы лучше чуток по-другому изначально написать. Например, как-то так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
create or replace view v$xt_global_transaction as 
   select
       g.inst_id                                                                       as inst_id
      ,g.k2gtdses                                                                      as saddr
      ,regexp_replace(g.k2gtitid_ora,'^(.*)\.(\w+)\.(\d+\.\d+\.\d+)$','\1')            as remote_db
      ,regexp_replace(g.k2gtitid_ora,'^(.*)\.(\w+)\.(\d+\.\d+\.\d+)$','\2')            as remote_dbid_reversed
      ,regexp_replace(g.k2gtitid_ora,'^(.*)\.(\w+)\.(\d+\.\d+\.\d+)$','\3')            as trans_id
      ,nvl2(replace(g.k2gtibid,'0'),'TO REMOTE','FROM REMOTE')                         as direction
      ,g.k2gtitid_ext  /* utl_raw.cast_to_varchar2(k2gtitid_ext) = g.k2gtitid_ora */   as globalid    
      ,g.k2gtitid_ora  /* utl_raw.cast_to_varchar2(k2gtitid_ext) = g.k2gtitid_ora */   as globalid_ora
      ,g.k2gtibid                                                                      as branchid
      ,g.k2gtecnt                                                                      as branches
      ,g.k2gterct                                                                      as refcount
      ,g.k2gtdpct                                                                      as preparecount
      ,g.k2gtifmt                                                                      as formatid
      , decode(bitand(g.k2gtdflg, 512) , 512 ,'[ORACLE COORDINATED]')
      ||decode(bitand(g.k2gtdflg,1024) ,1024 ,'[MULTINODE]')
      ||decode(bitand(g.k2gtdflg, 511)
                                       ,0    ,'ACTIVE'
                                       ,1    ,'COLLECTING'
                                       ,2    ,'FINALIZED'
                                       ,4    ,'FAILED'
                                       ,8    ,'RECOVERING'
                                       ,16   ,'UNASSOCIATED'
                                       ,32   ,'FORGOTTEN'
                                       ,64   ,'READY FOR RECOVERY'
                                       ,128  ,'NO-READONLY FAILED'
                                       ,256  ,'SIBLING INFO WRITTEN'
             )                                                                         as  state
       ,g.k2gtdflg                                                                     as flags
       ,DECODE(g.k2gtetyp
                 ,0 ,'FREE'
                 ,1 ,'LOOSELY COUPLED'
                 ,2 ,'TIGHTLY COUPLED')                                                as coupling
   from   x$k2gte2 g
         ,x$ktcxb t
         ,x$ksuse s
   where  g.k2gtdxcb = t.ktcxbxba
   and    g.k2gtdses = t.ktcxbses
   and    s.addr     = g.k2gtdses
/

...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38693396
dba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, был пример от Владимира интересный

Takurava, тесткейса нет
а корреляцию можно и так продемонстрировать
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
--session1:
tester@TEST.SQL.RU>; select username,sid,serial#,client_identifier,sys_context('userenv','service_name') SRV from v$session where username = 'TESTER';
USERNAME                              SID    SERIAL# CLIENT_IDENTIFIER        SRV
------------------------------ ---------- ---------- ----------------------- -----------------------------------------
TESTER                              1           11                            test.sql.ru


--session2:
tester@DEV.SQL.RU>; select username,sid,serial#,client_identifier,sys_context('userenv','service_name') srv from v$session where username = 'TESTER';
USERNAME                              SID    SERIAL# CLIENT_IDENTIFIER        SRV
------------------------------ ---------- ---------- ----------------------- -----------------------------------------
TESTER                              2           12                            dev.sql.ru


--session1:
tester@TEST.SQL.RU>; exec dbms_session.set_identifier('test:sid_serial:1-11');

PL/SQL procedure successfully completed.


tester@TEST.SQL.RU>; select username,sid,serial#,client_identifier from v$session where username = 'TESTER';
USERNAME                              SID    SERIAL# CLIENT_IDENTIFIER    
------------------------------ ---------- ---------- ----------------------------------------------------------------
TESTER                              1           11   test:sid_serial:1-11   



tester@TEST.SQL.RU>; select username,sid,serial#,client_identifier from v$session@devlink where username = 'TESTER';
USERNAME                              SID    SERIAL# CLIENT_IDENTIFIER      
------------------------------ ---------- ---------- ----------------------------------------------------------------
TESTER                              2           12
TESTER                              1           13   test:sid_serial:1-11


--session2:
tester@DEV.SQL.RU>; select username,sid,serial#,client_identifier from v$session where username = 'TESTER';
USERNAME                              SID    SERIAL# CLIENT_IDENTIFIER
------------------------------ ---------- ---------- ----------------------------------------------------------------
TESTER                              2           12
TESTER                              1           13   test:sid_serial:1-11
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38693420
Фотография Takurava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dba123,

Да, теперича понятно :)
Но есть вмешательство в личную жизнь сессии, что иногда как бы может не быть позволительно
...
Рейтинг: 0 / 0
Как связать/найти сессии в двух базах при работе через дблинк
    #38693492
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
xtenderимхо v$global_transaction просто ораклу было бы лучше чуток по-другому изначально написать.
пример скрипта без создания вьюшки:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
prompt "Enter filters: "
accept _sid         prompt "Sid: ";
accept _globalid    prompt "Globalid mask: ";
accept _remote_db   prompt "Remote_db mask: ";

col remote_db               for a20;
--col remote_dbid_reversed    for a10;
col trans_id                for a16;
col direction               for a11;
col globalid                for a80;
col globalid_ora            for a40;
col branchid                for a80;
col state                   for a40;
col coupling                for a15;
col username                for a30;
col event                   for a35;
col wait_class              for a10;

with v$xt_global_transaction as (
   select
       g.inst_id                                                                       as inst_id
      ,g.k2gtdses                                                                      as saddr
      ,regexp_replace(g.k2gtitid_ora,'^(.*)\.(\w+)\.(\d+\.\d+\.\d+)$','\1')            as remote_db
--      ,regexp_replace(g.k2gtitid_ora,'^(.*)\.(\w+)\.(\d+\.\d+\.\d+)$','\2')            as remote_dbid_reversed
      ,to_number(hextoraw(reverse(regexp_replace(g.k2gtitid_ora,'^(.*)\.(\w+)\.(\d+\.\d+\.\d+)$','\2'))),'XXXXXXXXXXXX') as remote_dbid
      ,regexp_replace(g.k2gtitid_ora,'^(.*)\.(\w+)\.(\d+\.\d+\.\d+)$','\3')            as trans_id
      ,nvl2(replace(g.k2gtibid,'0'),'FROM REMOTE','TO REMOTE')                         as direction
      ,g.k2gtitid_ext  /* utl_raw.cast_to_varchar2(k2gtitid_ext) = g.k2gtitid_ora */   as globalid    
      ,g.k2gtitid_ora  /* utl_raw.cast_to_varchar2(k2gtitid_ext) = g.k2gtitid_ora */   as globalid_ora
      ,g.k2gtibid                                                                      as branchid
      ,g.k2gtecnt                                                                      as branches
      ,g.k2gterct                                                                      as refcount
      ,g.k2gtdpct                                                                      as preparecount
      ,g.k2gtifmt                                                                      as formatid
      , decode(bitand(g.k2gtdflg, 512) , 512 ,'[ORACLE COORDINATED]')
      ||decode(bitand(g.k2gtdflg,1024) ,1024 ,'[MULTINODE]')
      ||decode(bitand(g.k2gtdflg, 511)
                                       ,0    ,'ACTIVE'
                                       ,1    ,'COLLECTING'
                                       ,2    ,'FINALIZED'
                                       ,4    ,'FAILED'
                                       ,8    ,'RECOVERING'
                                       ,16   ,'UNASSOCIATED'
                                       ,32   ,'FORGOTTEN'
                                       ,64   ,'READY FOR RECOVERY'
                                       ,128  ,'NO-READONLY FAILED'
                                       ,256  ,'SIBLING INFO WRITTEN'
             )                                                                         as  state
       ,g.k2gtdflg                                                                     as flags
       ,DECODE(g.k2gtetyp
                 ,0 ,'FREE'
                 ,1 ,'LOOSELY COUPLED'
                 ,2 ,'TIGHTLY COUPLED')                                                as coupling
   from   x$k2gte2 g
         ,x$ktcxb t
         ,x$ksuse s
   where  g.k2gtdxcb = t.ktcxbxba
   and    g.k2gtdses = t.ktcxbses
   and    s.addr     = g.k2gtdses
)
select
     tr.inst_id
--    ,tr.saddr
    ,tr.remote_db
--    ,tr.remote_dbid_reversed
    ,tr.remote_dbid
    ,tr.trans_id
    ,tr.direction
    ,tr.globalid
    ,tr.globalid_ora
    ,tr.branchid
    ,tr.branches
    ,tr.refcount
    ,tr.preparecount
    ,tr.formatid
    ,tr.state
    ,tr.flags
    ,tr.coupling
    ,s.sid
    ,s.serial#
    ,s.username
    ,s.event
    ,s.wait_class
    ,s.event
from v$xt_global_transaction tr
    ,v$session s
where tr.saddr=s.saddr
  and ('&_sid'       is null or s.sid='&_sid')
  and ('&_globalid'  is null or tr.globalid like '&_globalid')
  and ('&_remote_db' is null or tr.remote_db like '&_remote_db')
/
col remote_db               clear;
--col remote_dbid_reversed    clear;
col trans_id                clear;
col direction               clear;
col globalid                clear;
col globalid_ora            clear;
col branchid                clear;
col state                   clear;
col coupling                clear;
col username                clear;
col event                   clear;
col wait_class              clear;
undef  _sid      ;
undef  _globalid ;
undef _remote_db ;


То есть действуем так: первым запуском смотрим откуда пришел, берем полученный globalid и коннектимся на указанную базу, на той базе выполняем этот же скрипт, но с указанием globalid и получаем нужную сессию

ps. в той вьюшке была ошибочка:
Код: plsql
1.
,nvl2(replace(g.k2gtibid,'0'),'TO REMOTE','FROM REMOTE')                         as direction


параметры надо поменять порядком:
Код: plsql
1.
,nvl2(replace(g.k2gtibid,'0'),'FROM REMOTE','TO REMOTE')                         as direction
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как связать/найти сессии в двух базах при работе через дблинк
    #39862866
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtender,

up, в 11-12 версии какие-то более простые варианты не появились?
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как связать/найти сессии в двух базах при работе через дблинк
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]