SQL2005数据库IAM索引映射错误手工处理后完美修复
【单位名称】 北京某超市
【介质描述】科脉商务云V9
【数据库版本】 SQL 2005
【数据库大小】MDF 14GB
财务服务器
【数据恢复故障描述】服务器意外断电重启后 软件运行某些功能报错
【数据恢复故障分析】
1:kmzy_v9的 DBCC 结果。
消息 2576,级别 16,状态 1,第 1 行
索引分配映射(IAM)页 (1:389643) (位于对象 ID 0,索引 ID -1,分区 ID 72057594058964992,分配单元
ID 72057594185252864 (类型为 Unknown))的上一个指针指向了 IAM 页 (0:0),但扫描过程中检测不到它。
CHECKDB 发现有 1 个分配错误和 0 个一致性错误与任何单个的对象都没有关联。
CHECKDB 在数据库 ‘kmzy_v9’ 中发现 1 个分配错误和 0 个一致性错误。
对于由 DBCC CHECKDB (kmzy_v9)发现的错误,repair_allow_data_loss 是最低的修复级别

【数据恢复过程】
1:数据库常用修复方法一种是通过数据库修复软件导表提取数据,这种方式修复后一般会丢失数据或者在软件里面运行出现各种报错,如果数据很大这种方式很费时间,第二种就是通过手工纠正错误,这种方式修复好后数据几乎可以完美。
2:根据DBCC 检测后的信息定位到报错的表名字,通过修改底层数据来纠正错误。
遇上个尴尬的事,合同内容只是帮客户制卡发卡,客户门禁服务器崩了,整个系统要重装,这个服务跟监控和其它几个系统是联动的,前两年重搞一次收2000元,如果简单搞下一天搞完还挺香的,关键是这个系统太大,调试几天才行,收多又不好意思!
在这里吐槽一下,做开发大神们,一个简单的门禁系统别搞那么复杂,搞成那种一键安装多好,数据库最低SQL2005,装完后,还要各种连接配置,没搞过的技术,根本接受不了,还不是一两句话可以说清楚的,拿着系统说明根本就不会操作。

SQLite 背后的故事
这个故事是听到的:
SQLite 现在已经是全球用户最多的数据库产品。它非常小巧以及单文件无法单独操作系统进程,就像病毒一样依附在宿主程序的进程里运行,你看不到它,但它却无处不在。汽车,手机,浏览器,以及各类 app 里都能见到 .db 结尾的 SQLite 数据库文件。 假如 SQLite 出现重大bug,或像平常的数据库那样无法连接,整个地球都会乱套。你身边用的几乎所有电子产品(手机,电脑,ipad,笔记本)和嵌入式设备全部都会出问题。它的诞生到大范围全球流行的过程和一般软件有着不太一样的发展历程。
SQLite 诞生的契机就是典型的程序员开发的故事剧本。作者 Richard 最开始在一艘军舰上做 contractor(就是我们说的外包)。他们程序跑在军舰安装的电脑上,电脑上装的是 informix。Richard 的工作就是把 informix 的数据拿出来进行计算然后展示到电脑屏幕上(这和我们今天的 CRUD 工作类似)。

比较令人恼火的是 informix 很不稳定,经常崩溃连不上。部队里的铁拳长官可不懂啥 TCP/IP或者数据库系统知识。他们只看到软件的对话框经常弹出来,而这个对话框又是 SQLite 的作者 Richard 用软件画出来的,锅自然从天而降。于是 Richard 决定自己从头写一个无需外部连接的数据库来解决这个问题。当时恰逢布什政府消减政府预算, Richard 作为外包商没法获得订单,不得不暂停在军舰上的开发。这让 Richard 有了几个月的时间去构思并从头实现 SQLite。
那时时间是 2000 年初,软件开发没有现在这么多参考资料,没有维基百科,google 还没完全起来, 美国只有 1% 家庭有宽带。 而 Richard 也没有数据库开发经验,只有编译器开发经验。他最初的构想非常简单,把每条 sql 语句看成一个独立的执行程序。于是他首先实现了 bytecode 执行器,然后把 sql 语句转化成 byte code 执行。一开始 SQLite 并没有替换掉他们在军舰上的 informix,尽管他们每个开发者都恨透了 informix,但客户指定要用又不得不继续使用(好熟悉的场景)。就这样 SQLite 一直作为 Richard 的 side project 在开发。

为了验证一些想法和测试其中的代码,Richard 开始把 SQLite 发布到了网上,接下来的故事和 linux 诞生有点类似了。 很多人看到一个数据库居然能运行在 palm 这种性能非常弱的掌机上的人都大为惊叹。
一些大公司也开始注意到了 SQLite。首先找上门来的是摩托罗拉,给他们签订了一个功能增强订单,大约 8 万美元的样子。有了这笔钱后,Richard 得以让他认识的几个优秀程序员开始全职在 SQLite 上进行开发。然后就是巨头 AOL(美国在线)打来了电话要把 SQLite 放在 cd 里面使用。
后来更大巨头 Nokia 也过来了, 他们需要把 SQLite 放到 symbian os(塞班系统)。当时 nokia 决定采用 SQLite 绝非偶然,而是 SQLite 在 nokia 内部的产品选型里击败了9个同类其他产品。nokia 之后 SQLite 成立了一个 SQLite 联盟,当时 Mozilla 基金会 Mitchell Baker 教 Richard 如何运行这个组织,如何让那些加入的公司可以资助金钱,但最终决定做什么由他们自己的开发人员拍板。就这样一通码农看不懂的基金会骚操作,让 SQLite 得到了 Mozilla, symbian, Adobe 这些大公司的金钱资助但没有决定权。
这阶段算是 SQLite 发展的中期阶段,像病毒一样发展的高峰阶段是 andorid 发明。 当时 Andorid 是一个内部系统,它比 iPhone 实际上要更早。2005 年那会机器也都是原型机,SQLite 就运行在这些原型机上,同时通过公共网络接入到电脑里面的 GDB中。【未完待续】







