iplaybit
  • 首页
  • 系统运维
  • IT新闻
  • 科技新闻
  • 关于我们
  1. 首页
  2. 系统运维
  3. 正文

oracle redo文件记录的内容

2019年12月26日 555点热度 1人点赞 0条评论
redo的内容
oracle通过redo来实同快速提交,一方面是因为redo log file可以连续,顺序地快速写出,另外一个方面
也和redo记录的精简内容有关.
为了了解redo的内容,先需要了解两个概念:改变向量和重做记录
改变向量(change vector)
改变向量表示对数据库内某一个数据块所做的一次变更.改变向量(change vector)中包含了变更的数据
块的版本号,事务操作代码,变更从属数据块的地址(DBA)以及更新后的数据.例如,一个update事务包含
一系列的改变向量,对于数据块的修改是一个向量,对于回滚段的修改又是一处向量.
重做记录(redo record)
重做记录通常由一组改变向量组成,是一个改变向量的集合,代表一个数据库的变更(insert,update,delete
等操作),构成数据库变更的最小恢复单位.例如,一个update的重做记录包括相应的回滚段的改变向量和相应
的数据块的改变向量等.
假定发出了一个更新语句;
update scott.emp  set sal=4000 where empno=7788;
看一下这个语句是怎么执行的
1.检查empno=7788记录在buffer cache中是否存在,如果不存在则读取到buffer cache中.
2.在回滚表空间的相应回滚段事务表上分配事务槽,这个操作需要记录redo信息.
3.从回滚段读入或者在buffer cache中创建sal=3000的前镜像,这需要产生redo信息并记入redo log buffer
4.修改sal=4000,这是update的数据变更,需要记入redo log buffer
5.当用户提交时,会在redo log buffer记录提交信息,并在回滚段标记该事务为非激活(Inactive)
下面通过珍上具体的试验来再现这个过程.
1.先通过switch logfile切换日志,使用sys用户进行日志切换,使得接下来的更新可以使用新的日志.
SQL> alter system switch logfile;
System altered.
SQL> select * from v$log;
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
FIRST_CHANGE# FIRST_TIME
------------- ------------
         1          1         14   52428800          1 NO  ACTIVE
       801067 03-JAN-14
         2          1         15   52428800          1 NO  CURRENT
       813289 04-JAN-13
         3          1         13   52428800          1 NO  INACTIVE
       764715 30-DEC-13
2.更新并提交事务
SQL> select * from scott.emp a where a.empno=7788;
     EMPNO ENAME      JOB              MGR HIREDATE            SAL       COMM
---------- ---------- --------- ---------- ------------ ---------- ----------
    DEPTNO
----------
      7788 SCOTT      ANALYST         7566 19-APR-87          3000
        20
