深入理解Oracle事务过程

1. 构造测试数据

SQL> create table t(id int,name varchar2(32));

Table created.

SQL> insert into t values(1,'AAAAA');

1 row created.

SQL> commit;

Commit complete.


SQL> update t set name='BBBBB' where id=1; # update事务

1 row updated.

2. dump操作的数据块

SQL> select dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block# from t;

     FILE#     BLOCK#
---------- ----------
         1      94897

SQL> alter system dump datafile 1 block 94897;

System altered.

3. trace文件内容分析

itl事务槽:

 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0003.00a.00000405  0x00c00a85.00a1.27  C---    0  scn 0x0000.00137a59
0x02   0x0005.010.00000401  0x00c00d6c.00bf.3b  ----    1  fsc 0x0000.00000000
Xid:Transaction identifiers (XID) uniquely identify a transaction within the system. They are used
within the ITL of a data or index block.

A transaction identifier consists of:

  * Rollback/undo segment number  # 回滚段编号

  * Transaction table slot number  # 事务槽编号

  * Sequence number or wrap# # 事务所在的这一行被重用的次数

XID = usn#.slot#.warp#

数据块内容:

data_block_dump,data header at 0x7f001dd9da5c
===============
tsiz: 0x1fa0
hsiz: 0x14
pbl: 0x7f001dd9da5c
     76543210
flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0x1f94
avsp=0x1f80
tosp=0x1f80
0xe:pti[0]      nrow=1  offs=0
0x12:pri[0]     offs=0x1f94
block_row_dump:
tab 0, row 0, @0x1f94
tl: 12 fb: --H-FL-- lb: 0x2  cc: 2
col  0: [ 2]  c1 02
col  1: [ 5]  42 42 42 42 42 #即BBBBB

4. 根据ITL槽上的XID找出对应的Undo回滚段段头的信息

0x0005.010.00000401:即5号回滚段

dump 5号回滚段的段头信息:

SQL> select * from v$rollname;

       USN NAME
---------- ------------------------------------------------------------------------------------------
         0 SYSTEM
         1 _SYSSMU1_3724004606$
         2 _SYSSMU2_2996391332$
         3 _SYSSMU3_1723003836$
         4 _SYSSMU4_1254879796$
         5 _SYSSMU5_898567397$
         6 _SYSSMU6_1263032392$
         7 _SYSSMU7_2070203016$
         8 _SYSSMU8_517538920$
         9 _SYSSMU9_1650507775$
        10 _SYSSMU10_1197734989$

11 rows selected.
SQL> alter system dump undo header '_SYSSMU5_898567397$';

System altered.

trace文件内容:

 index  state cflags  wrap#    uel         scn            dba            parent-xid    nub     stmt_num    cmt
  ------------------------------------------------------------------------------------------------
   0x00    9    0x00  0x0401  0x0002  0x0000.00137873  0x00c00d6c  0x0000.000.00000000  0x00000001   0x00000000  1489904694
   0x01    9    0x00  0x0401  0xffff  0x0000.001379fe  0x00c00d6c  0x0000.000.00000000  0x00000001   0x00000000  1489904857
   0x02    9    0x00  0x0401  0x0020  0x0000.00137883  0x00c00d6c  0x0000.000.00000000  0x00000001   0x00000000  1489904694
   0x03    9    0x00  0x0401  0x0005  0x0000.0013780c  0x00c00d6c  0x0000.000.00000000  0x00000001   0x00000000  1489904694
   0x04    9    0x00  0x0401  0x000c  0x0000.001378db  0x00c00d6c  0x0000.000.00000000  0x00000001   0x00000000  1489904694
   0x05    9    0x00  0x0401  0x0016  0x0000.00137820  0x00c00d6c  0x0000.000.00000000  0x00000001   0x00000000  1489904694
   0x06    9    0x00  0x0401  0x0008  0x0000.00137928  0x00c00d6c  0x0000.000.00000000  0x00000001   0x00000000  1489904694
   0x07    9    0x00  0x0401  0x0000  0x0000.00137868  0x00c00d6c  0x0000.000.00000000  0x00000001   0x00000000  1489904694
   0x08    9    0x00  0x0401  0x001d  0x0000.00137934  0x00c00d6c  0x0000.000.00000000  0x00000001   0x00000000  1489904694
   0x09    9    0x00  0x0400  0x0003  0x0000.001377fb  0x00c00d6c  0x0000.000.00000000  0x00000001   0x00000000  1489904694
   0x0a    9    0x00  0x0400  0x0019  0x0000.00137737  0x00c00d6b  0x0000.000.00000000  0x00000001   0x00000000  1489904545
   0x0b    9    0x00  0x0400  0x000e  0x0000.001374ba  0x00c00d6b  0x0000.000.00000000  0x00000001   0x00000000  1489904111
   0x0c    9    0x00  0x0401  0x000d  0x0000.001378ef  0x00c00d6c  0x0000.000.00000000  0x00000001   0x00000000  1489904694
   0x0d    9    0x00  0x0400  0x0013  0x0000.00137900  0x00c00d6c  0x0000.000.00000000  0x00000001   0x00000000  1489904694
   0x0e    9    0x00  0x0400  0x000f  0x0000.00137514  0x00c00d6b  0x0000.000.00000000  0x00000001   0x00000000  1489904171
   0x0f    9    0x00  0x03fe  0x0012  0x0000.001375a3  0x00c00d6b  0x0000.000.00000000  0x00000001   0x00000000  1489904280
   0x10   10    0x80  0x0401  0x0002  0x0000.00137a79  0x00c00d6c  0x0000.000.00000000  0x00000001   0x00000000  0
找到对应的010行,即是该操作对应的事务

Index:表示事务槽中槽号,只是一个序列,从0x00开始到0x21结束,11g的版本有34个槽

state: 表示事务状态,9代表不活动的事务,10代表事务正在活动

wrap#:表示事务表上的事务槽被重用的次数,是XID的一部分

uel:表示当前活动事务所在事务槽的下一个事务槽的指针(即如果发生新的事务,就会用到UEL指向的事务槽上的index)

scn:表示事务启动、提交、回滚的SCN

dba:表示uba,这个DBA是(rollback)回滚的起始点,也就是说记录事务修改的最后一条记录所在的undo块的地址

nub:表示当前事务所用到的undo块的个数

cmt:表示最接近当前的提交时间戳(以秒为单位记录),0表示事务正在活动

5. 根据事务表中dba即undo数据块的地址,结合数据块中的uba,查找事务修改前的值

00c即三号数据文件

SQL> select to_number('d6c','xxxxxxxxxx') from dual;

TO_NUMBER('D6C','XXXXXXXXXX')
-----------------------------
                         3436
SQL> alter system dump datafile 3 block 3436;

System altered.
trace文件内容分析:

UNDO BLK:
xid: 0x0005.010.00000401  seq: 0xbf  cnt: 0x3b  irb: 0x3b  icl: 0x0   flg: 0x0000 # 与数据块和事务表上的xid一致

 Rec Offset      Rec Offset      Rec Offset      Rec Offset      Rec Offset
---------------------------------------------------------------------------
0x01 0x1f38     0x02 0x1e88     0x03 0x1e0c     0x04 0x1d90     0x05 0x1ce0
0x06 0x1c64     0x07 0x1bf8     0x08 0x1b8c     0x09 0x1adc     0x0a 0x1a70
0x0b 0x19e8     0x0c 0x1988     0x0d 0x18d8     0x0e 0x186c     0x0f 0x17bc
0x10 0x1740     0x11 0x16d4     0x12 0x1668     0x13 0x15fc     0x14 0x1590
0x15 0x1524     0x16 0x1474     0x17 0x1408     0x18 0x138c     0x19 0x1320
0x1a 0x1270     0x1b 0x1204     0x1c 0x1198     0x1d 0x10e8     0x1e 0x107c
0x1f 0x100c     0x20 0x0fa0     0x21 0x0f34     0x22 0x0ec8     0x23 0x0e5c
0x24 0x0dac     0x25 0x0d40     0x26 0x0cd4     0x27 0x0c68     0x28 0x0bb8
0x29 0x0b4c     0x2a 0x0a9c     0x2b 0x0a30     0x2c 0x09c4     0x2d 0x0914
0x2e 0x0864     0x2f 0x07f8     0x30 0x0748     0x31 0x06dc     0x32 0x062c
0x33 0x05b0     0x34 0x0534     0x35 0x04ac     0x36 0x0450     0x37 0x03a0
0x38 0x0324     0x39 0x0288     0x3a 0x0218     0x3b 0x0170

*-----------------------------
* Rec #0x3b  slt: 0x10  objn: 88682(0x00015a6a)  objd: 88682  tblspc: 0(0x00000000)
*       Layer:  11 (Row)   opc: 1   rci 0x00
Undo type:  Regular undo    Begin trans    Last buffer split:  No
Temp Object:  No
Tablespace Undo:  No
rdba: 0x00000000Ext idx: 0
flg2: 0
*-----------------------------
uba: 0x00c00d6c.00bf.3a ctl max scn: 0x0000.0013732f prv tx scn: 0x0000.00137343
txn start scn: scn: 0x0000.00137a79 logon user: 0
 prev brb: 12586347 prev bcl: 0
