首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 交易流程深度解析:從 Undo 分配到資料塊變更

     編輯:Oracle 資料庫基礎

交易啟動六步驟

  1. 分配一個回滾段
  2. 在回滾段交易表中分配交易槽
  3. 分配 Undo 區塊
  4. 更新資料塊上的 ITL 交易槽
  5. 將前鏡像記錄在 Undo 區塊
  6. 修改資料塊內容

驗證查詢

-- 查看當前交易資訊
SELECT xidusn, xidslot, xidsqn, ubablk, ubafil, ubarec FROM v$transaction;

-- 依 USN 查回滾段名稱
SELECT usn, name FROM v$rollname WHERE usn = :usn;

-- Dump 回滾段標頭查看交易列表
ALTER SYSTEM DUMP UNDO HEADER '_SYSSMU1_123456789$';

-- Dump 回滾區塊查看前鏡像
ALTER SYSTEM DUMP DATAFILE :file BLOCK :block;

回滾段標頭交易列表示例

INDEX STATE CFLAGS WRAP# UEL SCN DBA PARENT-XID NUB STMT_NUM CMT
0x2c  9     0x00   0x1ae5 0x002f 0x0000.106d1cbd 0x00804775 0x0000.000.00000000 0x00000001 0x00000000 1259981046
0x2d  10    0x80   0x1add 0x0006 0x0000.10713a25 0x00804778 0x0000.000.00000000 0x00000001 0x00000000 0
  • STATE = 10 代表作用中交易。
  • 透過 DBA 轉換檔號/區塊號,再 Dump 資料塊可觀察 ITL 變化。

補充:NUMBER 型態儲存解碼

Oracle 內部以特殊編碼儲存數值,可用 DUMP() 觀察:

SELECT DUMP(1) FROM dual;        -- Typ=2 Len=2: 193,2
SELECT DUMP(123456.789) FROM dual; -- Typ=2 Len=6: 195,13,35,57,79,91
SELECT DUMP(-123456.789) FROM dual;-- Typ=2 Len=7: 60,89,67,45,23,11,102
  • Type=2 表 NUMBER。
  • 正數:指數位 = 193 + 指數;每位數字 = 實際值 + 1。
  • 負數:指數位 = 62 - 指數;每位數字 = 101 - 實際值;長度 < 21 字節時尾端補 102 確保排序正確。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved