您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Oracle redo文件记录的内容

2024/3/18 1:29:00发布22次查看
对于redo日志来说,重做信息却相当精简,oracle只需要记录那些重构事务必须的信息(如事务号,文件号,块号,行号,字段等)即可,这个数据
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

该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product