KDO undo record:
KTB Redo
op: 0x03  ver: 0x01
compat bit: 4 (post-11) padding: 1
op: Z
Array Update of 1 rows:
tabn: 0 slot: 0(0x0) flag: 0x2c lock: 0 ckix: 12
ncol: 2 nnew: 1 size: 0
KDO Op code:  21 row dependencies Disabled
  xtype: XAxtype KDO_KDOM2 flags: 0x00000080  bdba: 0x004172b1  hdba: 0x004172b0
itli: 2  ispac: 0  maxfr: 4863
vect = 3
col  1: [ 5]  41 41 41 41 41 # 事务的前映像


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
 针对数据库的启动和关闭、控制文件与数据库初始化、参数及参数文件、数据字典、内存管理、Buffer Cache与Shared Pool原理、重做、回滚与撤销、等待事件、性能诊断与SQL优化等几大Oracle热点主题,本书从基础知识入手,深入研究相关技术,并结合性能调整及丰富的诊断案例,力图将Oracle知识全面、系统、深入地展现给读者。   本书给出了大量取自实际工作现场的实例,在分析实例的过程中,兼顾深度与广度,不仅对实际问题的现象、产生原因和相关的原理进行了深入浅出的讲解,更主要的是,结合实际应用环境,提供了一系列解决问题的思路和方法,包括详细的操作步骤,具有很强的实战性和可操作性,适用于具备一定数据库基础、打算深入学习Oracle技术的数据库从业人员,尤其适用于入门、进阶以及希望深入研究Oracle技术的数据库管理人员。 第1章 数据库的启动和关闭 1 1.1 数据库的启动 1 1.1.1 启动数据库到NOMOUNT状态的过程 2 1.1.2 启动数据库到MOUNT状态 18 1.1.3 启动数据库OPEN阶段 26 1.2 数据库的访问 37 1.2.1 客户端的TNSNAMES.ORA文件配置 37 1.2.2 服务器端的监听器文件listener.ora配置 39 1.2.3 通过不同服务器名对数据库的访问 41 1.2.4 动态监听器注册服务 42 1.3 数据库的关闭 46 1.3.1 数据库关闭的步骤 46 1.3.2 几种关闭方式的对比 48 第2章 控制文件与数据库初始化 51 2.1 控制文件的内容 51 2.2 SCN 53 2.2.1 SCN的定义 53 2.2.2 SCN的获取方式 53 2.2.3 SCN的进一步说明 54 2.3 检查点(Checkpoint) 57 2.3.1 检查点(Checkpoint)的工作原理 57 2.3.2 常规检查点与增量检查点 59 2.3.3 LOG_CHECKPOINT_TO_ALERT参数 63 2.3.4 控制文件与数据文件头信息 64 2.3.5 数据库的启动验证 66 2.3.6 使用备份的控制文件 70 2.3.7 FAST_START_MTTR_TARGET 71 2.3.8 关于检查点执行的案例 74 2.3.9 Oracle 10g自动检查点调整 75 2.3.10 检查点信息及恢复起点 78 2.3.11 正常关闭数据库的状况 78 2.3.12 数据库异常关闭的情况 80 2.3.13 数据库并行恢复案例一则 82 2.3.14 判断一个死事务的恢复进度 85 2.4 数据库的初始化 86 2.4.1 bootstrap$及数据库初始化过程 86 2.4.2 bootstrap$的定位 88 2.4.3 Oracle中独一无二的Cache对象 89 2.4.4 Oracle数据库的引导 91 2.4.5 系统对象与bootstrap$ 92 2.4.6 bootstrap$的重要性 94 2.4.7 BBED工具的简要介绍 95 2.4.8 坏块的处理与恢复 97 第3章 参数及参数文件 103 3.1 初始化参数的分类 103 3.1.1 推导参数(Derived Parameters) 103 3.1.2 操作系统依赖参数 104 3.1.3 可变参数 104 3.1.4 初始化参数的获取 105 3.2 参数文件 107 3.2.1 PFILE和SPFILE 108 3.2.2 获取参数的视图 110 3.2.3 SPFILE的创建 111 3.2.4 SPFILE的搜索顺序 112 3.2.5 使用PFILE/SPFILE启动数据库 112 3.2.6 修改参数 113 3.2.7 解决SPFILE参数修改错误 118 3.2.8 重置SPFILE中设置的参数 120 3.2.9 判断是否使用了SPFILE 120 3.2.10 SPFILE的备份与恢复 121 3.2.11 Oracle 11g参数文件恢复 127 3.2.12 如何设置Events事件 128 3.2.13 导出SPFILE文件 129 3.3 诊断案例之一:参数文件 131 3.3.1 登录系统检查告警日志文件 131 3.3.2 尝试重新启动数据库 132 3.3.3 检查数据文件 132 3.3.4 MOUNT数据库,检查系统参数 133 3.3.5 检查参数文件 133 3.3.6 再次检查alert文件 134 3.3.7 修正PFILE 135 3.3.8 启动数据库 135 3.4 诊断案例之二:RAC环境参数文件 135 3.4.1 数据库资源异常 135 3.4.2 问题的发现 136 3.4.3 参数文件问题的解决 137 第4
