解剖SQLSERVER 第七篇 OrcaMDF 特性概述(译)
解剖SQLSERVER 第七篇 OrcaMDF 特性概述(译)
http://improve.dk/orcamdf-feature-recap/
时间过得真快,这已经过了大概四个月了自从我最初介绍我的宠物项目OrcaMDF。
自从项目开始到现在,OrcaMDF发生了很多变化,功能更强了,因此我想提供一个概述对目前OrcaMDF的功能的概述以及我对OrcaMDF未来的计划
页面类型
OrcaMDF 当前支持以下页面的数据完整解析:Data, Index, TextMix(lob), TextTree(lob), GAM, SGAM, IAM, and PFS
也支持最小限度的解析bootpage,bootpage是用户表元数据查找的启动点
剩下的是排序,文件头,DCM,BCM页面,DCM和BCM页面跟IAM, GAM and SGAM 页面使用相同的位图格式,解析他们也很简单。
文件头有一些tricky 并且一些DBCC PAGE解析。排序页面跟其他页面很少有关系,他们只用于在SQLSERVER运行时候临时使用并且不会
存放在你的MDF文件里面
关于排序页:http://tech.it168.com/a2010/0916/1104/000001104500_1.shtml

数据类型
我已经添加了尽可能多的数据类型到OrcaMDF里面,稍后我会添加对LOB类型的解析支持,对XML不支持
当前支持的数据类型包括
bigint
binary
bit
char
datetime
decimal
image
int
nchar
ntext
nvarchar(x)
nvarchar(MAX)
smallint
sysname
text
tinyint
varbinary(x)
varbinary(MAX)
varchar(x)
varchar(MAX)
在以后添加新的数据类型相对来说比较容易,只需要分析存储格式并且实现ISqlType 接口
表和索引结构
使用DataScanner 类,OrcaMDF 能扫描聚集索引表和堆表。使用IndexScanner 类能扫描非聚集索引,无论他们是建立在堆表上还是在聚集索引表上
元数据
OrcaMDF 当前能暴露出来唯一已经公开暴露出来的元数据包括一系列的表名,OrcaMDF 能解析索引,表,分区,分配单元,列并提供他们的名字
这让你能扫描聚集索引表/堆表/索引。OrcaMDF 会自动解析对象的架构和搜索IAM链表头(堆)或者索引的root page
余下的关注点
OrcaMDF 当前只支持单个数据文件的数据库,那就是没有NDF文件的数据库。添加对NDF文件支持是很简单的,不过我的主要关注点是
对数据文件里核心数据结构的支持,所以,NDF文件不会改变太大。对于损坏的文件或者损坏检测,OrcaMDF 假设MDF文件是完好无损的。
有几个地方是能检测到数据库损坏的,但是我把检测数据库损坏的功能推迟到直到我认为OrcaMDF 能正确解析数据库的大部分功能的时候
OrcaMDF 这个项目从一开始到现在一直是深入研究SQLSERVER内部的一个很好的项目,因此,数据库损坏检测在现阶段并不是很重要
尽管数据库损坏检测是我最终想要添加的一个功能
下一步计划
我想扩展当前元数据解析的能力,特别关注公用的暴露出来的元数据。通过OrcaMDF能够生成像SSMS左边那样的树状的数据库/对象/列的图形界面
以为会添加表名,索引名,架构名,键等。我也会研究一下数据页面压缩,先从行压缩开始。压缩格式的文档有很多(相比起LOB结构),
压缩不会带来太多问题。
如果你有任何建议或特性你想看到的,请与我联系
许多人要求我介绍如何使用OrcaMDF并列出例子。我将会创建一个博客文章系列通过代码来展示如何使用OrcaMDF 提供的特性。
我还计划创建一篇博客来说明如何获取源代码和编译源代码,最后如何运行软件
第七篇完
解剖SQLSERVER 第七篇 OrcaMDF 特性概述(译)的更多相关文章
- 解剖SQLSERVER 第十篇 OrcaMDF Studio 发布+ 特性重温(译)
解剖SQLSERVER 第十篇 OrcaMDF Studio 发布+ 特性重温(译) http://improve.dk/orcamdf-studio-release-feature-recap/ ...
- 解剖SQLSERVER 第八篇 OrcaMDF 现在支持多数据文件的数据库(译)
解剖SQLSERVER 第八篇 OrcaMDF 现在支持多数据文件的数据库(译) http://improve.dk/orcamdf-now-supports-databases-with-mult ...
- 解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译)
解剖SQLSERVER 第四篇 OrcaMDF里对dates类型数据的解析(译) http://improve.dk/parsing-dates-in-orcamdf/ 在SQLSERVER里面有几 ...
- 解剖SQLSERVER 第五篇 OrcaMDF里读取Bits类型数据(译)
解剖SQLSERVER 第五篇 OrcaMDF里读取Bits类型数据(译) http://improve.dk/reading-bits-in-orcamdf/ Bits类型的存储跟SQLSERVE ...
- 解剖SQLSERVER 第十七篇 使用 OrcaMDF Corruptor 故意损坏数据库(译)
解剖SQLSERVER 第十七篇 使用 OrcaMDF Corruptor 故意损坏数据库(译) http://improve.dk/corrupting-databases-purpose-usin ...
- 解剖SQLSERVER 第六篇 对OrcaMDF的系统测试里避免regressions(译)
解剖SQLSERVER 第六篇 对OrcaMDF的系统测试里避免regressions (译) http://improve.dk/avoiding-regressions-in-orcamdf-b ...
- 解剖SQLSERVER 第十一篇 对SQLSERVER的多个版本进行自动化测试(译)
解剖SQLSERVER 第十一篇 对SQLSERVER的多个版本进行自动化测试(译) http://improve.dk/automated-testing-of-orcamdf-against ...
- 解剖SQLSERVER 第十三篇 Integers在行压缩和页压缩里的存储格式揭秘(译)
解剖SQLSERVER 第十三篇 Integers在行压缩和页压缩里的存储格式揭秘(译) http://improve.dk/the-anatomy-of-row-amp-page-compre ...
- 解剖SQLSERVER 第三篇 数据类型的实现(译)
解剖SQLSERVER 第三篇 数据类型的实现(译) http://improve.dk/implementing-data-types-in-orcamdf/ 实现对SQLSERVER数据类型的解 ...
随机推荐
- python学习笔记(一):作图
1.需要导入的包 import seaborn as sns import numpy as np from numpy.random import randn import matplotlib a ...
- js+cookie 购物车
$(function () { //var ctx = new Ch(); //ctx.Clear(); //$.cookie(ctx.cookieName, ""); //ale ...
- Java GC工作原理以及Minor GC、Major GC、Full GC简单总结
名词解释: GC:垃圾收集器 Minor GC:新生代GC,指发生在新生代的垃圾收集动作,所有的Minor GC都会触发全世界的暂停(stop-the-world),停止应用程序的线程,不过这个过程非 ...
- .net 控件
DevComponents.DotNetBar11.8.0.0:百度网盘里 DevExpress13.2.8:百度网盘里
- 数据库执行sql报错Got a packet bigger than 'max_allowed_packet' bytes及重启mysql
准备在mysql上使用数据库A,但mysql5经过重装后,上面的数据库已丢失,只得通过之前备份的A.sql重新生成数据库A. 1.执行sql报错 在执行A.sql的过程中,出现如下错误:Got a p ...
- PHP 图片生成文字
$dst_path = './1.png'; $font_file = './ADOBEHEITISTD-REGULAR (V5.010).OTF'; $img_bg = imagecreatefro ...
- 一个login
login 1.获取提交表单,保存到变量中.2.判断用户密码是否正确,利用Model类.3.验证用户是否激活.3.判断用户是否记住登录状态,是的话,将其用cookie和session分别保存.没有的话 ...
- CentOS6.5 (64bit) 光盘内部FTP源
一.启动系统,用ISO镜像挂载[root@yum ~]# mkdir -p /mnt/cdrom01[root@yum ~]# mkdir -p /mnt/cdrom02 [root@yum ~]# ...
- 通过通知监听键盘的状态来改变View的位置
#import "ViewController.h" @interface ViewController ()<UITextFieldDelegate>{ UIV ...
- SQL Server Update 语句使用Nolock 语法
Update talblename set Column='XX' from Table TableName with(nolock) where XXX