love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

Phone:18180207355 提供专业Oracle/MySQL/PostgreSQL数据恢复、性能优化、迁移升级、紧急救援等服务

从Page结构来看达梦数据库是不是纯自研

本站文章除注明转载外,均为本站原创: 转载自love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

本文链接地址: 从Page结构来看达梦数据库是不是纯自研

说到达梦数据库,很多人以为都是基于Oracle 8i或者9i的代码copy的;实际上从测试来看并不是这样。这里我要说明,达梦没有给我一毛钱,我不是打广告。这里我通过简单的例子来对了一下窥视:

由于x86这里是反向存储,因此c1 06即a列dump value 196,6

778e 7777 6b2e 6c69 646c 2e62 6f63 016d 转换后为:8e77 7777 2e6b 696c 6c64 622e 636f 6d01

其中的77 7777 2e6b 696c 6c64 622e 636f 6d即为我们的数据 www.killdb.com,长度为14。

从dump的page header信息来看,其中:

0005 中 05表示tablespace id 05
第3,4 偏移量为file id 00 00
第6,7偏移量 0030为段头的header page地址,即48

178d 为最近一次修改的事务ID 6029. 类似Oracle checkpoint 。

从dump page的结果来看,在page的尾部没有类似Oracle一样的tail校验机制(block头scn的低位的后4位+block type+seq = block尾部的tail值).  因此从这里也能看出一个问题,如果使用了大于4k的page size,那么达梦数据库也存在partial write问题;换句话说达梦数据库也不支持原子写,而且还没有类似Oracle一样的严格的校验机制。

因此从物理结构来看与Oracle 完全不同,实际上Oracle 8i开始的block结构并没有太大的变化。

所以我认为达梦数据库应该是纯自研,猜测达梦是基于Oracle 8i/9i的说法应该可以洗洗睡了。

不过从相关视图的查询结果来看,达梦基于o的兼容是基于Oracle 12.1进行的。

最后简单总结一下这个小测试得到的几个结论:

1、达梦数据库默认创建的table是簇表,也就是索引组织表,也可以创建为普通堆表;可以参考之前写的文章 达梦数据库学习笔记-表与分区表

2、达梦不支持原子写,也存在partial write问题;

3、达梦不存在类似Oracle一样针对block的严格校验机制(之前已写过类似文章 达梦数据库学习笔记 -达梦IO写入性能与partial write

4、达梦数据page的结构与Oracle block 结构完全不同,其page头部即存在tablespace id+ file id + header page number;

但是page中的行数据存放格式跟oracle一样,也是row头存放列长度+type+row数据的模式。

Leave a Reply

You must be logged in to post a comment.