### 回答1: 很高兴您对Oracle存储过程专题讲座的下载感兴趣。Oracle存储过程是一种灵活、可重用的数据库对象,用于执行特定任务或实现特定功能的一组SQL语句的集合。它可以作为单独的程序单独执行,也可以由其他程序调用。Oracle存储过程专题讲座将深入介绍存储过程的相关概念、语法和用法。 在这个专题讲座中,您将学习到以下内容: 1. 存储过程的基础知识:包括存储过程的定义、优势、分类等。 2. 存储过程的创建和执行:介绍如何创建存储过程,包括输入参数、输出参数、局部变量等的使用。 3. 存储过程的调用和调试:讲解如何调用存储过程,并探讨如何进行调试和排除错误。 4. 存储过程事务管理:介绍存储过程事务管理中的应用,包括事务的开始、提交和回滚等操作。 5. 存储过程的最佳实践:分享一些存储过程开发和使用的最佳实践,以提高性能和可维护性。 通过参加这个专题讲座,并下载相关资料,您将能够更好地理解和应用Oracle存储过程,提高数据库的性能和效率。希望这次讲座能够对您的学习和工作有所帮助。谢谢! ### 回答2: 「Oracle存储过程专题讲座」是一次针对Oracle数据库存储过程的专题讲座,旨在向参与者介绍Oracle存储过程的概念、设计和使用方法。 在这个讲座中,参与者可以学习到Oracle存储过程的基本概念和原理。Oracle存储过程是一种在数据库中存储的一组预定义的SQL语句和PL/SQL语句。它们可以被重复使用并且可以被其他程序或用户调用。通过使用存储过程,我们可以对数据库中的数据进行操作和逻辑处理。 这次讲座将涵盖Oracle存储过程的设计和开发过程。参与者将学习如何创建存储过程以及如何使用PL/SQL语言来实现逻辑和业务规则。他们还将学习到存储过程的调试和性能优化技巧,以提高存储过程的效率和可靠性。 此外,这次讲座还将介绍Oracle存储过程的应用场景和案例。参与者将了解到存储过程在提高数据库性能、处理复杂业务逻辑和保证数据一致性方面的重要作用。他们还将学习到如何使用存储过程来实现批量处理、定时任务和事务管理等功能。 对于想要进一步提升Oracle数据库技术水平的数据库开发人员和管理员来说,这次讲座是一个很好的学习机会和交流平台。参与者可以通过与讲师和其他参与者的互动,共同探讨Oracle存储过程的最佳实践和解决方案。 总而言之,「Oracle存储过程专题讲座」提供了一个关于Oracle存储过程知识的全面学习机会。参与者可以通过这次讲座了解到存储过程的设计原则和使用技巧,进而提高自己在Oracle数据库开发和管理方面的能力。同时,参与者还可以通过与其他人的交流互动,扩大自己的技术圈子,并获得更多实践经验和专业建议。 ### 回答3: Oracle存储过程专题讲座的下载方式有多种途径。首先,可以通过官方网站或官方论坛下载相关的讲座资料。Oracle官方网站通常提供相关的技术文档、培训视频和演示文稿等资源,用户可以根据自己的需求选择和下载。其次,可以通过一些第三方教育平台或技术论坛等网站获得讲座资料。这些网站通常提供用户上传、分享和下载各类相关技术资源的平台,用户可以在搜索框中输入相关关键词,如"Oracle存储过程专题讲座",即可找到相应的讲座资源进行下载。此外,还可以参加线下的技术培训班或研讨会获取讲座资料。这些培训班和研讨会通常由技术机构、公司或个人组织,通过报名参加或购买课程等方式,即可获得相关资料的下载链接或离线文件。总之,Oracle存储过程专题讲座的下载方式有很多种,用户可以根据自己的需求选择适合的下载途径,并注意选择官方网站或可信的第三方平台进行下载,以确保获取到有效、权威的讲座资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值