powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / XID в контейнерных БД
9 сообщений из 9, страница 1 из 1
XID в контейнерных БД
    #40080658
Swsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В non-cdb БД можно было получить данные транзакции из XID:

Код: plsql
1.
2.
3.
4.
5.
select XIDUSN, XIDSLOT, XIDSQN, XID,
       to_number( substr( XID, 1, 4 ), 'xxxx' ) undo_seg,
       to_number( substr( XID, 5, 4 ), 'xxxx' ) slot,
       to_number( substr( XID, 9, 8 ), 'xxxxxxxx' ) seq
  from gv$transaction



А как это можно сделать в контейнерных?
...
Рейтинг: 0 / 0
XID в контейнерных БД
    #40080731
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Swsov
А как это можно сделать в контейнерных?


А какая разница?

Код: 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.
SQL> -- PDB
SQL> connect scott@pdb1sol122
Enter password:
Connected.
SQL> update emp set sal = sal;

14 rows updated.

SQL> select XIDUSN, XIDSLOT, XIDSQN, XID,
  2         to_number( substr( XID, 1, 4 ), 'xxxx' ) undo_seg,
  3         to_number( substr( XID, 5, 4 ), 'xxxx' ) slot,
  4         to_number( substr( XID, 9, 8 ), 'xxxxxxxx' ) seq
  5    from gv$transaction;

    XIDUSN    XIDSLOT     XIDSQN XID                UNDO_SEG       SLOT        SEQ
---------- ---------- ---------- ---------------- ---------- ---------- ----------
        10         10      57548 0A000A00CCE00000       2560       2560 3437232128

SQL> -- cdb
SQL> connect /@sol122 as sysdba
Connected.
SQL> create table test(n number);

Table created.

SQL> insert into test values(1);

1 row created.

SQL> select XIDUSN, XIDSLOT, XIDSQN, XID,
  2         to_number( substr( XID, 1, 4 ), 'xxxx' ) undo_seg,
  3         to_number( substr( XID, 5, 4 ), 'xxxx' ) slot,
  4         to_number( substr( XID, 9, 8 ), 'xxxxxxxx' ) seq
  5    from gv$transaction;

    XIDUSN    XIDSLOT     XIDSQN XID                UNDO_SEG       SLOT        SEQ
---------- ---------- ---------- ---------------- ---------- ---------- ----------
         9         18      78823 09001200E7330100       2304       4608 3878879488

SQL> drop table test purge;

Table dropped.

SQL>



SY.
...
Рейтинг: 0 / 0
XID в контейнерных БД
    #40080745
Swsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,

У тебя точно не контейнерная БД, проверь
Код: plsql
1.
select * from v$database where cdb = 'NO'



А разница в том, что в обычной БД выборки из XID дают реальные значения

Код: plsql
1.
2.
3.
4.
5.
select XIDUSN, XIDSLOT, XIDSQN, XID,
       to_number( substr( XID, 1, 4 ), 'xxxx' ) undo_seg,
       to_number( substr( XID, 5, 4 ), 'xxxx' ) slot,
       to_number( substr( XID, 9, 8 ), 'xxxxxxxx' ) seq
  from gv$transaction


Код: plaintext
1.
2.
3.
    XIDUSN    XIDSLOT     XIDSQN XID                UNDO_SEG       SLOT        SEQ
---------- ---------- ---------- ---------------- ---------- ---------- ----------
         3          6  102254998 0003000606184996          3          6  102254998
...
Рейтинг: 0 / 0
XID в контейнерных БД
    #40080750
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Swsov
В non-cdb БД можно было получить данные транзакции из XID:

ничего в контейнерных не поменялось и получить можно как и прежде. Вопрос только зачем, если и так уже есть XIDUSN, XIDSLOT, XIDSQN в v$transaction?

Swsov
Код: plsql
1.
2.
3.
4.
5.
select XIDUSN, XIDSLOT, XIDSQN, XID,
       to_number( substr( XID, 1, 4 ), 'xxxx' ) undo_seg,
       to_number( substr( XID, 5, 4 ), 'xxxx' ) slot,
       to_number( substr( XID, 9, 8 ), 'xxxxxxxx' ) seq
  from gv$transaction


это зависит от little/big endian. Если этот запрос не подходит, значит порядок байтов надо перевернуть:
Код: plsql
1.
2.
3.
4.
5.
6.
select XIDUSN, XIDSLOT, XIDSQN, XID,
       dbms_transaction.local_transaction_id  xid2,
       to_number( utl_raw.reverse(substr( XID, 1, 4 )), 'xxxx' ) undo_seg,
       to_number( utl_raw.reverse(substr( XID, 5, 4 )), 'xxxx' ) slot,
       to_number( utl_raw.reverse(substr( XID, 9, 8 )), 'xxxxxxxx' ) seq
  from v$transaction tr;



Пример
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table my_dual as select * from dual where 1=0;
insert into my_dual select * from dual;
select XIDUSN, XIDSLOT, XIDSQN, XID,
       dbms_transaction.local_transaction_id  xid2,
       to_number( utl_raw.reverse(substr( XID, 1, 4 )), 'xxxx' ) undo_seg,
       to_number( utl_raw.reverse(substr( XID, 5, 4 )), 'xxxx' ) slot,
       to_number( utl_raw.reverse(substr( XID, 9, 8 )), 'xxxxxxxx' ) seq
  from v$transaction tr
      ,v$session s
  where tr.SES_ADDR = s.saddr
  and s.sid=userenv('sid');
drop table my_dual purge;


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
Table created.


1 row created.


    XIDUSN    XIDSLOT     XIDSQN XID              XID2                   UNDO_SEG       SLOT        SEQ
