探秘Oracle数据库底层存储-前言

前言

经过一年的努力,Dbseeker for Oracle Database终于主要功能都已经开发完成。从2.5版本开始,已经开始支持ASM的存储文件。

回顾这一年,可谓困难重重。Oracle数据库不是开源的数据库,无法查看软件的源代码。官方能查到的文档也相当有限,这些关于数据库底层存储的结构,关系到Oracle的核心技术秘密,也不可能公开。我能做的只有不断尝试建立各种不同类型的表,不同类型的字段,模拟各种场景然后Dump各种数据块,用Winhex之类的工具查看十六进制数据,猜想出Oracle存储数据的规律,用Java编写实现读取数据代码,不断地重复前面的过程,不停的Try,,Try,Try。整个过程相当枯燥乏味,刚开始坚持了一个星期就开始后悔了,我天生性格倔强,半途而废也不是我做事的风格,还有在各种实验的过程中 ,也慢慢的找到了一点成就感,一步步坚持到最后。

刚开始Dbseeker只支持一些简单的字段类型比如number,varchar2,date,慢慢的功能完善,现在已经能支持90%以上的常见字段类型。这么多字段类型里面,Lob是最令我头疼的,Lob在数据文件的存储方式实在是太复杂了,Lob字段的研究花费我大量的时间。我曾试着把Oracle的一个大安装文件zip文件(1G以上),分别丢到BasicFile和SecureFile的Blob字段里,Dbseeker能顺利读出Lob字段,导出文件后能正常解压,一个字节也没有少。

自古中医诊断病人时,都是采用望,闻,问,切的方法,有经验的中医能通过古老的方法来确诊病人身体哪里出了毛病,开出药方,但自从西医解剖学出现以后,中医开始大大的落后于西医,西医通过大量对组织、细胞、胞器的解剖经验能确定病人的病因。话题好像有点扯远了,其实数据库也是一样,通过解剖数据块,以前的那些想不通的Oracle问题好像都迎刃而解了。比如为什么Oracle的dbname最大只有8位呢?因为Oracle里一些限制大都是和它的存储空间有关,在数据文件头块只有8个字节来存储dbname。Oracle的大部分命令和SQL语句,都是为了读写数据块,数据块的结构清楚了,命令的参数变来变去,那都是有道理的,能帮助理解大部分问题。

本连载《探秘Oracle数据库底层存储》将和大家一起学习Oracle的底层存储知识,探秘数据表成千上万条记录是如何保持在数据块里。本连载并不介绍Oracle数据库的各种命令和Sql语句,要理解Oracle的底层存储知识,需要一些计算机进制的知识和Oracle数据库的一些基础知识。

本连载内容均为作者原创,有部分插图来自于Oracle官方网站,如需转载,请注明出处。

Dbseeker作者  龙庆

2015.12.06 于深圳

发表评论:

昵称

邮件地址 (选填)

个人主页 (选填)

更多推荐

oracle的底层,探秘Oracle数据库底层存储-前言