SQL> update scott.emp  set sal=4000 where empno=7788;
1 row updated.
SQL> commit;
Commit complete.
3.使用sys用户在另外的session转储日志文件:
SQL> alter system dump logfile '/u01/app/oracle/product/10.2.0/oradata/jingyong/redo02.log';
System altered.
SQL> select
  2  d.value||'/'||lower(rtrim(i.instance,
  3  chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name
  4  from ( select p.spid
  5  from sys.v$mystat m,
  6  sys.v$session s,sys.v$process p
  7  where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,
  8  ( select t.instance from sys.v$thread  t,sys.v$parameter v
  9  where v.name = 'thread' and
10  (v.value = 0 or t.thread# = to_number(v.value))) i,
11  ( select value from sys.v$parameter
12  where name = 'user_dump_dest') d
13  /
TRACE_FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/admin/jingyong/udump/jingyong_ora_3969.trc
4.获取trace文件
从日志文件的转储信息中,可以找到这个事务信息(sid=149,serial#=930)
*** SERVICE NAME:(SYS$USERS) 2013-01-04 17:06:48.813
*** SESSION ID:(149.930) 2013-01-04 17:06:48.813
改变向量1
这是对于回滚段头的修改,分配事务表,从绝对文件号为2(AFN:2)可以知道这是UNDO
表空间,通过UBA的DBA换算能力找到相应的block
SQL> SELECT DBMS_UTILITY.data_block_address_file (
  2            TO_NUMBER(LTRIM('0x00800099', '0x'), 'xxxxxxxx'))
  3            AS file_no,
  4         DBMS_UTILITY.data_block_address_block (
  5            TO_NUMBER(LTRIM ('0x00800099', '0x'), 'xxxxxxxx'))
  6            AS block_no
  7    FROM DUAL;
   FILE_NO   BLOCK_NO
---------- ----------
         2        153
REDO RECORD - Thread:1 RBA: 0x00000f.00000023.0010 LEN: 0x0200 VLD: 0x0d
SCN: 0x0000.000c68fd SUBSCN:  1 01/04/2013 17:04:58
CHANGE #2 TYP:0 CLS:35 AFN:2 DBA:0x00800099 OBJ:4294967295 SCN:0x0000.000c6859 SEQ:  1 OP:5.2
ktudh redo: slt: 0x0025 sqn: 0x00000137 flg: 0x0012 siz: 128 fbi: 0
            uba: 0x0080106d.0102.29    pxid:  0x0000.000.00000000
CHANGE #4 TYP:0 CLS:36 AFN:2 DBA:0x0080106d OBJ:4294967295 SCN:0x0000.000c6858 SEQ:  1 OP:5.1
ktudb redo: siz: 128 spc: 2418 flg: 0x0012 seq: 0x0102 rec: 0x29
            xid:  0x000a.025.00000137
ktubl redo: slt: 37 rci: 0 opc: 11.1 objn: 51148 objd: 51148 tsn: 4
Undo type:  Regular undo        Begin trans    Last buffer split:  No
Temp Object:  No
Tablespace Undo:  No
             0x00000000  prev ctl uba: 0x0080106d.0102.28
prev ctl max cmt scn:  0x0000.000c61f3  prev tx cmt scn:  0x0000.000c61ff
txn start scn:  0x0000.00000000  logon user: 0  prev brb: 8392808  prev bcl: 0 KDO undo record:
KTB Redo
op: 0x03  ver: 0x01
op: Z
KDO Op code: URP row dependencies Disabled
  xtype: XAxtype KDO_KDOM2 flags: 0x00000080  bdba: 0x01000020  hdba: 0x0100001b
itli: 2  ispac: 0  maxfr: 4858
tabn: 0 slot: 7(0x7) flag: 0x2c lock: 0 ckix: 191
ncol: 8 nnew: 1 size: 0
Vector content:
col  5: [ 2]  c2 1f
改变向量2
这里记录的是前镜像信息,注意到"col  5: [ 2]  c2 1f记录的就是对于col5的修改,修改前的数据值3000(c21f)
SQL>  select utl_raw.cast_to_number('c21f') from dual;
UTL_RAW.CAST_TO_NUMBER('C21F')
------------------------------
                          3000
改变向量3
这里记录的是对于数据块的修改,"col  5: [ 2]  c2 29"记录的是对于col5的修改,
修改后的值为4000(c229)
SQL>   select utl_raw.cast_to_number('c229') from dual;
UTL_RAW.CAST_TO_NUMBER('C229')
------------------------------
                          4000
CHANGE #1 TYP:2 CLS: 1 AFN:4 DBA:0x01000020 OBJ:51148 SCN:0x0000.0006bfdb SEQ: 16 OP:11.5
KTB Redo
op: 0x11  ver: 0x01
op: F  xid:  0x000a.025.00000137    uba: 0x0080106d.0102.29
Block cleanout record, scn:  0x0000.000c68f4 ver: 0x01 opt: 0x02, entries follow...
  itli: 1  flg: 2  scn: 0x0000.0006bfdb
KDO Op code: URP row dependencies Disabled
  xtype: XAxtype KDO_KDOM2 flags: 0x00000080  bdba: 0x01000020  hdba: 0x0100001b
itli: 2  ispac: 0  maxfr: 4858
tabn: 0 slot: 7(0x7) flag: 0x2c lock: 2 ckix: 191
ncol: 8 nnew: 1 size: 0
Vector content:
col  5: [ 2]  c2 29
改变向量4
当事务提交之后,记录的scn信息,注意这里标记为"MEDIA RECOVERY MARKER SCN",也就是说,这是一个
可以恢复的时间点,事务的恢复必须以redo record为最小单位
CHANGE #1 MEDIA RECOVERY MARKER SCN:0x0000.00000000 SEQ:  0 OP:23.1
session信息
最前面的部分记录的是产生这些redo的session信息
*** 2013-01-04 17:06:48.813
*** SERVICE NAME:(SYS$USERS) 2013-01-04 17:06:48.813
*** SESSION ID:(149.930) 2013-01-04 17:06:48.813
对于redo日志来说,重做信息却相当精简,oracle只需要记录那些重构事务必须的信息(如事务号,文件号,块号,
行号,字段等)即可,这个数据量大大减少
标签: oracle redo 数据库
最后更新:2019年12月26日

iplaybit

点赞
< 上一篇
下一篇 >

文章评论

取消回复
最新 热点 随机
最新 热点 随机
Steam内存测试工具 SPDK详解 Hadoop之HDFS优缺点、设计原理、框架 tmpfs总结 当64核遇上PCIe 4.0 超级算力是这样建成的 Edge for Linux开发者预览将至 WSL子系统可运行带GUI的Linux应用程序
DML操作出现交集的情况 docker-ce安装 博科光纤交换机故障排除 台积电宣布已制造超10亿颗7nm完好芯片:6nm已投入量产 AWR性能报告分析 对于NAS,IP SAN以及iSCSI SAN存储的一些认识和理解
一起来了解为双屏设备而生的Windows 10X系统
标签聚合
文件系统 oracle docker 操作系统 linux AMD netapp san intel 存储 3par hp 数据库 redo windows cpu

COPYRIGHT © 2020 iplaybit. ALL RIGHTS RESERVED.

京ICP备18020432号-1