用于自动数据库或文件系统维护和修复的系统和方法

文档序号:6579034阅读:206来源:国知局

专利名称::用于自动数据库或文件系统维护和修复的系统和方法
技术领域
:本发明一般涉及数据库和文件系统管理,尤其涉及自动数据库和文件系统维护和修复,以确保数据可靠性。本发明的各个方面涉及响应并在数据页面层上对所有数据页面类型校正数据损坏,以及各种情形的恢复(包括重建或还原操作),包括但不限于索引页面损坏(集聚的和非集聚的)、数据页面损坏、以及日志文件中的页面损坏。
背景技术
:尽管客户机数据库平台(即家用和商用台式计算机)使用的硬件质量比服务器平台的低得多,但是甚至服务器类的硬件(控制器、驱动器、盘等等)仍然可导致数据损坏,从而读取操作不能返回应用程序写到数据存储器中的内容。当然,出于各种原因客户机数据库平台(与服务器数据库平台相对)的问题显然更多,包括但不限于,客户机在写操作中期因意外停电而被任意断电的可能性增加,从而导致受损页面和可能的数据库损坏。(对服务器数据库系统而言较常见的是利用不中断电源来减轻因停电导致的问题。)媒体衰退是数据库损坏的另一种来源,其中物理存储媒体确实会随时间而磨损。有关可靠性的关心的又一种来源是检测由因疏忽(例如程序错误(bug))和恶意(例如病毒)的软件错误而导致的损坏并从中恢复。通常数据库的维护和修复是由数据库管理员等进行的,这些数据库管理员具有良好技能并具有对数据库系统的深厚知识,或由至少熟悉并经常使用数据库系统的个人一大体上是对数据库技术相对熟练的人进行。另一方面,操作系统和应用程序的典型消费者和商业终端用户很少用数据库,且很大程度上被错误装备来进行数据库维护和修复。尽管这两组之间不同的技能级别在过去很大程度上并不相关,但操作系统的数据库实现的文件系统一诸如在"相关申请"章节中标识的相关美国专利申请中揭示的操作系统—创建了这些较不熟练的终端用户将面对他们基本上不能解决的数据库维护和修复问题的情形。因而商业/消费者的数据库实现的操作系统文件系统,或简称为"数据库文件系统"(DBFS)必须能够检测损坏并将其数据库恢复到事务处理的一致状态,且在不可恢复的数据丢失情形中,DBFS必须确保在维护所述数据的原子变化单元的层次上(即,在基于项的DBFS的"项"层上)的数据一致性。此外,对于缺省地以懒提交模式运行的DBFS,在异常断电之前刚提交的交易持久性无法得到确保,且必须进行说明和校正。此外,在商业/消费者终端用户将大大受益于自动的DBFS维护和恢复的同时,数据库管理员和具有较多数据库技能的人也将受益于一般数据库维护和修复的技术方案。对本领域的数据库管理员而言常见的是利用数据库工具(例如被提供SQLServer2000的数据库调整顾问),但这些工具不能直接解决可靠性问题,而是相反提供执行并管理数据库备份的方法一且不是以大部分自动化方式,而是相反想要数据库管理员的大量参与,特别是当数据库备份不可用或者产生其它修复问题时。因而,解决数据库可靠性的自动化方案也将有利于数据库管理员和其它熟练数据库用户。本发明就是提供了这样的方案。
发明内容本发明的各个实施例涉及DBFS的数据可靠性系统(DRS),其中该DRS包括用于自动执行数据库管理(DBA)任务而几乎不需要或不需要终端用户的直接参与(因而基本上对所述终端用户透明)的框架和策略集。对于若干实施例,DRS框架实现用于将错误和事件通知、策略、和错误/事件处理算法插入DRS的机制。更特别地,对于这些实施例,DRS是负责在背景中维护和修复DBFS的背景线程,因而DRS在最高层上保护并维护DBFS的整体健康。对于本发明的若干实施例,DRS包括以下特征(1)在页面层上对所有页面类型响应并校正数据损坏;以及(2)对以下尝试第二层的恢复(重建或还原)(a)索引页面损坏(集聚的和非集聚的);(b)数据页面损坏;以及(c)日志文件中的页面损坏。本发明某些实施例还包括DRS的特定功能,包括但不限于(i)处理修复/恢复数据损坏情形;以及(ii)(iii)改进系统的可靠性和可用性;以及(iv)保留熟练第三方的DRS错误/事件历史表格,以在需要时检修数据库或存储引擎问题。结合附图阅读前面的
发明内容和以下较佳实施例的详细描述,能得到更好的理解。为了说明本发明,在附图中示出本发明的示例性结构;然而,本发明并不限于所揭示的特定方法和装置。在附图中图1是示出本发明各方面可结合其中的计算机系统的框图;图2是示出代表本发明若干实施例的数据库文件系统(DBFS)中数据可靠性系统(DRS)的结构的框图3A是示出数据库FPM将数据存储器附加到DBFS的框图3B是示出在本发明若干实施例的数据库附加操作期间检测并校正被损坏页面的过程的流程图4A是示出根据本发明各个实施例在启动/崩溃恢复环境中利用DRS的流程图4B是示出在数据库附加期间由DRS处理的错误的表格;图5A是示出本发明各个实施例的在查寻引擎遭遇错误时的在线操作中利用DRS的流程图5B是示出在线操作期间由DRS处理的错误的表格;图6是示出当页面在最近的瞬象中存在且具有有效处理日志时DRS执行恢复的流程图7是示出本发明若干DRS实施例的用于使数据库恢复在线的方法的流程图,在这些实施例中数据库不能被恢复且没有可用备份。图8是示出根据本发明一方面DRS用来尝试恢复数据页面的方法的流程图。具体实施例方式本发明的主题是专门为满足法定需求而进行描述的。然而,该描述本身并不是要限制本专利的范围。相反,发明者已经预期到已声明主题也能结合其它现有或以后的技术用其它方式体现,以包括不同的步骤或类似于本文档中所述步骤的组合。此外,尽管术语"步骤"在此可用以暗示所用方法的不同元素,该术语不应被解释为暗示在此揭示的不同步骤之间或当中的任何特定次序,除非在明确说明单独步骤的次序时。以上
发明内容提供了对本发明特征的纵览。本发明一实施例的详细描述如下。对于以下所述的各个实施例,本发明特征被描述为在MicrosoftSQLServer数据库系统(在此有时简称为"SQL")中单独实现,或者被结合到MicrosoftWinFS文件系统用于下一代个人计算机操作系统(通常称为"WindowsLonghom"或简称为"Longhorn"),后者是先前所述许多相关专利申请的主要主题。如上所述,SQLServer结合了Microsoft.NET公共语言运行时间(CLR),以使受管理代码能被编写并执行,来对SQLServer数据库的数据存储器进行操作。尽管以下所述的实施例在该环境中操作,但是可以理解本发明决不受限于SQLServer产品中的实现。相反,本发明可在支持面向对象编程代码的执行以在数据库存储器上操作的任何数据库系统中实现,诸如面向对象的数据库系统和具有对象关系扩展的关系数据库系统。因此,可以理解,本发明并不限于以下所述的特定实施例,而是旨在包括在由所附权利要求限定的本发明精神和范围内的所有修改。计算机环境本发明的许多实施例可在计算机上执行。图1和下面的讨论旨在提供其中可实现本发明的合适计算环境的简要描述。尽管并非必须,本发明能在计算机可执行指令的通用环境中描述,诸如由比如客户工作站或服务器的计算机所执行的程序模块。通常,程序模块包括执行特定任务或实现特定的抽象数据类型的例程、程序、对象、组件、数据结构等。此外,本领域技术人员将会理解本发明可用其它计算机系统配置实践,包括手持式装置、多处理器系统、基于微处理器的或可编程的消费电器、网络PC、小型机、大型机等等。本发明也可在分布式计算环境中实践,其中任务由经通信网络链接的远程处理装置执行。在分布式计算环境中,程序模块可位于本地或远程存储存储设备中。如图1所示,示例性通用计算系统包括常规个人计算机20等,它包括处理单元21、系统存储器22,以及将包括系统存储器的各个系统组件耦合到处理单元21的系统总线23。系统总线23可以是若干总线结构类型的任一种,包括存储器总线或存储器控制器、外围总线,以及使用多种总线体系结构任一种的局部总线。系统存储器包括只读存储器(ROM)24和随机存取存储器(RAM)25。包含帮助诸如在启动阶段,在个人计算机20内的元件之间传递信息的基本例程的基本输入/输出系统26(BIOS)被存储在ROM24中。个人计算机20还可包括用于读自或写到硬盘(未示出)的硬盘驱动器27、用于读自或写到可移动磁盘29的磁盘驱动器28,以及用于读自或写到诸如CDROM或其它的光学介质的可移动光盘31的光盘驱动器30。硬盘驱动器27、磁盘驱动器28和光盘驱动器30分别通过硬盘驱动器接口32、磁盘驱动器接口33和光盘驱动器接口34与系统总线23相连。驱动器及其相关联的计算机可读媒体提供计算机可读指令、数据结构、程序模块和其它有关个人计算机20数据的非易失性存储。尽管在此说明的示例性环境使用硬盘、可移动磁盘29和可移动光盘31,但是本领域技术人员会认识到在示例性操作环境中也可使用的可存储计算机可访问的数据的其它类型的计算机可读媒体,诸如盒式磁带、闪存卡、数字视频盘、伯努利卡、随机存取存储器(RAM)、只读存储器(ROM)等等。许多程序模块可被存储在硬盘、磁盘29、光盘31、ROM24或RAM25上,包括操作系统35、一个或多个应用程序36、其它程序模块37和程序数据38。用户可将命令和信息通过诸如键盘40和定点装置42的输入装置输入到个人计算机20中。其它输入装置(未示出)可包括话筒、操纵杆、游戏垫、圆盘式卫星电视天线、扫描仪等等。这些和其它的输入装置通常通过与系统总线相耦合的串行端口接口46与处理单元21相连,但也可由诸如并行端口、游戏端口或通用串行总线(USB)的其它接口连接。监视器47或其它类型的显示装置也可通过诸如视频适配器48的接口与系统总线23相连。除监视器47之外,个人计算机通常包括其它的外围输出器件(未示出),诸如扬声器和打印机。图1的示例性系统也可包括主机适配器55、小型计算机系统接口(SCSI)总线56,以及与SCSI总线56相连的外部存储器件62。个人计算机20可在使用与诸如远程计算机49的一台或多台远程计算机的逻辑连接的网络化环境中操作。远程计算机49可以是另一台个人计算机、服务器、路由器、网络PC、对等装置或其它公共网络节点,且通常包括与上述个人计算机20相关的许多或所有元件,尽管在图1中仅示出了存储器存储装置50。图1所述的逻辑连接包括局域网(LAN)51和广域网(WAN)52。这样的网络环境常见于办公室、企业范围计算机网络、内联网和因特网中。当在LAN网络环境中使用时,个人计算机20通过网络接口或适配器53与LAN51相连。当在WAN网络环境中使用时,个人计算机20通常包括调制解调器54或用于在诸如因特网的广域网52上建立通信的其它装置。可以内置或外置的调制解调器54通过串行端口接口46与系统总线23相连。在网络化环境中,所示与个人计算机20相关的程序模块或其各个部分,可被存储在远程存储器存储装置中。应当理解所示网络连接是示例性的,也可使用在计算机之间建立通信链接的其它装置。尽管可想象本发明许多实施例特别适合于计算机化系统,但本文档中内容并非旨在将本发明限制在这些实施例中。相反,当在此使用时,术语"计算机系统"旨在包含任何和所有能够存储并处理信息和/或能够使用该存储信息来控制装置本身行为或执行的装置,无论这些装置的特性是电子、机械、逻辑还是虚拟的。数据可靠性系统(DRS)的纵览对于本发明的若干实施例,数据可靠性系统(DRS)是在背景中维护并修复数据库的线程,因而保护了数据库文件系统(DBFS)的总体健康。图2是示出DBFS中DRS的结构的框图。在该图中,向多个应用程序212、214和216提供操作系统级别服务的操作系统202,包括在逻辑上与持久数据存储器232内耦合的DBFS222。操作系统202还包括DRS242,它在发现持久数据存储器232的多个页面234、236和238中的页面错误240的任何时候由DBFS222调用(244),然后DRS242响应于该页面错误240执行修复操作。对于本发明的各个实施例,DRS可包括以下特征(1)在页面层上对所有页面类型响应并校正数据损坏;以及(2)对以下尝试第二层的恢复(重建或还原)(a)索引页面损坏(集聚的和非集聚的);(b)数据页面损坏;以及(C)日志文件中的页面损坏。本发明某些实施例还包括DRS的特定功能,包括但不限于(i)处理修复/还原数据损坏情形;以及(ii)改进系统的可靠性和可用性;以及(iii)保留熟练第三方的DRS错误/事件历史表格,以在需要时检修数据库或存储引擎问题。本发明的某些实施例提供可扩展的DRS从而在已经发行DBFS之后可更新恢复策略和检测机制。若干实施例涉及在DBFS数据库保持在线时运行修复的DRS。其它实施例涉及具有对DBFS存储器的全权使用(即sysadmin特权)而运行。还有其它实施例将具有实时检测故障并对其作出反应的能力。对于若干实施例,DRS修复将在维护所述数据的变化单元层次上(即,在基于项的DBFS的"项"层上)进行事务处理。最后,对于各个实施例,修复将完全恢复项或者它将收回其改变,且DRS将具有即使重新启动在该过程中间进行也能继续恢复/还原工作的能力。对于本发明的若干实施例,DRS将预订SQL事件,从而如果SQL触发一般事件,DRS可拦截它并作出响应(包括但不限于823/824事件)。此外,本发明的另一方面是对要修改的数据库引擎发送DRS要特别处理的错误条件的DRS特定事件。对于本发明的各个实施例,在DBFS从盘中读取或写入页面的任何时候将检测损坏,在该情形中SQL将取决于损坏类型生成许多错误之一,并还将触发特定DRS事件以向其通知特定错误条件。DRS将接收那些错误,并将其置入要处理的输入队列中。对于本发明的若干实施例,确定页面是否遭损坏通过各种手段来实现,包括但不限于(a)检査页面的校验和,并且如果校验和无效则该页面被视为无效,或(b)通过检查日志序列号(LSN)来査看它是否在日志文件末端之外(其中LSN是随着每个处理递增的整数),从而如果日志中最后处理是LSN432,并且所发现的具有更大LSN的页面,则必然发生了写次序错误。在这方面,主要有四类可影响DBFS操作(以及其它源比如bug等)的页面损坏,且这四类包括损坏页面、媒体衰退、硬件故障、以及无序写入。损坏页面在数据页面未正确地原子写入时发生,因而由于在例如电源故障或扇区写入故障的故障事件之前仅对盘写入页面的部分扇区,该页面的任一部分可遭到损坏。媒体衰退在数据页面比特因物理媒体衰退而遭到损坏时发生。硬件故障可因与总线、控制器、或硬盘装置有关的各种原因而引起。对于无序写入,这些错误源自IDE驱动器不能确保写入盘的顺序的事实,特别是IDE驱动器能够(开启)写缓存,因而写入数据存储器可无序发生是可能的。如果无序写入的部分序列进行但被例如电源故障打断,则会产生若干错误,诸如在编写例如相关联日志条目之前写入盘的数据页面。尽管无序错误可通过检查数据页面上的日志序列号(LSN)来检测,但是没有短时间内读取每个页面的简便方法。页面类为了本发明,所有页面根据以下页面类来进行分类,数据页面数据页面被视为具有用户数据在其上的任何页面,包括集聚索引的叶页面。,索引页面这些页面仅包含索引信息,且它们包括非集聚的索引页面以及集聚索引的非叶页面。,系统页面这些页面包括GAM、SGAM、和Boot页面,且即使DRS不具有对这些页面的特定还原支持,DRS仍可尝试对这些页面的页面层还原;无论如何,如果页面层还原失败,则DRS尝试紧急修复(在后面讨论)。不可恢复页面:PFS(页面空闲空间)页面或来自5个系统表格(Sysrowsetcolomns、Sysrowsets、Sysallocunits、Syshobtcolumns、Syshobts)的页面包括本类页面,且DRS在该情形中将还原整个数据库。,日志页面这些是属于处理日志的页面,且DRS将在它们被损坏时尝试紧急修复(在后面讨论)。损坏类别对于本发明的若干实施例,DRS被设计成解析在检测到损坏时定义的三类不同的数据页面损坏,这三种类别包括(l)在数据库附加期间;(2)在正常在线操作期间;以及(3)在处理反转期间。数据库附加损坏检测图3A是示出数据库FPM将数据存储器附加到DBFS的框图。图3B是示出在数据库附加操作期间检测并校正被损坏页面的过程的流程图。一般而言,数据库文件属性管理器(DBFPM)302管理DBFS存储器304、306和308的附加和分离。在步骤352,当DBFPM302附加例如DBFS存储器304的存储器时,SQL在步骤354运行崩溃恢复,以在步骤356确定在处理日志314中是否有任何在崩溃时活动的处理324(例如任何未完成处理),且如果有则SQL在步骤358在继续之前执行数据库的崩溃恢复。在崩溃恢复期间SQL将正常(a)分析最后检验点之后的处理日志,(b)重做日志中未发现写入盘的任何操作,以及(c)撤消尚未完成的任何处理。如果在步骤360未发现恢复期间有任何错误,则在步骤362数据库成功附加。然而,如果在步骤360发现崩溃恢复期间有一错误,则在步骤364SQL将无法实现数据库附加。该"数据库附加"情形是重要的,因为每次附加存储器时都要调用它。每当操作系统(例如Window操作系统)启动时以及每当外部驱动器(例如Firewire、USB等)被附加到计算机上或与其分离时,附加存储器。数据库附加情形调用崩溃恢复,并因此检测受损坏页面(未完成写入),因而需要DRS来处理该情形,因为用户可能物理地移除硬件。然而,当根据本发明各个实施例利用DRS时,行为与图4A流程图所示的略有不同。首先,在步骤402,DBFPM附加DBFS数据库,且在步骤404,SQL运行崩溃恢复,且在步骤408尝试使数据库在线。如果在步骤410没有崩溃恢复中的错误而附加数据库,则SQL将返回成功,且数据库将在步骤452上(在线)附加。然而,如果有错误,则DRS在步骤412将评估数据库,以确定该数据库是否事务处理一致。仅当数据库经历在处理反转期间的故障时,即物理或逻辑的撤消错误一或者如果未知错误在崩渍恢复期间发生,数据库会不一致。如果在步骤412数据库是事务处理一致的,则DRS在步骤414将延迟修复直到完成恢复操作一换言之,DRS将声明数据库的状态为对数据库附加一致("成功"),然后等待在恢复完成之后开始修复所检测的损坏,且数据库在步骤452上附加以便避免与崩溃恢复的任何冲一旦恢复完成且在步骤452附加成功,在步骤478如果有延迟修复,则在步骤480DRS将开始修复,且在步骤482首先尝试调用损坏的页面层还原。如果在步骤484页面层还原失败或者不可能,则在步骤486DRS将确定是否是由于索引页面的故障,且如果是则DRS在步骤488重建该索引。另一方面,如果在步骤490错误是在数据页面中,则DRS将在步骤492尝试数据页面恢复。然而,如果在步骤490DRS确定数据库不一致或者具有未知/不受支持的错误,则在步骤494DRS将立即使数据库离线(从而结束恢复操作)并将该数据库标记为"可疑",然后在步骤496尝试紧急修复。图4B是示出在数据库附加期间由DRS处理的错误的表格。在线操作损坏检测图5A是示出本发明各个实施例的在查寻引擎遭遇错误时的在线操作中利用DRS的流程图。该情形是在DBFS的正常运行时间使用期间,诸如当终端用户使用操作系统外壳来执行对DBFS的中等复杂査询时,以及在执行该查询期间,该査询引擎报告一错误。在这些在线操作情形中,当错误发生时,DRS在步骤502放弃该处理以尝试修复错误。DRS在步骤504将首先尝试页面层还原。然而,如果页面层还原在步骤506不可用或者失败,则DRS将在步骤508确定出故障的页面类型。在步骤510,如果是索引页面的故障,则DRS将在步骤512尝试索引恢复。如果在步骤514故障是数据页面,则DRS将在步骤516尝试数据页面恢复。如果在步骤518故障是因为系统或日志页面错误,则DRS将在步骤520尝试紧急修复。如果在步骤518故障是不可恢复错误(5个系统表格或PFS页面),则DFS将在步骤522自动还原整个数据库,或者提示终端用户还原整个数据库。图5B是示出在在线操作期间由DRS处理的错误的表格。处理反转损坏检测如果错误在处理反转期间发生,则DRS将使数据库离线,将其标记为可疑,并重新启动数据库以便调用崩溃恢复。然后该过程将重新调用该方法,用于稍早揭示的崩溃恢复损坏检测。恢复技术如本领域技术人员所众所周知并易于理解的,事务处理一致性涉及仅显示已提交数据(或使其可用),以及仅提交(写入持久存储器并记录事务处理)正确数据。在这方面,只要在崩溃恢复期间实现了所有重做和撤消请求,数据库是事务处理一致的。因而许多类损坏可在数据和索引页面中呈现但仍然是事务处理一致的。本发明的各个实施例认识到常常不需要在线执行许多这些事务处理,因此这些实施例尝试在数据库离线时执行所有修复。当SQL错误发生时,DRS将仅接收页面id和数据库id。从该信息中,DRS将询问该页面以确切地指出它是哪类页面。这些实施例具有数据页面和索引损坏的恢复机制,其中DRS尝试恢复因为该损坏引起的DBFS项的丢失。然而,有许多可在数据库中丢失的其它类型页面,包括GAM、SGAM、PFS、启动页面及其它。尽管典型的DBFS不具有这些页面类型的特定备份和恢复机制,但是DRS将尝试调用页面层还原。对于已受损坏的页面,DRS将尝试页面层还原。页面层还原是没有记载的,因为我们可以向用户确保我们会丢弃尚未提交的任何数据。同一技术将应用于来自任何表格的页面,且该方法不管所还原的页面或表格是什么类型都不会改变。页面层还原仅在如果页面存在于最近瞬象之中时才发生。此外有效的处理日志必须可用。如果页面不在最近的瞬象之中,则我们必须使用本领域技术人员所众所周知和理解的项层还原技术来恢复该页面(诸如从备份操作中的还原)。如果页面的确存在于最近瞬象之中,且具有有效的处理日志,则DRS将执行以下动作来还原该页面,如图6所示U)在步骤602,确定遭损坏页面的PageID;(2)在步骤604,从DBFS存储器的最近瞬象中寻找并复制受损坏的页面;(3)在步骤606,通过快进应用于该页面的事务处理,将盘上处理日志应用于该页面;(4)在步骤608,将所还原的页面应用于在线数据库;以及(5)如果在步骤610有对所还原页面的延迟事务处理,则在步骤612我们将必须重新启动数据库(从而运行崩溃恢复并清除所延迟的事务处理),否则操作在步骤614继续。关于前述瞬象,如本领域技术人员所理解的,VSS(巻影子副本服务)提供了用于维护某些巻(例如NTFS巻)的时间瞬象中点的一种方法。VSS瞬象通过使用写时复制来维护巻的影子副本,即在盘页面被修改的任何时候,该页面的预先图像被写入最新瞬象的瞬象存储区域。当在机器上使能TimeWarp时一对某些DBFS及其相应操作系统可能是缺省的一瞬象可以一天两次的缺省速率取得并可维护最多63张瞬象。为了使用存储在瞬象中的预先图像,从取得瞬象时到现在的维护日志,而日志截取仅在TimeWarp瞬象时间发生,从而所有时间都有来自上一瞬象的日志可用。在有页面损坏且页面在最新瞬象中可用的情形中,日志可从瞬象重放到该页面上的当前点以还原之。在TimeWarp瞬象期间,有关该瞬象的DBFS存储得到恢复。这使得页面层还原对因瞬象数据库的恢复而触及的页面而言是不可能的。为了解决该问题,SQLServer视点在瞬象巻中的数据库上取得并且该数据库得到恢复一即,DRS在瞬象巻中的数据库上具有未经恢复视点,且该视点中的各个页面总是可用于页面层还原。对于系统、日志或未知的页面修复一即,如果日志损坏发生或者如果有DRS不能校正的故障(例如数据或索引),则DRS将向用户呈现以下选项(a)还原整个数据库(存储器);或者(b)以紧急模式恢复数据库。为了以紧急模式修复数据库,最重要的是识别DBCC从损坏处理日志和不可恢复的数据库情形中恢复的新能力。然后,如果数据库不能被恢复,或者没有可用备份,则以下系列动作,如图7所示,将使得数据库对本发明的若干DRS实施例恢复在线(a)在步骤702,将数据库设置为紧急模式;(b)在步骤704运行'DBCCCHECKDB(database,REPAIR—ALLOW—DATA—LOSS),,它在紧急模式中具有特定含义(i)迫使数据库恢复继续过去的错误(从日志中获取尽可能多的数据,但导致事务处理地不一致的数据库),(ii)丢弃被损坏的日志文件并创建新的日志文件,(iii)运行全数据库修复以使数据库进入结构上一致的状态(不能反转或撤消的'原子'单向操作,且在不手动编辑文件的情形中是恢复数据库的唯一可能方法);以及(c)因为数据库在物理上是一致的,DSR在步骤706对整个存储器运行CC。这些步骤的成功执行应当确保该数据(基于项的DBFS中的各项)将是一致的,但它可能意味着某些应用程序将事务处理地不一致。有两类索引页面非集聚页面和集聚的非叶页面。带有数据的索引页面(集聚索引的叶页面)被视为数据页面。有了这样的概念,对于可恢复索引故障,DRS尝试使用离线索引重建来修复索引(其中数据库将在该修复期间在线,而只有索引将离线)。如果修复失败,则DRS丢弃该索引并尝试重建该索引。然后,如果重建也失败,则DRS将完全丢弃该索引或者禁用该索引,并尝试在后来再次重建(可能无限地这样做直到成功)。对于数据页面恢复,如果DRS接受所处理错误之一,并确定该页面是一数据页面,则它将尝试恢复。这可在SQLServer操作的任何状态期间(DB附加、在线操作和反转)进行。如图8所示,如果DRS在步骤802检测到数据页面错误,则步骤804的尝试页面层还原在步骤806失败之后,DRS将(a)通过接收受损坏页面的PageID并如前所述确定页面类型,在步骤808确定所损坏的页面类型(并且给定一数据页面损坏,DRS并非必须进行尝试访问该页面的其它事务处理);(b)在步骤810,取得所丢失ItemID的范围(启动Tx,运行DBCCCHECKTable(table,REPAIR—ALLOW—LOSS)),这从非集聚索引中返回所有不匹配集聚索引键的所有索引键,且非集聚索引键包含Itemld,所以DRS可提取它们并将其写入内部表格;以及(c)在步骤812,将Itemld和表格名称传递给WCC(其中WCC修复那些Itemld并检查存储器中其余值)以确保DBFS是一致的,并提交Tx以使DRS能放弃并重新尝试这些恢复。如果有一系列遭损坏页面,则DRS在切断它们作进一步处理(诸如通过从备份中还原所述页面)之前从所有遭损坏页面中指出所有ItemID。因为DRS可确保如果页面层还原工作则没有用户数据会丢失,所以DRS仅需在名义上通知用户,因为在进行页面层还原时用户极可能仅注意到比期望略慢的响应。在某些实施例中,用户将不接收任何通知(因为这最多只花几秒);然而。对于其它选择性实施例,DRS将作"事件"记录,以捕捉DRS还原页面的事实。在最差情形中,其中对要还原的页面进行未完成的活动处理,数据库将必须分离并重新启动(以便运行崩溃恢复),因而与数据库的所有连接将终止。应用程序应已被设计成知道此可能性;然而这可导致设计较差的应用程序"中止"。因而本发明的某些实施例向用户通知可导致这种事件的情形,以便使用户能关闭所有的这类应用程序来避免这种不需要的结果。示例终端用户体验为了示出DRS的操作,以下示出一些情形,它们一般表征用户体验以及DRS所做的用户不可见的事情。索引损坏Abbey正在执行WindFS査询,以找出她在上个星期修改的所有文档。在该查询期间,WinFS通知它花了比平常略长的时间。实际上某些随后她的查询也略为缓慢。然后她注意到她的任务栏上有一个小气球。该气球报告在她机器上发现一可靠性问题,并请在Windows修复这些错误时耐心等待。过了一会儿,另一个气球出现,并通知Abbey索引已经成功重建。当Abbey注意到她的计算机现在看起来执行得更好时,她很高兴。在幕后,DRS检测并修复了索引损坏。它使得索引离线(因此执行较慢)、重建之、并使其恢复在线。损坏页面写入在雷雨期间,Toby在写家庭作业一一篇有关AdamSmith的文章,并定期存盘。在约完成90%时,Toby整个家停电了。Toby没有在便携式电脑上工作,并且没有备用电池。幸运地是,约30分钟后电恢复正常。Toby登录到计算机上并尝试打开他的文章。他挠挠头,因为看起来比平常花的时间要长一些。在幕后发生的是,Toby文章的文档项受到损坏,因为停电导致他硬盘驱动器的页面写入遭损坏。当DBFS重新启动时,DRS检测到该数据页面损坏,并尝试恢复该数据。DRS自动地尝试从自动瞬象中还原数据页面。因为Toby定期存盘了,所以在最近瞬象中有该文章的副本。因此,DBFS能够自动还原遭损坏的页面。比特毁坏和扇区损坏Susan喜欢她的数字照相机,在过去2年中她拍摄了5800多张她的孩子们的照片。当然在5800张中她在计算机上的WinFS中保存了超过3000张。不幸地是,保存了这些珍贵照片的硬盘驱动器已经损坏了盘上的少量扇区。这些遭损坏的扇区现在已损坏了10张Susan的照片。当Susan尝试査看这些照片时,她获得来自操作系统外壳的错误,并得到提示要从备份中还原这些照片。Susan遵从提示,找到她的备份媒体(zip盘),然后从盘上还原这些项。在幕后,DBFS正在尝试页面层还原。然而因为这些照片(从来)未曾修改,它们不在最新的瞬象中,因而对该特定实施例而言提示Sunsan置入(仅这些项的)备份是必要的。结论在此所述的各种系统、方法和技术可结合硬件或软件,或在适当时结合两者的组合来实现。因而,本发明的方法和装置,或者其中的某些方面和部分,可取诸如软盘、CD-ROM、硬盘驱动器、或任何其它机器可读存储介质的有形介质中包含程序代码(即指令)形式,其中当程序代码由诸如计算机的机器载入并执行时,该机器成为用于实践本发明的装置。在可编程计算机上的程序代码执行情形中,计算机通常包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备、和至少一个输出设备。一个或多个程序最好用高级过程或面向对象的编程语言来执行,以便与计算机系统通信。然而,如果需要程序也可用汇编或机器语言来实现。无论如何,语言可以是编译或解释语言,并与硬件实现相组合。本发明的各个方法和装置还可以经某些传输媒体传输的程序代码形式来实现,这些传输媒体诸如经电线或电缆、通过光纤、或通过任何其它形式的传输,其中当程序代码由诸如EPROM、门阵列、可编程逻辑设备(PLD)、客户计算机、摄像机等的机器接收、载入并执行时,机器变成用于实践本发明的装置。当在通用处理器上实现时,程序代码与处理器组合以提供进行操作来执行本发明的索引功能的唯一装置。尽管本发明结合各个附图的较佳实施例进行了描述,但是可以理解,也可使用其它类似实施例,或者可对所述实施例作修改和添加,用于执行本发明的相同功能而不背离本发明。例如,尽管本发明的示例性实施例在仿真个人计算机功能的数字设备环境中描述,但是本领域技术人员将理解,本发明并不限于这些数字设备,如所述本申请可应用于任何数量的现有或新兴的计算装置或环境,诸如有线或无线的游戏控制台、手持式计算机、便携式计算机等,并可应用于任何数量的经通信网络连接并在网络上交互作用的这类计算装置。此外,应强调这里可预期各种各样的计算机平台,包括手持式设备的操作系统以及其它应用程序专用的硬件/软件接口系统,特别是当无线网络化装置的数量持续激增时。因此,本发明应不限于任何单个实施例,而应解释为在根据所附权利要求的宽度和范围内。权利要求1、一种用于附加用于数据库文件系统的数据存储器并使其在线的系统,所述系统包括用于附加所述数据存储器的子系统;用于运行崩溃恢复并尝试使所述数据存储器在线的子系统;用于确定对使得所述数据存储器在线的尝试是否没有成功的子系统;用于评估与所述数据存储器相关联的数据库以确定所述数据库是否事务处理一致的子系统;用于在所述数据库事务处理地一致时延迟修复直到所述崩溃恢复完成的子系统。2、如权利要求l所述的系统,还包括一子系统,它尝试页面层还原,且如果所述页面层还原失败,则确定所述失败是否由于索引页面,并且如果是,则在对使所述数据存储器在线的尝试不成功时以及当数据库事务处理地一致时重建所述索引页面。3、如权利要求1所述的系统,还包括一子系统,它在对使所述数据存储器在线的尝试不成功时以及当所述数据库未事务处理地一致时,使所述数据库离线并尝试紧急修复。4、一种用于附加用于数据库文件系统的数据存储器并使其在线的方法,所述方法包括附加所述数据存储器;运行崩溃恢复并尝试使所述数据存储器在线;以及如果使得所述数据存储器在线的尝试没有成功,评估与所述数据存储器相关联的数据库,以确定所述数据库是否事务处理地一致,且如果是,则延迟修复直到所述崩溃恢复完成并继续所述崩溃恢复。5、如权利要求4所述的方法,其特征在于,对使所述数据存储器在线的尝试不成功,且其中所述数据库事务处理地一致,且其中所述修复被延迟直到所述崩溃恢复完成,所述方法还包括尝试页面层还原,并且如果所述页面层还原失败,则确定所述失败是否由于索引页面,并且如果是,重建所述索引页面。6、如权利要求4所述的方法,其特征在于,对使所述数据存储器在线的尝试不成功,且其中所述数据库未事务处理一致,所述方法还包括使所述数据库离线并尝试紧急修复。全文摘要本发明涉及用于自动数据库或文件系统维护和修复的系统和方法。本发明一般涉及数据库和文件系统管理,尤其涉及自动数据库和文件系统维护和修复,以确保数据可靠性。本发明的各个方面涉及响应并校正在数据页面层上对所有数据页面类型的数据损坏,以及各种情形的恢复(包括重建或还原操作),包括但不限于索引页面损坏(集聚的和非集聚的)、数据页面损坏、以及日志文件中的页面损坏。文档编号G06F7/00GK101604335SQ20091015213公开日2009年12月16日申请日期2004年7月29日优先权日2004年5月3日发明者A·A·欧克斯,H·R·科达瓦拉,M·J·斯利曼申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1