---------- ---------- ---------- ---------------- -------------------- ---------- ---------- ----------
         7         31       1161 07001F0089040000 7.31.1161                     7         31       1161

...
Рейтинг: 0 / 0
XID в контейнерных БД
    #40080752
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Swsov

У тебя точно не контейнерная БД, проверь


Код: plsql
1.
2.
3.
4.
5.
6.
7.
SQL> select cdb from v$database;

CDB
---
YES

SQL>



И еще раз - никакой разницы. И объясни что у тебя не выходит.

SY.
...
Рейтинг: 0 / 0
XID в контейнерных БД
    #40080766
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
SY
Код: plsql
1.
2.
3.
    XIDUSN    XIDSLOT     XIDSQN XID                UNDO_SEG       SLOT        SEQ
---------- ---------- ---------- ---------------- ---------- ---------- ----------
         9         18      78823 09001200E7330100       2304       4608 3878879488


Как видишь, они у тебя не совпадают:
XIDUSN должен быть равен UNDO_SEG (9 = 0900 => 0x0009)
XIDSLOT - SLOT (18 = 1200 => 0x0012)
XIDSQN - SEQ (78823 = E7330100 => 0x000133E7)
...
Рейтинг: 0 / 0
XID в контейнерных БД
    #40080771
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Код: 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.
SQL> col PLATFORM_NAME for a40;
SQL> select * from v$transportable_platform order by 1;

PLATFORM_ID PLATFORM_NAME                            ENDIAN_FORMAT      CON_ID
----------- ---------------------------------------- -------------- ----------
          1 Solaris[tm] OE (32-bit)                  Big                     0
          2 Solaris[tm] OE (64-bit)                  Big                     0
          3 HP-UX (64-bit)                           Big                     0
          4 HP-UX IA (64-bit)                        Big                     0
          5 HP Tru64 UNIX                            Little                  0
          6 AIX-Based Systems (64-bit)               Big                     0
          7 Microsoft Windows IA (32-bit)            Little                  0
          8 Microsoft Windows IA (64-bit)            Little                  0
          9 IBM zSeries Based Linux                  Big                     0
         10 Linux IA (32-bit)                        Little                  0
         11 Linux IA (64-bit)                        Little                  0
         12 Microsoft Windows x86 64-bit             Little                  0
         13 Linux x86 64-bit                         Little                  0
         15 HP Open VMS                              Little                  0
         16 Apple Mac OS                             Big                     0
         17 Solaris Operating System (x86)           Little                  0
         18 IBM Power Based Linux                    Big                     0
         19 HP IA Open VMS                           Little                  0
         20 Solaris Operating System (x86-64)        Little                  0
         21 Apple Mac OS (x86-64)                    Little                  0
         22 Linux OS (S64)                           Big                     0

21 rows selected.

SQL> select platform_id, platform_name from v$database;

PLATFORM_ID PLATFORM_NAME
----------- ----------------------------------------
         13 Linux x86 64-bit

SQL> select platform_id, platform_name, endian_format from v$database d join v$transportable_platform p using(platform_id,platform_name);

PLATFORM_ID PLATFORM_NAME                            ENDIAN_FORMAT
----------- ---------------------------------------- --------------
         13 Linux x86 64-bit                         Little
...
Рейтинг: 0 / 0
XID в контейнерных БД
    #40080773
Swsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sayan Malakshinov,
Спасибо.

Sayan Malakshinov
Вопрос только зачем, если и так уже есть XIDUSN, XIDSLOT, XIDSQN в v$transaction?

Просто разбираюсь, как узнать транзакцию из поля XID$$ в матлогах и сравниваю это значение с классическим XID, вот и докопался.
...
Рейтинг: 0 / 0
XID в контейнерных БД
    #40080774
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sayan Malakshinov

Как видишь, они у тебя не совпадают:


Согласен - нужен reverse. Я просто пропустил SQL от Swsov ибо вопрос был о CDB/NONCDB а little/big endian от CDB/NONCDB не зависит:

Код: 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.
SQL> select cdb from v$database;

CDB
---
NO

SQL> create table test(n number);

Table created.

SQL> insert into test values(1);

1 row created.

SQL> select XIDUSN, XIDSLOT, XIDSQN, XID,
  2         to_number( substr( XID, 1, 4 ), 'xxxx' ) undo_seg,
  3         to_number( substr( XID, 5, 4 ), 'xxxx' ) slot,
  4         to_number( substr( XID, 9, 8 ), 'xxxxxxxx' ) seq
  5    from gv$transaction;

    XIDUSN    XIDSLOT     XIDSQN XID                UNDO_SEG       SLOT        SEQ
---------- ---------- ---------- ---------------- ---------- ---------- ----------
         5          9    2460095 05000900BF892500       1280       2304 3213436160

SQL> select XIDUSN, XIDSLOT, XIDSQN, XID,
  2         dbms_transaction.local_transaction_id  xid2,
  3         to_number( utl_raw.reverse(substr( XID, 1, 4 )), 'xxxx' ) undo_seg,
  4         to_number( utl_raw.reverse(substr( XID, 5, 4 )), 'xxxx' ) slot,
  5         to_number( utl_raw.reverse(substr( XID, 9, 8 )), 'xxxxxxxx' ) seq
  6    from v$transaction tr;

    XIDUSN    XIDSLOT     XIDSQN XID              XID2                   UNDO_SEG       SLOT        SEQ
---------- ---------- ---------- ---------------- -------------------- ---------- ---------- ----------
         5          9    2460095 05000900BF892500 5.9.2460095                   5          9    2460095

SQL>



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


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