《ORACLEREDOLOG文件分析及C语言描述.doc》由会员分享,可在线阅读,更多相关《ORACLEREDOLOG文件分析及C语言描述.doc(4页珍藏版)》请在三一办公上搜索。
1、第 24 卷 第 7 期2003 年 7 月小 型 微 型 计 算 机 系 统M IN I- M ICRO SYST EM SV o l124 N o. 7J u ly 2003REDO LO G 文件分析及 C李 伟 明语言描述O RACL E( 广东省公安厅 交通警察总队 科技科, 广东 广州 510410)摘要: O rac le 数据库系统通过 R EDO L O G 技术来管理数据操作和事务, 如何分析跟踪 R EDO L O G 文件, 实现对数据库操作的监控, 在数据库审计、数据库复制和数据库安全等方面具有重要的实用价值. 本文对 O RA CL E R EDO L O G文件进
2、行了详尽的分析, 给出了 R EDO L O G 文件头、文件体块结构和文件数据结构的 C 语言描述, 以及 R EDO L O G事务控制机制的分析, 并已成功的用于数据库审计和数据库复制系统.关 键 词: R EDO L O G;中图分类号: T P 316数据库; 审计; 复制文献标识码: A文 章 编 号: 100021220 (2003) 0721243204O RACL E REDO LO G F ile Ana ly s is an d D e scr ip t ion w ith C L an guageL IW e i2m ing(S cience and T ech nol
3、ogy R esea rch I nstitu tion of G u ang d ong T raf f ic A dm in istra tion, G u ang z h ou 510410, C h ina )A bstrac t: O ra lce da taba se sy stem s u t ilize R EDO L O G tech no lo gy to m anage da ta op e ra t io n s and t ran sac t io n s . H ow to ana lyze and t rack R EDO L O G f ile, rea liz
4、e th e in sp ec t io n and co n t ro l o f th e D a taba se op e ra t io n s in da taba se aud it, da taba se rep lica t io n, da taba se secu r ity and m any side s, w h ich h a s im po r tan t u sefu l va lue s. T h is p ap e r ana lyze s th e R EDO L O G f ile in de ta il, g ive s th e de sc r ip
5、 t io n o f R EDO L O G f ile h ead, f ile bo dy st ruc tu re w ith th e C language, and th e de sc r ip t io n o f th e R EDO L O G t ran sac t io n co n t ro l m ech an ism. In th e end, th is tech no lo gy h a s been u t ilized in da taba se aud it and da ta cop y sy stem succe ssfu lly.Key words
6、: R EDO L O G; da taba se; aud it; rep lica t io n1引言R EDO L O G 文件, 直接从 R EDO L O G 中读取符合审计条件的数据, 就有可能实现对包括数据库管理员 (DBA ) 在内的用 户 的 所 有 增、删、改 操 作 进 行 有 效 的 审 计. 要 想 通 过 R EDOL O G 对数据库的事务和数据变化进行跟踪, 对数据库操作进行监控, 就必须清楚了解 R EDO L O G 的文件格式和 O rac le对 R EDO L O G 的操作机制. 但由于 O RA CL E 公司没有公开R EDO L O G 的技术
7、细节, 这就必须要对 R EDO L O G 二进制 文件进行分析. 本文给出了针对 R EDO L O G 二进制文件的分析, 给出了 R EDO L O G 文件头、文件体块结构, 并给出了R EDO L O G 文件的 C 语言描述, 以及 R EDO L O G 事务控制 机制, 为捕获对数据库的数据更改和操作, 实现基于 R EDOL O G 的数据库审计和数据复制奠定了坚实的基础.数据库应用的不断深入, 对数据的存储提出了真实性、安全性、可靠性要求, 全国大力推广电子政务系统对计算机数据 的安全又提出了更高的要求, 如何防止数据被非法修改和伪 造, 特别是如何防止业务数据被具有数据
8、库管理员 (DBA ) 权 限用户非授权修改, 一直是管理信息系统想解决而没有彻底 解决的问题. 目前对于 O rac le 一类的关系型数据库系统主要 采用 T r igge r 的方法对数据库进行审计, 审计的数据通过网 络远程传送到安全的地方存放. 这种方法并不能对系统管理 员进行有效审计, 主要原因是:(1) 系统管理员可以控制系统 T r igge r 的关闭和开启;( 2) 系统管理员以 In te rna l 用户登录到 O rac le 时, 系统 T r igge r 对数据库的操作不起作用, 此时的各种操作不能被审 计下来. 同时 T r igge r 的方法加大了数据库系
9、统的开销.由于 O rac le 数据库有一重要特性是使用 R EDO L O G 文 件来实现事务和数据库的恢复, 通过 R EDO L O G 文件维护 数据库数据和事务一致性, R EDO L O G 记录了数据库事务和物理操作的所有信息, 不管什么用户以何种方式登录, 所有的增、删、改操作都会登录在 R EDO L O G 中. 因此, 如果能跟踪REDO LO G 文件的分析与 C 语言描述2O RA CL E 通过L GW R 进程实现对 R EDO L O G 的管理,L GW R 进程循环写预先设定的若干个 R EDO L O G 文件来保 存数据库操作信息. R EDO L
10、O G 以二进制格式文件保存, 包括文件头和文件体两部分.2. 1 REDO LO G 文件头的分析R EDO L O G 文件按块存储, 每块大小为 512by te s 或 1K、收稿日期: 2002210208 作者简介: 李伟明, 硕士, 工程师, 主要从事智能交通, 交通信息管理系统, 数据库系统应用的研究开发工作.2K 等, 其中文件的第一、二块为文件头, 第一块包含文件块大小, 块的总数等信息. 第二块保存了文件版本号, 兼容版本号,数据库 ID 号, 数据库名, 控制顺序号, 文件大小, 文件序号, 文 件块大小和文件类型等 R EDO L O G 文件的基本信息; 从第 二块
11、起, 每块都有一个块头, 包含 R EDO L O G 顺序号, 块号 等信息. 本文以运行在 X 86 平台上的 O RA CL E 数据库系统 的 R EDO L O G 存储数据为例, 整型数的存放均是低字节在 前, 高字节在后. 其中数据的字节长度和字节顺序跟 C PU 有 关.第一块示例如下:00000000 00 00 00 00 00 02 00 00 00 08 00 00 6D 6C 6B 6A00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000020 00 00 00 00 00 00 00 00 00
12、00 00 00 00 00 00 00. . . . . .由上块结构可以得到 R EDO L O G 文件块大小为 00 0200 00 即 512 by te s, 该 R EDO L O G 文件块的总数为 00 08 0000 即 2048 块.第二块示例如下:00000200 B 1 02 00 00 01 00 00 00 7D 69 E 1 1A 00 00 11 0C00000210 00 00 10 08 00 00 10 08 60 BD 45 3A 4F 52 43 4C00000220 00 00 00 00 4E 08 00 00 00 08 00 00 00 02
13、 00 0000000230 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 0000000240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000250 00 00 00 00 00 00 00 00 00 00 00 00 54 68 72 65. . . . . .此例中: 块头为 B 1 02 00 00 01 00 00 00 7D 69 E 1 1A 0000 11 0C , 由 此 结 构 可 以 得 出 该 R EDO L O G 顺 序 号 为0x 000002B 1, 块 号
14、为 0x 00000001. 紧 接 着 是 文 件 版 本 号 为0x 08100000, 兼 容 版 本 号 为 0x 08100000, 数 据 库 ID 号 为0x 3a45bd60, 数据库名为 O R CL , 控制顺序号为 0x x 84e, 文件大小为 0x 800 块, R EDO L O G 文件序号为 1, 文件块大 小为 512 字节, 文件类型为 2 即 R EDO L O G 文件类型.由以上分析, R EDO L O G 文件头中的第一块数据结构用C 语言描述如下:typ edef st ruc t f ileh ead0un signed lo ng no u
15、se;un signed lo ng b lo ck size; un signed lo ng b lo ck co un t; un signed lo ng x labe l; redo b lo ck 0;文件头中第二块的数据结构用 C 语言描述如下:st ruc t b lo ck h eadun signed lo ng b lo ck sequence; un signed lo ng b lo ck num be r; un signed lo ng t im e;st ruc t f ileh ead1st ruc t b lo ck h ead un signed lo n
16、gun signed lo ngun signed lo ng by teun signed lo ngun signed lo ng un signed lo ng un signed sho r t un signed sho r t by teby teun signed lo ng un signed lo ng st ruc t scn 1un signed lo ng un signed lo ng st ruc t scn 1un signed lo ng st ruc t scn 1un signed lo ng un signed sho r t un signed sho
17、r th ead12b lo ck h ead;so f tw a re2v sn;com p a t ib ility2v sn; DB id;DB nam e8;co n t ro lseq;f ile size;b lo ck size;f ilenum be r;f ile typ e;f ille r40x28;de sc r ip t0x40;nab; nex t ava ilab le b lo ck re se tco un t;re se t scn;hw s; h d r w r ite seq th read;low scn;low scn t im e;nex t sc
18、n;nex t scn t im e;eo t; end o f th readd is; t rue if th read d isab led a t end o fth is lo g enab le scn;enab le scn t im e; th readc lo se scn; tc st im e;lo gfo rm a t2v sn;st ruc t scn 1un signed lo ng st ruc t scn 1un signed lo ng un signed lo ng;2. 2REDO LO G 文件体的分析与 C 语言描述R EDO L O G 从第三块开始
19、属于 R EDO L O G 的文件体,文件体由 redo 记录组成, redo 记录又散布在 R EDO L O G 文件的各数据块中. redo 记录可能在一个数据块中, 也可能在 多个数据块中, 一个数据块也可能含有多个 redo 记录.文件体的每个数据块由块头和块数据组成, 块头由 R E 2DO L O G 顺 序 号 sequence, 块 号 b lo ck num be r, 块 更 新 时 间w r ite t im e, 第 一 个 redo 记 录 的 位 置 o ff se t, 以 及 校 验 和ch eck sum 组成, 块头含有 redo 记录的 redo 块地
20、址. 块数据就 是 redo 记录, redo 记录包含 O RA CL E 数据库的事务信息和 物理操作信息, 由记录头、ch ange 项组成, ch ange 项由 ch ange 头、ch ange 索引表、ch ange 数据体组成.R EDO L O G 文件体数据块示例如下:00000600 B 1 02 00 00 03 00 00 00 80 69 E 1 1A 10 00 00 0000000610 5C 02 00 00 01 00 7D 00 D 9 37 1C 31 05 02 0B 0000000620 01 00 00 00 02 00 40 00 B 3 E 9
21、 1B 31 7D 00 00 0000000630 01 00 00 00 04 00 20 00 2C 00 00 00 22 00 00 00. . . . . .2. 2. 1文件体数据块块头分析及 C 语言描述上述示例文件体的数据块第一行表示该数据块的块头信息, 其组成部分的意义如下所示:sequence= 0x2B 1 b lo ck num be r= 0x 3w r ite t im e= 0x1A E 16980o ff se t = 0x 10由上, R EDO L O G 文件体数据块块头数据结构用 C 语言un signed sho r t un signed sho
22、r to ff se t;ch eck sum ;st ruc t scn 1 un signed lo ng SCN ba se;un signed sho r t SCN w rapp e r;un signed sho r t f ille r;7 期李伟明 等: O RA CL E R EDO L O G 文件分析及 C 语言描述1245描述如下:st ruc t b lo ck h eadun signed lo ng sequence;un signed lo ng b lo ck num be r;un signed lo ng t im e;数据类型.由 上, 本 示 例 中
23、紧 接 着 redo 记 录 SCNch ange 项的 ch ange 头的值, 分别为:O P = 5. 2CL S = 0x 0bA FN = 1DBA D = 0x 00400002的 是 第 一 个o ff se t;ch eck sum ;un signed sho r t un signed sho r tSCN =SEQ = T YP =0x 007d. 311be9b 310;2. 2. 2 文件体数据块的块数据分析及 C 语言描述redo 记录 (块数据) 由记录头, ch ange 项组成.(1) redo 记录 (块数据) 的记录头的语言描述及分析用 C 语言描述 R
24、EDO L O G 的记录头数据结构, 可表示 如下:ch ange 索引表由索引表长度 ( 2 个字节) , ch ange 项的长度 (各两个字节) 组成. 在本示例中, 如文件体数据块第四行所 示, 第一个 ch ange 项的索引表为 04 00 20 00 可以看出, 索引表 大 小 为 0x 0004 个 字 节, 表 示 只 有 一 个 表 项, 0x 0020 表 示ch ange 第一项的大小为 0x 0020 个字节.ch ange 数据体的结构根据 ch ange 头操作码 O P 不同而 不同. 由于操作码较多, 下面给出几个重要的操作码 O P 分析, 及其 ch a
25、nge 数据体的结构.st ruc t reco rdh eadun signed lo ng reco rd leng th;un signed sho r t V L D ;un signed sho r t rec scnw rapp e r;un signed lo ng rec scnba se;块数据中 ch ange 数据体的 ch ange 头操作码 O P 的分2. 2. 3析;其中, reco rd leng th 为 redo 记录的长度, rec scnw rapp e r、rec scnba se 合起来为 redo 记录的 SCN ( sy stem ch ange
26、 num 2be r) , SCN 是 o rac le 数据库中最重要的数据之一, SCN 由一 个单独的线程产生, 相当于系统的一个时间戳, o rac le 的操作 可根据 SCN 来排序, 每个事务提交时都分配唯一一个 SCN值, 事务可根据 SCN 来排序.由示例数据块第二行可得:reco rd leng th = 0x025cV L D = 1R ec scnw rapp e r= 0x 7dR ec scnba se= 0x 311c37d9(1) O P = 5. 2 x id h eade rCHA N GE # 1 T YP: 0 CL S: 11 A FN : 1 DBA
27、 : 0x 00400002 SCN :0x007d. 3122328a SEQ : 1 O P: 5. 2k tudh redo: slt: 0x0023 sqn: 0x00000025 f lg:fb i: 00x0412 siz:212uba: 0x 00400091. 0020. 08 p x id: 0x0000. 000.00000000O P = 5. 2 修改回滚段 ( ro llback segm en t) 的头, 主要是在 ro llback segm en t 头的事务表 (x id tab le) 中添加事务信息. 此 例显示在 ro llback segm en t
28、 事务表的 slo t 槽 ( slt) 0x 0023 中添 加事务信息, 事务的 undo b lo ck add re ss (uba) 为 0x 00400091.0020. 08, 其中 0x 00400091 为文件块地址, 0020 为顺序号, 08为记录号. 回滚记录的大小 ( siz) 为 212 个字节.同 时 DBA D = 0x 00400002 表 示 此 数 据 块 地 址, 显 示 此ro llback segm en t 事务表在文件的第二块中. (2)O P = 5. 1 ro llback segm en tCHA N GE # 2 T YP: 0 CL S
29、: 12 A FN : 1 DBA : 0x 00400091 SCN :0x007d. 31223289 SEQ : 1 O P: 5. 1k tudb redo: siz: 212 sp c: 6652 f lg: 0x 0012 seq: 0x0020 rec:0x08x id: 0x0000. 023. 00000025k tub l redo: slt: 35 rc i: 0 op c: 11. 1 o b jn: 15 o b jd: 15 t sn: 0U ndo typ e: R egu la r undo B eg in t ran s L a st buffe r sp l
30、it: N oT em p O b jec t: N oT ab le sp ace U ndo: N o0x00000000 p rev c t l uba: 0x 00400091. 0020. 07p rev c t l m ax cm t scn: 0x 007d. 311ffcad p rev tx cm t scn:0x007d. 31206e62KDO undo reco rd: KTB R edoop: 0x 04 ve r: 0x 01op: L it l: scn: 0x0000. 015. 00000025 uba: 0x00400091. 0020.07f lg: C
31、222 lk c: 0 scn: 0x 007d. 3122328aKDO O p co de: U R P x typ e: XA bdba: 0x 0040003a h dba:0x 00400039(2) redo 记录 (块数据) 的 ch ange 项的语言描述及分析块 数 据 中 的 ch ange 项 由 ch ange 头,ch ange 数据体组成.ch ange 头的数据结构用 C 语言表示为st ruc t op co dech ange 索 引 表,by te laye r;by te co de;st ruc t ch angeh eadO P;CL S; A FN
32、;DBA D ;st ruc t op co de un signed sho r t un signed lo ng un signed lo ngab so la te f ile num be r10B it = F ile N O.and 22B it =B lo ckN O.st ruc t scn 1 SCN ;by te by teSEQ ; sequenceT YP; 1= da ta 2= index 0= o th e r sun signed sho r t f ille r;其中, O P 为操作码表示 o rac le 不同的数据操作. A FN 为数据所在文件号,
33、DBA D (D a ta b lo ck add re ss) 为数据块的地 址, 前 10 个 b it 表示文件号, 后 22 个 b it 表示块号. T YP 表示体的结构. 例如:O P = 5. 19 记 录 事 务 对 应 的 Se ssio n 信 息, 包 括 se ssio n num be r = 17 , 用户名 cu r ren t u se rnam e = SYS 等.it li: 1 isp ac: 0 m axf r: 4863tabn: 0 slo t: 3 ( 0x 3) f lag: 0x2c lo ck: 0 ck ix: 0 nco l: 12 n
34、new : 11 size: 0co l 1: 3co l 2: 2co l 3: 2co l 4: 2co l 5: 6co l 6: 3co l 7: 3 co l 8: 3 co l 9: 1 co l 10: 2 co l 11: 252 42 31 c1 02c1 03c1 35c5 09 19 1d 2f 5b c2 02 1ac2 02 16 c2 02 3280c1 03 c1 02O P = 5. 4 记录事务提交信息, 包括 comm it SCN ,块号 DBA D , 及事务其他信息 slo t, sequence, U BA 等.事务表O P = 11. 2 记录数据
35、块数据插入 ( In se r t) 的详细信息.O P = 11. 3 记录数据块数据删除 (de le te) 的详细信息.3REDO LO G 事务控制机制O RA CL E 事务的第一条 redo 记录, 总包含 O P = 5. 1 , O P = 5. 2 的 ch ange 项, O P = 5. 2 中的 x id 号是事务的唯一标 识. O P = 5. 1 中的 slt, sqn , DBA D 和 x id 唯一对应, 也可唯 一标识这个事务. 在该事务的生命周期内, 所有数据操作的 redo lo g 记录都包含 x id, x id 可以用来跟踪此事务.SCN 号相当
36、于 O RA CL E 数据操作的时戳, 标识了各个 操作的先后顺序, 我们可以根据 SCN 将事务的操作进行排序.所有事务都以 O P = 5. 4 结束, O P = 5. 4 包含该事务的DBA D , slt, sqn , 它们对应事务开始时O P = 5. 2 的 DBA D , slt, sqn.由此我们可以根据 DBA D , slt, sqn , x id 和 SCN 的信息,跟踪一个完整的事务过程.O P = 5. 1 记录 ro llback segm en t 的数据变化, 用于一致性读和回滚.第一项中 ro llback 记录的大小为 siz: 212, 顺序号为 se
37、q:0x 0020, 记录号为 rec: 0x 08, 事务 ID 号为 x id: 0x 0000. 023.00000025, x id 唯一标识一个事务. 这些数据刚好与 O P = 5. 2的数据相对应.第二项数据表示对应的数据库对象,数据块对象号 o b2jn: 15 数据块数据对象号 o b jd: 15 表空间号 t sn: 0 slo t 号slt: 35 记录索引数 rc i: 0 对数据的操作码 op c:11. 1第三项记录详细的数据信息, 包括数据操作码 U R P , dba(da ta b lo ck add re ss) , f lag, lo ck , slo
38、t 及数据列的信息. (3) O P = 11. 5 U PDA T ECHA N GE # 3 T YP: 2 CL S: 1 A FN : 1 DBA : 0x 0040003a SCN :0x 007d. 3122328a SEQ : 1 O P: 11. 5KTB R edoop: 0x11 ve r: 0x01op: F x id: 0x 0000. 023. 00000025 uba: 0x 00400091. 0020. 08B lo ck c leano u t reco rd, scn: 0x 007d. 3122328b ve r: 0x01, en t r ie s fo
39、 llow. . .it li: 1 f lg: 2 scn: 0x 007d. 3122328aKDO O p co de: U R P x typ e: XA bdba: 0x0040003a h dba:0x 00400039 it li: 1 isp ac: 0 m axf r: 4863tabn: 0 slo t: 3 ( 0x 3) f lag: 0x2c lo ck: 1 ck ix: 0nco l: 12 nnew : 11 size: 04结语通过对 R EDO L O G 二进制文件的剖析可以看出, R EDOL O G 不仅记录了数据库的数据操作信息, 还记录了事务的信
40、息, 并提供了一种事务控制机制. 完全通过跟踪在线的 R EDO L O G 文件或离线的归档文件, 捕获数据库的数据更改和操作, 利用捕获的操作实时监控对数据库的操作, 利用捕获的数据更改信息用于数据库审计和数据复制. 对文件的监控操作, 不需要任何数据库的功能, 也不受任何 O RA CL E 用户控制, 速度快, 安全可靠, 并且对数据库的性能完全没有影响, 大大 优于基于 T r igge r、辅助表等传统的实现方法. 利用本文给出 的 R EDO L O G 文件分析及其 C 语言描述, 开发了基于 R E 2DO L O G 技术的数据库审计系统和数据库复制系统. 实际运 行表明,
41、 系统捕获包括数据库管理员 (DBA ) 用户在内的用户数据更改和操作, 实现数据库的审计和数据复制不仅可行有效, 而且安全可靠.co l 1: 3co l 2: 2co l 3: 2co l 4: 2co l 5: 6co l 6: 3co l 7: 3co l 8: 3co l 9: 1co l 10: 2co l 11: 252 42 31 c1 02c1 03c1 35c5 09 19 1d 2f 5b c2 02 1ac2 02 16 c2 02 3280c1 03 c1 02Ref eren ce:O RA CL E 8 i A dm in ist ra to r H andboo
42、 kZ. O rac le Co rp. , 1999U llm an J D. P r inc ip le o f da taba se sy stem sM . Com p u te r Sc i2ence P re ss, Inc. 1982B r ian W. Ke rn igh an. T h e C p ro g ramm ing language (Seco nd E d i2t io n )M . B e ijing, P ren t ice H a ll. Inc 198812O P = 11. 5 记录数据块数据更改 (U PDA T E ) 和事务 ID(x id) 的信息. 这里事务 ID 是 x id: 0x 0000. 023. 00000025 U n2do B lo ck A dd re ss (U BA ) : 0x 00400091. 0020. 08.同样分析, 可以得到下述操作码 O P 及相应 ch ange 数据3