Что такое таблица транзакций (transaction table)? TRANSACTIONS_PER_ROLLBACK_SEGMENT

dbstalker, 19 октября

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

Из запроса select XIDUSN from v$transaction находим идентификатор используемого нашей транзакцией сегмента отмены.

Далее мы можем определить размещение таблицы транзакций, используя HEADER_FILE и HEADER_BLOCK в представлении DBA_SEGMENTS:

SELECT SEGMENT_NAME, HEADER_FILE, HEADER_BLOCK FROM DBA_SEGMENTS
     WHERE SEGMENT_NAME=’ _SYSSMU4$’;

SEGMENT_NAME            HEADER_FILE              HEADER_BLOCK
-------------          -------------                 ------------
_SYSSMU4$                    	2                       57                                        

В папке user_dump_dest получим нужный нам дамп, выполнив одну из двух команд:

ALTER SYSTEM DUMP DATAFILE 2 BLOCK 57;

LTER SYSTEM DUMP UNDO HEADER '_SYSSMU4$';

И вот результат:

TRN TBL::

Index state cflags  wrap#    uel         scn            dba     parent-xid    nub     stmt_num
  ------------------------------------------------------------------------------------------------
   0x00    9    0x00  0x4768d  0x001f  0x000b.a1f917cc  0x0080003c  0x0000.000.00000000  0x00000001   0x00000000
   0x01    9    0x00  0x4767b  0x0005  0x000b.a1f917c4  0x0080003c  0x0000.000.00000000  0x00000001   0x00000000
   0x02    9    0x00  0x47650  0x0019  0x000b.a1f91806  0x0080003c  0x0000.000.00000000  0x00000001   0x00000000
   0x03    9    0x00  0x476a2  0x001b  0x000b.a1f917e3  0x0080003c  0x0000.000.00000000  0x00000001   0x00000000
   0x04    9    0x00  0x476a5  0x0020  0x000b.a1f910e7  0x0080003b  0x0000.000.00000000  0x00000001   0x00000000
   0x05    9    0x00  0x4769b  0x0013  0x000b.a1f917c7  0x0080003c  0x0000.000.00000000  0x00000001   0x00000000
   0x06    9    0x00  0x4748b  0x0016  0x000b.a1f917d1  0x0080003c  0x0000.000.00000000  0x00000001   0x00000000
   0x07    9    0x00  0x4769d  0x0022  0x000b.a1f91812  0x0080003c  0x0000.000.00000000  0x00000001   0x00000000
   0x08    9    0x00  0x476a9  0x0003  0x000b.a1f917e0  0x0080003c  0x0000.000.00000000  0x00000001   0x00000000
…

Сколько здесь есть записей? В моей таблице транзакций их 47. Эта величина соответствует точному количеству параллельных транзакций, которое один сегмент отмены может сопровождать. Вот поэтому параметр TRANSACTIONS_PER_ROLLBACK_SEGMENT может быть установлен до 47.

Немного разберемся с колонками :

index: соответствует XIDSLOT колонке в V$TRANSACTION (номер слота)

state: 9 – транзакция зафиксирована, 10 - транзакция активна

wrap#: соответствует XIDSQN колонке в V$TRANSACTION (Sequence number)

cflags: переключается с 0x00 на 0xco после того как слот был использован

scn: представляет собой System Change Number для незакомиченых транзакций и System Commit Number для зафиксированных транзакций.

dba: indicate dba (datablock address) of undo block.

nub: соответствует USED_UBLK колонке в V$TRANSACTION (количество использованных блоков отката)

Вывод: по таблице транзакций можно определить в каком состоянии находится наша транзакция (state 9 – завершена, 10 – активна), узнать ее scn, узнать в каком блоке находятся данные undo для транзакции.

С благодарностью приму замечания к посту!

 

Новый комментарий

Я не спамер: введите суму 4+2



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Требуется бухгалтер
21 августа, 1 ответа