深入剖析一个完整的事务

oracle029



深入剖析一个完整的事务

2、图解一个事务的操作流程

Undo段的组成:段头、回滚块

事务ID:oracle为每个事务分配事务id

select xid,xidusn,xidslot,xidsqn,ubablk,ubafil from v$transaction;// lists the active transactions in the system.

null null null null null null

insert into t values(1,‘zhangsan‘);

select xid,xidusn,xidslot,xidsqn,ubablk,ubafil from v$transaction;

070017008F020000     7     23     655     1037     3//当前活动事务

COMMIT

select xid,xidusn,xidslot,xidsqn,ubablk,ubafil from v$transaction;

null null null null null null//说明事务已经被提交了

事务表

undo段的第一个数据块,每一个回滚段最多可以47个事务


          回滚段的段头块

select * from v$rollname;

0     SYSTEM

1     _SYSSMU1_3780397527$

2     _SYSSMU2_2232571081$

3     _SYSSMU3_2097677531$

4     _SYSSMU4_1152005954$

5     _SYSSMU5_1527469038$

6     _SYSSMU6_2443381498$

7     _SYSSMU7_3286610060$

8     _SYSSMU8_2012382730$

9     _SYSSMU9_1424341975$

10     _SYSSMU10_3550978943$

select header_block,header_file from dba_segments where segment_name=‘_SYSSMU1_3780397527$‘;

128     3

alter system dump undo header ‘_SYSSMU1_3780397527$‘;//转储回滚段头

查看当前会话的进程编号

select spid from v$process where addr in (select paddr from v$session where

sid=(select sid from v$mystat where rownum=1));

spid//server process ID

5179

alter system dump undo header ‘_SYSSMU1_3780397527$‘;//转储回滚段

alter system dump datafile 5 block 4308;//转储回滚段数据块

1. 一个事务的开始要在undo的段头块的事务表中写事务信息XID,而且还要在将要被修改的数据块的事务槽中

写事务信息XID。

事务槽:xid(需要修改的块的事务槽)、uba(是修改原数据存在于undo中的数据块的地址信息)

深入剖析事务槽和事务的提交方式

7、事务槽ITL

默认是1

最大255(从Oracle10g开始不能更改)

  • DBA_TABLES describes all relational tables in the database.

  • USER_TABLES describes the relational tables owned by the current user. This view does not display the OWNER column.

SQL>  select INI_TRANS,MAX_TRANS from dba_tables where table_name=‘T‘;

INI_TRANS  MAX_TRANS

---------- ----------

1        255

事务槽争用

create table t(id number(5),name char(2000));

insert into t values(1,‘aa‘);

insert into t values(2,‘bb‘);

insert into t values(3,‘bb‘);

insert into t values(4,‘cc‘);

insert into t values(5,‘dd‘);

commit;

select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid),id from t;

DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID), DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID), ID

1     86193     1//某条记录所对应的文件编号和块号

1     86193     1

1     86193     2

1     86193     3

1     86193     4

1     86193     5

update t10 set name=‘abcd‘ where id=1;

select ubafil,ubablk,xidusn,xidslot,xidsqn,start_scnb from v$transaction;

UBAFIL, UBABLK, XIDUSN, XIDSLOT, XIDSQN, START_SCNB

3     11254     9     19     868     1234672

//UBA的文件号,块号,回滚块的段头块,表中的哪一行记录,记录被覆盖第几次(这些信息既存在事务表中也存在事务操作中)

select * from v$rollname ;//查询段头块

0     SYSTEM

1     _SYSSMU1_3780397527$

2     _SYSSMU2_2232571081$

3     _SYSSMU3_2097677531$

4     _SYSSMU4_1152005954$

5     _SYSSMU5_1527469038$

6     _SYSSMU6_2443381498$

7     _SYSSMU7_3286610060$

8     _SYSSMU8_2012382730$

9     _SYSSMU9_1424341975$

10     _SYSSMU10_3550978943$

SQL> select spid from v$process where addr in (select paddr from v$session where

sid=(select sid from v$mystat where rownum=1));  2

SPID

------------------------

11175//通过server Pro来到udump中查找对应的文件

alter system dump undo header ‘_SYSSMU8_2012382730$‘;

SQL> show parameter dump

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

background_core_dump                 string      partial

background_dump_dest                 string      /u01/app/oracle/diag/rdbms/jia

gulun/jiagulun/trace

core_dump_dest                       string      /u01/app/oracle/diag/rdbms/jia

gulun/jiagulun/cdump

max_dump_file_size                   string      unlimited

shadow_core_dump                     string      partial

user_dump_dest                       string      /u01/app/oracle/diag/rdbms/jia

gulun/jiagulun/trace

SQL>

[[email protected] trace]$ cat jiagulun_ora_11175.trc

Trace file /u01/app/oracle/diag/rdbms/jiagulun/jiagulun/trace/jiagulun_ora_11175.trc

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

ORACLE_HOME = /u01/app/product/11.2.0/db_1

System name:    Linux

Node name:      localhost.localdomain

Release:        2.6.18-194.el5

