Welcome 微信登录

首页 / 数据库 / MySQL / Oracle redo文件记录的内容

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 buffer4.修改sal=4000,这是update的数据变更,需要记入redo log buffer5.当用户提交时,会在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
  • 1
  • 2
  • 3
  • 下一页
Oracle一个实例配置多个listener或多个端口Oracle的回闪查询相关资讯      redo  Oracle redo 
  • 大量redo生成的问题原因及改进  (09/06/2015 21:44:21)
  • online redo日志文件损坏恢复  (01/11/2015 08:36:34)
  • Redo丢失的4种情况及处理方法  (11/26/2014 11:12:28)
  • Oracle redo日志维护  (04/10/2015 10:32:18)
  • Oracle 10g Standby Database 实时  (12/22/2014 18:34:35)
  • Oracle非关键文件恢复,redo、临时  (09/29/2014 20:20:14)
本文评论 查看全部评论 (0)
表情: 姓名: 字数