事务槽及Oracle多种提交方式

来源:互联网 发布:js验证身份证 编辑:程序博客网 时间:2024/05/18 00:59
事务槽ITL,存在于数据块的头部
    默认是1
    最大255(从Oracle10g开始不能更改)

    select INI_TRANS,MAX_TRANS from dba_tables where table_name='T2'


对数据块进行更改的时候

首先对事务槽进行处理(1、写入事务ID 2、写入UBA(回滚块地址))


create table t10(id number(5),name char(2000));
insert into t10 values(1,'aa');
insert into t10 values(2,'bb');
insert into t10 values(3,'bb');
insert into t10 values(4,'cc');
insert into t10 values(5,'dd');
commit;
select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid),id from t10;

DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)         ID
------------------------------------ ------------------------------------ ----------
                                   1                                67362          1
                                   1                                67362          2
                                   1                                67362          3
                                   1                                67363          4
                                   1                                67363          5

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

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

    UBAFIL                       UBABLK                   XIDUSN(回滚段编号)    XIDSLOT(事务表编号)     XIDSQN(被覆盖次数) START_SCNB
---------- ---------- ---------- ---------- ---------- ----------
         2 (回滚块文件)        20 (回滚块)         3                                            39                                                852                                  2227264


SQL> select * from v$rollname;

       USN NAME
---------- ------------------------------
         0 SYSTEM
         1 _SYSSMU1$
         2 _SYSSMU2$
         3 _SYSSMU3$
         4 _SYSSMU4$
         5 _SYSSMU5$
         6 _SYSSMU6$
         7 _SYSSMU7$
         8 _SYSSMU8$
         9 _SYSSMU9$
        10 _SYSSMU10$

11 rows selected.

SQL> 

alter system dump undo header '_SYSSMU3$';//转储回滚段头

alter system dump datafile 2 block 20;

alter system dump datafile 1 block 67362;

SQL> select spid from v$process where addr in (select paddr from v$session where
    sid=(select sid from v$mystat where rownum=1));

SPID
------------
4716

SQL>

[oracle@czjie ~]$ cd $ORACLE_BASE;
[oracle@czjie ora10g]$ ls
admin  flash_recovery_area  oradata  oraInventory  product
[oracle@czjie ora10g]$ cd admin
[oracle@czjie admin]$ ls
ORCL
[oracle@czjie admin]$ cd ORCL
[oracle@czjie ORCL]$ ls
adump  bdump  cdump  dpdump  pfile  udump
[oracle@czjie ORCL]$ cd udump
[oracle@czjie udump]$ ls *4716*
orcl_ora_4716.trc
[oracle@czjie udump]$

Itl           Xid                                                           Uba         Flag  Lck        Scn/Fsc
0x01   0x0007.016.0000031e  0x008003d8.0177.0e  C---    0  scn 0x0000.0021fc27
0x02   0x0003.027.00000354  0x00800014.034d.03  ----    1  fsc 0x0000.00000000



IMU BUFFER



1、日志是从sharepool直接写入到redolog

2、IMUbuffer写满的时候要写入(buffercache)undobuffer里面,然后写入磁盘。

3  事务在获取undoblock的变快

4、CR读的时候速度变快

5、rac环境中是被禁止的


select * from v$sysstat where name like '%IMU%';


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

读一致性


一个数据块的undo数据可以找到这个数据块的所有undo数据