Version:        #1 SMP Tue Mar 16 21:52:39 EDT 2010

Machine:        x86_64

Instance name: jiagulun

Redo thread mounted by this instance: 1

Oracle process number: 29

Unix process pid: 11175, image: [email protected] (TNS V1-V3)

*** 2015-01-03 00:05:56.449

*** SESSION ID:(36.245) 2015-01-03 00:05:56.449

*** CLIENT ID:() 2015-01-03 00:05:56.449

*** SERVICE NAME:(SYS$USERS) 2015-01-03 00:05:56.449

*** MODULE NAME:([email protected] (TNS V1-V3)) 2015-01-03 00:05:56.449

*** ACTION NAME:() 2015-01-03 00:05:56.449

********************************************************************************

Undo Segment:  _SYSSMU8_2012382730$ (8)

********************************************************************************

Extent Control Header

-----------------------------------------------------------------

Extent Header:: spare1: 0      spare2: 0      #extents: 3      #blocks: 143

last map  0x00000000  #maps: 0      offset: 4080

Highwater::  0x00c000fc  ext#: 1      blk#: 4      ext size: 8

#blocks in seg. hdr‘s freelists: 0

#blocks below: 0

mapblk  0x00000000  offset: 1

Unlocked

Map Header:: next  0x00000000  #extents: 3    obj#: 0      flag: 0x40000000

Extent Map

-----------------------------------------------------------------

0x00c000f1  length: 7

0x00c000f8  length: 8

0x00c02c00  length: 128

Retention Table

-----------------------------------------------------------

Extent Number:0  Commit Time: 1420272055

Extent Number:1  Commit Time: 1420272055

Extent Number:2  Commit Time: 1420267116

TRN CTL:: seq: 0x00b3 chd: 0x001b ctl: 0x0020 inc: 0x00000000 nfb: 0x0002

mgc: 0xb000 xts: 0x0068 flg: 0x0001 opt: 2147483646 (0x7ffffffe)

uba: 0x00c000fc.00b3.09 scn: 0x0000.0013265c

Version: 0x01

FREE BLOCK POOL::

uba: 0x00c000fc.00b3.0b ext: 0x1  spc: 0x1a54

uba: 0x00c000fa.00b3.33 ext: 0x1  spc: 0x680

uba: 0x00000000.00b1.2d ext: 0x2  spc: 0x11bc

uba: 0x00000000.0000.00 ext: 0x0  spc: 0x0

uba: 0x00000000.0000.00 ext: 0x0  spc: 0x0

TRN TBL::

index  state cflags  wrap#    uel         scn            dba            parent-xid    nub     stmt_num    cmt

------------------------------------------------------------------------------------------------

0x00    9    0x00  0x0355  0x0016  0x0000.00132a0f  0x00c000f6  0x0000.000.00000000  0x00000001   0x00000000  1420272011

....    .     ...   ....     ...     ......           ....            ....             ....            ...       ....

0x20    9    0x00  0x0355  0xffff  0x0000.00132b09  0x00c000fc  0x0000.000.00000000  0x00000001   0x00000000  1420272233

0x21    9    0x00  0x0354  0x000a  0x0000.00132900  0x00c000f6  0x0000.000.00000000  0x00000001   0x00000000  1420271514

EXT TRN CTL::

usn: 8

sp1:0x00000000 sp2:0x00000000 sp3:0x00000000 sp4:0x00000000

sp5:0x00000000 sp6:0x00000000 sp7:0x7fff00000000 sp8:0x00000000

EXT TRN TBL::

index  extflag    extHash    extSpare1   extSpare2

---------------------------------------------------

0x00  0x00000000 0x00000000 0x00000000  0x00000000

...     .....      .....       ....        ...

0x21  0x00000000 0x00000000 0x00000000  0x00000000

[[email protected] trace]$

alter system dump datafile 3 block 11254; // 回滚块,数据块

时间: 2024-07-30 13:46:10

深入剖析一个完整的事务的相关文章

【如何快速的开发一个完整的iOS直播app】(播放篇)

前言 在看这篇之前,如果您还不了解直播原理,请查看上篇文章如何快速的开发一个完整的iOS直播app(原理篇) 开发一款直播app,集成ijkplayer成功后,就算完成直播功能一半的工程了,只要有拉流url,就能播放直播啦 本篇主要讲解的是直播app中,需要用到的一个很重要的开源框架ijkplayer,然后集成这个框架可能对大多数初学者还是比较有难度的,所以本篇主要教你解决集成[ijkplayer]遇见的各种坑. 很多文章,可能讲解的是如何做,我比较注重讲解为什么这样做,大家有什么不明白,还可以

一个完整的Mybatis分页解决方案

[布景] 号码大全项目结构是 SpringMVC+Mybatis, 需求是想选用自定义的分页标签,关键词挖掘工具一起,要尽量少的影响事务程序开发的. 假如你已经运用了JS结构( 如:Ext,EasyUi等)自带的分页机能,这篇文章帮助能够不大,因为JS结构供给了固定的接口. [关于疑问] 大多数分页器会运用在查询页面,要思考以下疑问: 1)分页时是要随时带有近来一次查询条件 2)不能影响现有的sql,相似aop的作用 3)mybatis供给了通用的阻拦接口,要挑选恰当的阻拦办法和时点 4)尽量少

