oracle 11g归档日志研究_1

oracle的数据库操作都会被记录在redo log中,用来进行undo(回滚)或在数据库异常的时候redo(重做)。redo log又分为online(在线日志)和archive(归档日志)两部分。

oracle默认有3个在线日志文件,通常它们是按顺序写满一个再写下一个,而写满的在线日志文件会被整理为归档日志。在每个在线日志内部,可能按顺序或随机填写数据。

 

在线日志和归档日志一样,都是由很多块组成,文件第1块作为文件头,包含块大小、块总数等信息,第2块作为数据库头,包含数据库信息(如版本号、数据库ID、文件序号等)。默认情况下,块大小为512bytes,也可能有1k、2k等的情况(我还没遇到),所以redo log文件大小一定是512字节的整数倍。

第1块的数据格式:

typedef struct fh0 {
    uint32_t unknown0;
    uint32_t unknown1;
    uint32_t unknown2;
    uint32_t unknown3;
    uint32_t unknown4;
    uint32_t blocksize;     //每块大小(字节), 512/1024...
    uint32_t blockcount;    //当前文件的总块数(不包括第一块)
    uint32_t unknown5;
    uint8_t nouse[480];
}Redo_fh0;

第2块的数据格式:

typedef struct scn {
    uint32_t scnbase;
    uint16_t scnwrapper;
    uint16_t filler;
}Redo_scn;

typedef struct fh1 {
    Redo_bh blockhead;
    uint32_t unknown0;
    uint32_t comvsn;        //Compatibility Vsn
    uint32_t dbid;
    uint8_t dbname[8];      //"ORCL"(sid)
    uint32_t controlseq;
    uint32_t filesize;
    uint32_t blocksize;
    uint16_t filenum;
    uint16_t filetype;
    uint32_t activid;
    uint8_t nouse0[36];     //0
    uint8_t descript[64];
    uint32_t nab;           //next available block
    uint32_t resetcount;
    Redo_scn resetscn;
    uint32_t hws;           //后3字节为0
    uint32_t thread;
    Redo_scn lowscn;
    uint32_t lowscntime;
    Redo_scn nextscn;
    uint32_t nextscntime;
    uint32_t unknown11;
    Redo_scn enablescn;
    uint32_t enablescntime;
    Redo_scn thrclosescn;
    uint32_t thrclosescntime;
    uint8_t unknown13[52];
    Redo_scn prevresetscn;
    uint32_t prevresetcount;
    uint8_t nouse1[152];    //0
    uint8_t unknown14[36];
    uint8_t nouse2[28];     //0
}Redo_fh1;

第1块与其他块完全不同,它不含有块头,也不被包含在块总数之内。从第2块开始,所有的数据块的前16个字节为块头,格式:

typedef struct bh {
    uint32_t signature;     //签名
    uint32_t blocknum;      //块号
    uint32_t sequence;      //顺序号
    uint16_t offset;        //最高位1需过滤掉
    uint16_t checksum;
}Redo_bh;

下面详细研究归档日志。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值