一个完整的性能测试流程

下午逛一个测试交流群时,聊起性能测试,然后某位群成员说他们用的loadrunner做性能,当时觉得这话有点偏颇,虽然我也是一个性能测试道路上的摸索前进者... 诚然,我们在进行性能测试工作的过程中,需要借助工具的辅助来帮我们完成一些工作,但loadrunner≠性能测试!或者说,性能测试工具≠性能测试,工具永远是一种 辅助的工具,而不能认为会用工具就会性能测试了!希望看到这里的童鞋(测试小白这种认知比较多),可以改变这个观念... 下面,就说说一个完整的性能测试过程吧... PS:文末附上一张性

如何实现一个TCC分布式事务框架的一点思考

一个TCC事务框架需要解决的当然是分布式事务的管理.关于TCC事务机制的介绍,可以参考TCC事务机制简介.http://www.bytesoft.org/tcc-intro TCC事务模型虽然说起来简单,然而要基于TCC实现一个通用的分布式事务框架,却比它看上去要复杂的多,不只是简单的调用一下Confirm/Cancel业务就可以了的. 本文将以Spring容器为例,试图分析一下,实现一个通用的TCC分布式事务框架需要注意的一些问题. 一.TCC全局事务必须基于RM本地事务来实现全局事务 TCC

【如何快速的开发一个完整的iOS直播app】(原理篇)

一.个人见解(直播难与易) 直播难:个人认为要想把直播从零开始做出来,绝对是牛逼中的牛逼,大牛中的大牛,因为直播中运用到的技术难点非常之多,视频/音频处理,图形处理,视频/音频压缩,CDN分发,即时通讯等技术,每一个技术都够你学几年的. 直播易:已经有各个领域的大牛,封装好了许多牛逼的框架,我们只需要用别人写好的框架,就能快速的搭建一个直播app,也就是传说中的站在大牛肩膀上编程. 二.了解直播 热门直播产品 映客,斗鱼,熊猫,虎牙,花椒等等 直播效果图 直播效果.jpeg 1.一个完整直播ap

【转载】串口中怎样接收一个完整数据包的解析

这里以串口作为传输媒介,介绍下怎样来发送接收一个完整的数据包.过程涉及到封包与解包.设计一个良好的包传输机制很有利于数据传输的稳定性以及正确性.串口只是一种传输媒介,这种包机制同时也可以用于SPI,I2C的总线下的数据传输.在单片机通信系统(多机通信以及PC与单片机通信)中,是很常见的问题. 一.根据帧头帧尾或者帧长检测一个数据帧 1.帧头+数据+校验+帧尾 这是一个典型的方案,但是对帧头与帧尾在设计的时候都要注意,也就是说帧头.帧尾不能在所传输的数据域中出现,一旦出现可能就被误判.如果用中断来

如何快速搭建一个完整的移动直播系统?

移动直播行业的火热会在很长一段时间内持续,通过和各行业的整合,从而成为具有无限可能性的行业.主要因为以下三个原因: 第一,移动直播的UGC生产模式比PC端的直播更明显,人人都有设备,随时随地开播,完全顺应了互联网时代的开放性原则,能刺激更多人去创造和传播优质内容. 第二,网络带宽和速度在逐渐提高,网络成本在逐渐下降,为移动直播提供一个极佳的发展环境.文字.声音.视频.游戏等都会在移动直播中呈现,创造出更加丰富的用户体验.直播可以以SDK的形式接入到自己的应用中,比如,教育领域中的课后辅导完全可以

iOS开发实践:一个完整微博客户端的实现

本文基于数据字典和数据流图两种工具讲述一个完整微博客户端的实现.数据字典和数据流图都可以用来表达线程的执行流程,同时定义了需要的类,是进一步设计类的基础. 数据字典实际上是一张表,表的第一个字段是程序代码中的标识符,其它字段具体描述它在线程中被如何使用,以及它所依赖的其它元素,数据字典中各个标识符基本上也是按照线程的执行流程来排序. 数据流图是一个平面拓扑结构,每个节点或者是外部数据,或者是可被线程执行的代码模块.从外部数据到代码模块的边意味着线程在执行代码模块的时候需要用到外部数据,从代码模块

怎样搭建一个完整的便于优化的网站

在网站搭建初期就完成所有便于优化的框架和内容能够缩短整个网站优化时间,一个完整的便于优化的网站包含:满足用户需求的程序和内容.便于优化的路径.优先层次的布局.附加价值的内容.长尾关键词布局.合理的内链设置. 学习要点 一.符合用户需求的程序和内容 1.程序.在做网站之前要考察什么程序是符合这个网站的,比如养羊,搜索养羊出现在百度首页的是养羊吧,那么说明搜索养羊的用户有讨论需求,那么论坛类型更加适合网站.但是如果搜索婚纱摄影,出现在百度第一名的是百度图片,就说明图片类的程序更加适合这种类型的网站.