维护数据库与文件系统之间的链接级一致性的制作方法

文档序号:6567069阅读:223来源:国知局
专利名称:维护数据库与文件系统之间的链接级一致性的制作方法
技术领域
本发明一般涉及数据库管理领域。更具体地,本发明涉及维护数据库与相应 的文件系统之间的链接级一致性。
背景技术
近年来,对诸如图片、视频和电影的大型非结构化数据类型的使用增长巨大, 伴随以高效方式存储这些大量数据流的需求。传统上,在诸如文件系统的结构中或 数据库中存储数据。
文件系统是其中在诸如硬盘的存储介质上将文件存入文件夹内的分级数据结 构。操作系统的一部分维护文件系统,并控制对文件系统中的文件的访问。文件系 统擅K将大量非结构化数据以流的形式传入和传出文件。目前已知的文件系统的问 题之一在于,诸文件必须被手动组织成分组(诸文件夹和子文件夹),并且,如果 用户忘记了他在哪里存储了特定的文件,则可能难以找到该文件。磁盘技术的进步 已经预见到发展越来越大的硬盘,诸如此类的技术动力使得这一问题更为严重。能 够存储在单张磁盘上的数据的绝对容量可能使跟踪文件系统中的文件成为极其困 难的任务。
数据组织的另一广泛使用的方法是数据库。数据库系统将数据存储为一个或 多个表,其中表的每一行包括涉及一个实体的相关数据元素的多个分组,各列表示
关于该行主题的实体的有用信息。例如,可维护人力资源信息的数据库,其中人力 资源数据库的每一行表示一个雇员,而人力资源数据库中的每一列表示诸如雇员 名、雇员社会保障号以及雇员薪资的数据元素。
数据库提供优于数据的文件系统组织的众多有用优点。数据库管理系统擅长 存储、寻找和检索结构化数据的细小片段。此外,通常存在搜索和访问存储在数据 库中的数据的指定部分的高度灵活的手段。然而,数据库还未能很好地处理大量非 结构化数据(被称为BLOB (Binary Large Object, 二进制大对象))的存储和访 问。具体地,当数据库包括BLOB列时,BLOB—般被拆分成分散在磁盘的细小 片段。数据库列中的条目包含指向BLOB第一片段的指针而非包含BLOB本身。 这种情况导致检索BLOB中的数据的低效率,因为必须找到并重新组合不同的 BLOB片段。为了减少这些低效率的影响,通常返回指向BLOB的第一片段的指 针而非即时检索BLOB本身。
例如,假定雇员信息的数据库包括雇员相片的BLOB歹ij。假定用户请求特定 雇员的相片,并向其返回了指向该相片的指针。指针表示一个物理位置——例如, 表示磁盘扇区上存储相片第一片段的实际磁盘地址的16字节十六进制值。在这种 情况中,会引起若干问题。除了磁盘地址无法为用户所知以外,如果操作系统重新 组织磁盘上的数据,则相片可能不再存在于该位置,在这种情况中将向用户返回"找 不到"消息。
近来,开发了存储BLOB的另一方式,其中BLOB在文件系统中被存储为毗 邻文件即"FILESTREAM (文件流)"。提供可用于对关系表中的一列附加标签 的FILESTREAM数据存储属性。FILESTREAM属性指示该列的数据将被存储为 操作系统(OS)的文件系统中的文件。数据库管理系统管理文件系统中的文件的 创建和删除。在文件系统中的文件与单元(行和列的交集)之间存在1: 1的引用。 可使用诸如SQL或MICROSOFT⑧的T-SQL等程序设计语言按照与其它列中的数 据相同的方式操作FILESTREAM列中的数据。
因此,FILESTREAM列在数据库中用于大型非结构化数据。对FILESTREAM 数据存储属性的使用允许将大型非结构化数据存储为文件系统中的毗邻文件,而同 时仍可供数据库访问。这样的数据库管理系统需要维护具有FILESTREAM属性的 数据库行与其相应的FILESTREAM数据之间的链接的一致性(即,"链接级一致 性")以确保数据完整性并避免数据库的讹误。例如,如果在将改变提交给磁盘(即 "刷新(flush)")之前,发生诸如电源故障或系统崩溃的故障,则可能导致若干 问题。例如,数据库可能不会反映文件系统中存在的文件或目录的存在;或者,数 据库可能会反映文件系统中不存在的文件或目录的存在。因此,数据库与文件之间 被破坏链接损害了数据库的完整性,因为数据库用户不能确信数据库准确地反映了 由数据库列中FILESTREAM单元所表示的数据的当前状态。
一般,通过两种不同的方式实现了对链接级一致性的维护 一致性检查和修 复,以及日志记录和恢复。在一致性检查和修复中,爬行(crawling)任务搜索数 据库和文件系统来检查不一致性并潜在地对其修复。这样的方法费时、目标不明,且消耗过多的系统资源。
常规的日志记录和恢复方法可在数据库日志中使用日志记录,或与事务化文件系统协作。在前一方法中,文件系统操作与数据库数据更新一起被记录在数据库日志中。在这样的方法中,当数据库管理系统恢复数据库时,可为所记入日志的文件系统操作触发取消和重做操作,并使文件系统数据与同一数据库恢复框架中的数据库数据一致。这种方法的一个缺点是,数据库管理系统通常不与文件系统紧密集成,从而不了解文件系统对磁盘的数据刷新。在不能协调数据刷新的情况下,数据库管理系统必须强制日志刷新每一文件系统操作的日志记录以实现正确的预写式曰志,这有助于在崩溃恢复中维护事务链接级一致性。这种强制日志记录导致每个文件系统操作就有一个磁盘I/O操作,通常这是不可接受的性能开支量。
后一方法涉及与事务化文件系统协作,其中文件系统本身是事务性的,且能
够恢复。数据库管理系统参与由高级事务管理器(Transaction Manager, "TM")协调的分布式事务。在崩溃恢复期间,高级TM解决有疑问的事务,并确保数据库与文件系统资源管理器之间的一致性。该方法的缺点在于,在商业操作系统上没有可用的事务化文件系统。从而,对许多OS平台上的许多数据库管理系统而言,该方法不可用。此外,该方法具有在实现中增加复杂性和执行成本的缺点。
从而,需要维护数据库的诸列与文件系统中其相应的FILESTREAM数据之间的链接级一致性同时解决以上缺点的机制。本发明满足这种需求。
发明概述
考虑以上缺点和不足,此处公开用于维护数据库与文件系统之间的事务链接级一致性的方法和计算机可读介质。在一种方法中,在数据库日志的记录中将文件系统改变记入日志,且在文件系统文件夹中创建对应于该文件系统改变的文件。在重启恢复过程期间,基于数据库日志执行分析操作和条件重做操作,并基于文件系统文件夹中的文件执行条件重做操作和取消操作。然后基于数据库日志执行取消操作。
附图简述


图1是可在其中实现本发明的各方面的示例计算环境;图2是可在其中实现本发明的各方面的示例数据库配置;图3A-C是可在其中实现本发明的各方面的示例日志;图4-5是例示根据本发明诸实施例的示例方法的流程图。说明性实施例的详细描述
结合特征描述本发明的主题以满足法定要求。然而,描述本身不旨在限制本专利的范围。相反,发明人考虑到,所要求的主题可结合其它目前或将来的技术按照其它方式来具体化,以包括不同的步骤或与本文档中所述的相似的元素。而且,尽管术语"步骤"可在此处用于指示所采用的方法的不同方面,但除非明确描述了各个步骤的顺序,否则该术语不应被解释为暗示此处公开的各个步骤之间的任何特定顺序。
示例计算环境
图1示出了可在其上实现本发明的合适的计算系统环境100的示例。计算系统环境IOO只是合适的计算环境的一个示例,并不旨在对本发明的使用范围或功能提出任何限制。也不应该把计算环境100解释为对示例性操作环境100中示出的任
一组件或其组合有任何依赖性或要求。
本发明可用众多其它通用或专用计算系统环境或配置来操作。适合在本发明中使用的众所周知的计算系统、环境和/或配置的示例包括但不限于,个人计算机、服务器计算机、手持或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、
可编程消费者电子产品、网络PC、小型机、大型机、包含上述系统或设备中的任
一个的分布式计算机环境等。
本发明可在诸如程序模块等由计算机执行的计算机可执行指令的通用语境中描述。 一般而言,程序模块包括例程、程序、对象、组件、数据结构等,它们执行特定任务或实现特定抽象数据类型。通常,程序模块的功能可按各个实施例中所需组合或分布。本发明也可以在分布式计算环境中实现,其中任务由通过通信网络链接的远程处理设备执行。在分布式计算环境中,程序模块可以位于包括存储器存储设备在内的本地和远程计算机存储介质中。
参考图l,用于实现本发明的一个示例性系统包括计算机110形式的通用计算设备。计算机110的组件可以包括但不限于,处理单元120、系统存储器130和将包括系统存储器在内的各种系统组件耦合至处理单元120的系统总线121。系统总线121可以是若干类型的总线结构中的任一种,包括存储器总线或存储器控制器、外围总线和使用各种总线体系结构中的任一种的局部总线。作为示例而非限制,这样的体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、扩展的ISA (EISA)总线、视频电子技术标准协会(VESA)局部总线和外围部件互连(PCI)总线(也被称为Mezzanine总线)。
计算机110通常包括各种计算机可读介质。计算机可读介质可以是能够被计算机110访问的任何可用介质,且包括易失性和非易失性介质、可移动和不可移动介质。作为示例而非限制,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以任何方法或技术实现的用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于,RAM、 ROM、 EEPROM、闪存或其它存储器技术;CD-ROM、数字多功能盘(DVD)或其它光盘存储器;磁带盒、磁带、磁盘存储或其它磁性存储器;或能用于存储所需信息且可以由计算机110访问的任何其它介质。通信介质通常具体化为诸如载波或其它传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据,且包含任何信息传递介质。术语"己调制数据信号"指的是这样一种信号,其一个或多个特征以在信号中编码信息的方式被设定或更改。作为示例而非限制,通信介质包括诸如有线网络或直接连接的有线介质,以及诸如声学、RF、红外线和其它无线介质的无线介质。上述中任一个的组合也应包括在计算机可读介质的范围之内。
系统存储器130包括易失性和/或非易失性存储器形式的计算机存储介质,诸如只读存储器(ROM) 131和随机存取存储器(RAM) 132。基本输入/输出系统133(BIOS)包含有助于诸如启动时在计算机110中元件之间传递信息的基本例程,它通常被存储在ROM 131中。RAM 132通常包含处理单元120可以立即访问和/或目前正在操作的数据和/或程序模块。作为示例而非限制,图1示出了操作系统134、应用程序135、其它程序模块136和程序数据137。
计算机110也可以包括其它可移动/不可移动、易失性/非易失性计算机存储介质。仅作为示例,图l示出了从不可移动、非易失性磁介质中读取或向其写入的硬盘驱动器140,从可移动、非易失性磁盘152中读取或向其写入的磁盘驱动器151,以及从诸如CD ROM或其它光学介质等可移动、非易失性光盘156中读取或向其写入的光盘驱动器155。可以在示例性操作环境下使用的其它可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于,盒式磁带、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等。硬盘驱动器141通常由诸如接口 140的不可移动存储器接口连接至系统总线121,磁盘驱动器151和光盘驱动器155通常由诸如接口 150的可移动存储器接口连接至系统总线121。
以上描述和在图1中示出的驱动器及其相关联的计算机存储介质为计算机110提供了对计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在
图1中,硬盘驱动器141被示为存储操作系统144、应用程序145、其它程序模块146和程序数据147。注意,这些组件可以与操作系统134、应用程序135、其它程序模块136和程序数据137相同或不同。操作系统144、应用程序145、其它程序模块146和程序数据147在这里被标注了不同的标号是为了说明至少它们是不同的副本。用户可以通过输入设备,诸如键盘162和定点设备161 (通常指鼠标、跟踪球或触摸垫)向计算机20输入命令和信息。其它输入设备(未示出)可以包括麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等。这些和其它输入设备通常由耦合至系统总线的用户输入接口 160连接至处理单元120,但也可以由其它接口或总线结构如并行端口、游戏端口或通用串行总线(USB)连接。监视器191或其它类型的显示设备也经由接口如视频接口 190连接至系统总线121。除监视器以外,计算机也可以包括其它外围输出设备,如扬声器197和打印机196,它们可以通过输出外围接口 190连接。
计算机110可使用至一个或多个远程计算机如远程计算机180的逻辑连接在网络化环境下操作。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或其它常见网络节点,且通常包括上文相对于计算机110描述的许多或所有元件,尽管在图1中只示出存储器存储设备181。图1中所示逻辑连接包括局域网(LAN) 171和广域网(WAN) 173,但也可以包括其它网络。这样的联网环境在办公室、企业范围计算机网络、内联网和因特网中是常见的。
当在LAN联网环境中使用时,计算机IIO通过网络接口或适配器170连接至LAN 171。当在WAN联网环境中使用时,计算机IIO通常包括调制解调器172或用于在诸如因特网等WAN 173上建立通信的其它装置。调制解调器172可以是内置或外置的,它可以通过用户输入接口 160或其它合适的机制连接至系统总线121。在网络化环境中,相对于计算机UO描述的程序模块或其部分可以存储在远程存储器存储设备中。作为示例而非限制,图1示出了远程应用程序185驻留在存储器设备181上。可以理解,所示的网络连接是示例性的,且可以使用在计算机之间建立通信链路的其它手段。
示例分布式计算架构或体系机构考虑到个人计算和因特网的会聚,已经开发了并正在开发各种分布式计算架构。向个人和企业用户同样地提供用于应用程序和计算设备的无缝的可共同操作并
可使用web的接口,使计算活动日益面向web浏览器或网络。
例如,MICROSOFT⑧的.NET平台包括服务器、诸如基于web的数据存储的构件块服务以及可下载设备软件。 一般而言,.NET平台提供(1)使整个范围内的计算设备一起工作并在所有计算设备上自动更新和同步化用户信息,(2)通过更多地使用XML而非HTML来增加web站点的交互能力,(3)以从中心起点至用户的产品和服务的定制访问和传递为特征的在线服务,这种访问和传递用于管理诸如(例如)电子邮件的各种应用程序或诸如Office.NET的软件,(4)集中化的数据存储,这将增加访问信息的效率和简易性,并在用户和设备之间同步信息,(5)集成诸如电子邮件、传真和电话等各种通信介质的能力,(6)对开发人员而言,创建可重用模块的能力,从而增加生产率并减少编程错误的次数,以及(7)众多其它跨平台集成特征。
尽管此处结合驻留在计算设备上的软件描述了示例实施例,但本发明的一个或多个部分也可经由操作系统、API或协处理器与请求对象之间的中间件来实现,使得可经由所有的.NET语言和服务并在其它分布式计算框架中执行、支持或访问诸服务。
数据库环境
在以下的讨论中,假定本领域的技术人员熟悉结合数据库的FILESTREAM数据存储属性的实现。此类问题在于2003年1月29日提交的、题为"FILESTREAMData Storage Attribute(FILESTREAM数据存储属性)"的美国专利申请第10/353,730号以及2003年1月29日提交的、题为"Logical Pathname as a Reference Mechanismfor Data (作为数据引用机制的逻辑路径名)"的美国专利申请第10/353,545号中讨论,这些专利申请均整体引用在此作为参考。从而,为清楚起见,此处将忽略此类问题的细节。
然而,为了提供附加的背景信息以将以下实施例的讨论置于上下文中,图2示出了可在其中实现本发明的各方面的示例数据库配置。现在参考图2,可实现三种机制来扮演三个不同的角色(1)客户机280,可由其针对数据库210启动查询来定位和操作相关信息;(2)主存数据库210的数据库服务器200;以及(3)FILESTREAM服务器240,它管理可在其上存储与给定数据库210相关联的FILESTREAM值(或文件)的文件系统巻225,并支持对数据库210的频带外更新。可以理解,FILESTREAM文件可对应于正被存储在数据库列中的BLOB。每一数据库可含有一个或多个FILESTREAM分组215,且每一 FILESTREAM分组215可包括一个或多个巻225。诸巻可驻留在FILESTREAM服务器240上。在示例数据库安装中,可存在数千客户机、数十个FILESTREAM服务器和一个数据库服务器。当其上存储FILESTREAM的巻与数据库并置时,会产生专门的配置。
可提供注册机制,借此利用定位器服务注册与包含FILESTREAM值的所有文件系统巻225相关联的标识符(例如,GUID),以允许客户机280与FILESTREAM服务器240建立网络连接。而且,(诸)数据库服务器200注册其所主存的数据库210的标识符(例如,GUID)。这样的定位器服务的一种可能实现可以是将巻GUID和数据库GUID映射到IP地址的域名系统(DomainName System, DNS)服务。
可在一协议上构建FILESTREAM服务器240和客户机重定向器,以便维护SQL数据库服务器200与FILESTREAM服务器240之间SQL元数据和FILESTREAM值数据的相干性。在客户机一侧,协议扩展允许客户机280处理从数据库服务器200到FILESTREAM服务器240的重定向请求。为了便于从数据库服务器200到各个FILESTREAM服务器240的活动的最佳下载,协议扩展可包括交换关于各个表的元数据中的改变的通知的能力,例如,添加约束、触发事件或列,以及删除触发事件、约束或列。被实现为SQL堆栈一部分的FILESTREAM访问模块等可包含在FILESTREAM服务器240上启动高速缓存元数据的传播/失效以及确保它们与对数据库服务器200上的元数据改变同步所需的标注(callout)。
存在其中图2中所示的三种机器配置可被压縮成较少机器的某些情况。在一个场景中,例如,包含FILESTREAM数据的文件系统巻可被主存在与数据库(例如,SQL)服务器相同的机器上。在另一示例场景中,可从主存SQL服务器的机器访问该表。从底层体系结构角度来看,这可转换成访问网络上的资源或本地资源。
示例实施例
一实施例提供用于维护数据库列(例如,结构化数据)与文件系统中其相应的FILESTREAM数据(例如,非结构化数据)之间的事务链接级一致性的机制。如此处所使用,事务链接级一致性对响应于其中诸如(例如)SQL数据库等的数据库就文件和目录的名字、位置等而言具有文件和目录的准确状况的一种状态。例如,如果数据库相信存在具有给定名称的文件或目录,则文件系统中一定存在该具有给定名称的文件或目录。同样地,如果数据库不相信存在一文件或目录,则文件系统中一定不存在该文件或目录。在一个实施例中,可保持事务一致性的文件和/或目录操作类型可包括,例如,创建、删除和/或重命名。如上所述,失去事务链接级一致性可能引起错误、数据破坏或甚至系统崩溃,这是因为这样的状态会导致数据不一致性。在系统崩溃的情况中,可能失去链接级一致性。从而,如果要恢复数据库操作,则在崩溃或其它系统故障之后重建链接级一致性的能力是非常重要的。
为了能够维护事务链接级一致性, 一个实施例可在执行文件系统操作之前将取消和重做信息均记入日志。在这样的实施例中,可在更新日志序列号(LogS叫uence Number, "LSN")的条件下恢复重做操作,因为逻辑运算在文件系统中不是幂等的。而且, 一个实施例可按照在文件系统元数据被保存到磁盘之前刷新日志记录的方式来操作,以便于在恢复期间需要回滚数据库事务的情况中实现文件系统回滚效果。最后,应在某时刻将文件系统结果刷新到磁盘,以允许截短曰志,从而节省存储空间。
因此, 一个实施例提供了用于将文件系统操作(例如在文件或目录上执行的操作)记录在数据库日志和文件系统目录中的机制。 一个实施例的机制是通过利用诸如例如NTFS的常见文件系统中存在的"排序属性"以高效方式(例如,无需强制刷新至数据库日志)使用以上日志记录技术来实现预写式日志。"排序特性"规定,如果文件系统对文件或目录进行了改变J,然后对文件或目录进行了改变凡则在崩溃重启之后,文件系统永远不会在没有改变j的情况下具有改变S。换言之,无论崩溃的原因是什么,系统崩溃的时刻("崩溃点")可能产生没有任何改变、仅产生改变J、或产生改变^和凡但不会在没有改变^的情况下产生改变仏除非文件系统自身被破坏。此外, 一个实施例可使用数据库恢复框架的现有组件而无需外部协调器或事务化文件系统。结果,因为一个实施例的相对简单和有效的操作而可被广泛部署。
在上述数据库环境中,可将FILESTREAM数据文件组织成给定数据库的特定目录。在一个实施例中,每个FILESTREAM文件可具有一路径名,其中该路径名编码可在其中出现该文件的行(可由文件名表示)、歹(J、表和数据库。例如,FILESTREAM文件相对于文件流分组的根的示例路径名可以是VFY^E^TW^Af-t/ara- co"ta/"£r\to6/e\co/wm"\TOwgwW。可在例如删除或添加列、表重命名等更改表结构的操作过程期间改变目录结构。在每一情况中,可获取适当的锁定以便在任何这样的表结构操作期间排除操作表内诸行的操作。换言之,数据库管 理系统可使文件系统对象(文件或目录)上所执行的诸并发文件系统操作串行化, 其中诸并发文件系统操作都是沿着文件系统分层结构中的同一祖先链。
可以理解, 一个实施例利用对这样的目录规则的知识来维护事务链接级一致 性。此外, 一个实施例还将基于文件系统日志的利用语义的恢复和隔离算法
(Algorithms for Recovery and Isolation Exploiting Semantics , "ARIES")恢复方 法与数据库管理系统的ARIES恢复方法进行组合。以此方式,每一系统的恢复都 是彼此独立的,而当由一个实施例组合时,诸恢复给数据库数据和文件系统数据带 来事务链接级一致性。ARIES恢复系统应为本领域的技术人员所知,因而为清楚 起见,其实现细节将不被包括在此。
数据库管理系统的ARIES恢复与文件系统的ARIES恢复的这种组合可由实施 例对(例如)用于在文件系统中日志记录的目的的文件名的使用而允许。在这样的 实施例中,特定操作的LSN可被编码成文件的名字。文件的同一名字也可与经历 文件系统改变的文件系统对象(文件或目录)的名字一起编码。可以理解,这样的 基于文件名的日志记录(即,将LSN与文件系统对象名联系起来)避免了与基于 文件ID日志记录相关联的问题,因为文件ID在数据库还原之后可能会由文件系 统重新分配,从而对日志记录目的而言不够稳定。
因此,可结合使用FILESTREAM数据属性来存储BLOB的数据库实现一个实 施例。在这样的数据库中,文件系统操作(例如,创建、重命名或删除BLOB)被 记入数据库日志和文件系统日志中。当在文件系统日志中记入该操作时,该操作可
被记录为零字节文件(这样的零字节文件此处被称为"文件系统日志条目")。可 向每一数据库日志记录分配一 LSN。在文件系统日志条目的情况中,可使用相应 的数据库日志记录的LSN并将其编码到文件名中。文件名也可包含描述正在记入 曰志的操作的其它经编码的信息。可以理解,正如将在以下描述的那样,这样的编 码仅将LSN和其它操作描述符信息置入文件名内而没有任何附加处理,或者LSN 和任何其它信息可按照任何类型的格式存储,例如使用算法加密等。
在操作中, 一个实施例规定,当要执行文件系统操作时,首先将该操作记入 数据库日志中,然后记入文件系统日志,然后执行该文件系统操作。通过规定在实 际文件系统操作之前输入日志条目,恢复方法应能够确定如何取消任何操作,因为 无论何时进行了操作本身或操作需要被回滚,操作的文件系统日志条目都将存在。
可使用文件系统文件夹来将文件系统记入日志以实现预写式日志。例如,在文件夹Z下创建文件^之前,将在名为IOG的文件系统文件夹中创建名为 LOGLY~ALS7\^Ya"-/Z).C>eafc的文件。该文件名内编码了足够的信息以表示正被执 行的动作(作为分别表示LSN、事务ID、文件名和创建操作的描述符的^LSV、 Ab"-/£ 、 ^和Oe^e )。在一个实施例中,在创建操作执行之前存储该文件名。 从而,上述排序特性指示,如果爿存在,则ZC>(7L^^.LSAa"a"-/Z).Oea/e日志条 目也一定存在。 一个实施例可在操作要被回滚的情况中使用该知识。注意,在NTFS 中,如果上述"排序特性"仅适用于同一巻,则一个实施例可能要求文件系统日志 文件夹在与文件系统数据相同的巻上并置。
对于删除目录和/或文件中任一个, 一个实施例规定,对要删除的项目重命名, 使得在回滚的情况中,该项目可被还原。可以理解,如果要删除的项目实际被删除 而不是被重命名,则删除操作的回滚将是不可能的,因为没有可还原该项目的数据。 一个实施例可为此目的而使用(例如)名为1)£丄£7^£)的文件系统文件夹。
既然讨论了示例文件日志记录操作,将讨论涉及崩溃恢复的实施例。可以理 解,在系统崩溃的情况中,在崩溃点,日志条目和/或文件系统操作中的一个或多 个可能不会发生。当要重启数据库时,日志可能处于由崩溃所导致的各种配置中。 图3A-C示出了因系统故障诸如崩溃等而可能导致的三种示例日志情形。
图3A示出了其中记录日志条目的数据库日志302和文件系统日志304。崩溃 点310表示系统停止操作的时间,无论是由于系统崩溃、错误还是其它。可见,曰 志302和304在图3A中被表示为时间线,日志302和304的左侧在时间上更早, 而右侧在时间上更近。操作J和B表示具有适当LSN的日志条目。因此,图3A 中可见一种场景,其中数据库日志302记录了改变^和凡而文件系统日志304 仅具有改变J。被记录到文件系统日志304中的操作J可具有如上所述的文件名。 正如将在以下结合图4讨论的那样, 一个实施例可完全基于数据库日志302来执行 ARIES恢复,因为数据库日志302比文件系统日志304捕捉的信息更多。
图3B表示一种场景,其中数据库日志302和文件系统日志304均在崩溃点之 前刷新了改变^和S。在这样的情形中,实施例也可完全基于数据库日志302来执 行ARIES恢复,因为数据库日志至少捕捉与文件系统日志304所捕捉的信息相同 量的信息。
图3C表示一种考虑一般涉及数据库日志的某些实际问题的场景。尽管如上所 述, 一个实施规定数据库日志302可在文件系统日志304之前被更新,但数据库日 志记录可能还是未能以足够的频率被刷新,以在文件系统日志条目被提交给文件系统日志304之前将日志记录提交给数据库日志302。可以理解,刷新日志需要开销 甚多的系统I/O操作。因此,当数据库被配置成以较低的频率来刷新其日志记录/ 条目作为获得更高处理速度的折衷时,可能会出现某些情况。从而,图3C表示改 变^被记入到数据库日志302和文件系统日志304中,但仅在文件系统日志304 中被提交,从而在系统崩溃之后,改变S仅保留在文件系统日志304中。因此, 在崩溃重启之后,即使首先为数据库日志302创建了日志记录,改变S也仅被记 入文件系统日志304中。正如将在以下结合图4讨论的那样,在这样的情形中,一 个实施例可将文件系统日志304作为数据库日志302的逻辑扩展,其中数据库日志 302未捕捉的关于文件系统的附加信息可被用于将文件系统回滚到与数据库曰志 302的崩溃点一致的状态。
现在参考图4,提供表示用于在系统崩溃等之后恢复数据库的示例方法400 的流程图。可以理解,示例方法400包括ARIES算法。此外应理解,示例方法400 可回顾上面结合图3A-C所描述的数据库和文件系统日志。
因此,在步骤401,分析诸如上面结合图3A-C所描述的数据库日志302的数 据库日志来找出自检查点以来积累的所有日志记录等,包括含有最近LSN的日志 记录。应理解,在一个实施例中,步骤401可以像在典型ARIES分析阶段中那样 进行,其中一个实施例收集活动事务,以便在回滚时标识需要被回滚的事务。
在步骤403中,可通过根据日志记录中所存储的信息有条件地重新应用文件 系统改变来前滚(roll forward)数据库日志,如上面结合图3A-C所讨论的数据库 日志302。对每个日志记录,重做操作可以两个LSN之间的比较为条件,即日志 记录本身的LSN (例如,出于例示目的的"LSN1"),以及被记入到对应于重做 信息的文件或目录名或者任何祖先目录的文件系统日志文件夹中的最大的LSN(例 如,出于例示目的的"LSN2")。如果LSN1大于LSN2,则指示基于上述"排 序特性",文件系统改变的文件系统日志条目未被提交给磁盘。此外这还指示,实 际的文件系统改变也未被提交给磁盘,因为如上所述实际文件系统改变总是在创建 文件系统日志条目之前进行。在这种情况中,执行数据库日志记录中所述的文件系 统改变的重做。
如果LSN1小于LSN2,则实际的文件系统改变已被提交给磁盘。这是因为, 如上所述,在保存FILESTREAM数据的数据库中,对同一文件/目录名及其祖先的 改变是串行化的。换言之,带有LSN2的文件系统日志条目将不会被创建,直到对 应于LSN1的文件系统改变被首先完成。"排序特性"保证,如果带有LSN2的文件系统日志条目已被提交给磁盘,则对应于LSN1的文件系统改变也一定已被提交 给磁盘。因此,在这种情况中,跳过重做。
如果LSN1等于LSN2,则实际的文件系统改变有可能已提交给磁盘,也有可 能未提交给磁盘。在这种情况中, 一个实施例可基于文件系统的实际状态来确定该 改变是否需要被重新应用。例如,如果日志记录/条目描述了 "创建文件A",然 后可检査文件系统来查看文件"A"是否已经存在。如果是,则无需重新应用改变。 如果文件"A"不存在,则将重新创建文件"A"。应理解,在一个实施例中,步 骤403可像在典型ARIES重做阶段中那样进行。
在步骤405,取决于数据库和文件系统日志的状态,作出关于所需的恢复类型 的判断。此外,可结合步骤405采取准备恢复的步骤。例如,日志可处于以上结合 步骤403和图3A-C讨论的任何情形中。在一个实施例中,可扫描文件系统日志文 件夹中经过相应的数据库日志末端的每一文件并将其文件名记录在存储器中。然后 诸文件名可按照(例如)LSN顺序来排序,以允许根据用于前滚和回滚的诸LSN 的顺序或逆序等的扫描次序。含有超出数据库日志末端LSN的诸LSN的日志条目 需要被回滚,因为一个实施例可将文件系统恢复到由数据库日志的末端所反映的状 态。如果步骤405发现文件系统日志中没有日志条目带有大于数据库日志末端LSN 的LSN,则一个实施例可跳过下述步骤407和409。以上结合图3A-B描述了这样 的情况。
在步骤407,以步骤405按基于LSN的升序记录在存储器中的每个文件系统 日志条目为基础,前滚过程有条件地执行重做操作。在一个实施例中,实际的条件 重做算法可与以上结合步骤403所述的完全相同。在步骤409,能以步骤406按基 于LSN的降序记录在存储器中的文件系统日志条目为基础来执行回滚过程。如本 领域的技术人员应该知道,文件系统的日志文件夹中取消操作的执行可生成补偿日 志记录(Compensation Log Record , "CLR")。这样的CLR可能需要被追加到 文件系统日志文件夹中而不会被追加到数据库日志中。在文件系统日志中完成了回 滚过程之后,所有的文件系统结果可被刷新,以使得可以删除带有大于数据库曰志 末端LSN的诸LSN的文件系统日志条目。
可以理解,这样的操作是重要的,因为一旦任何后续数据库日志回滚开始, 回滚过程可开始将诸CLR记入数据库日志和文件系统日志内。结果,如果超出数 据库日志末端LSN的文件系统日志未被清除,则可能存在由数据库日志的回滚 CLR日志记录活动引起的LSN冲突。为了刷新文件系统, 一个实施例可跟踪直到步骤409结束受到影响的所有文件,然后刷新这些文件中的每一个。 一个实施例也
可利用文件系统的"排序特性"来简单地创建新的临时文件,刷新该临时文件,随 后删除它。该新文件创建和刷新使得所有之前的文件系统改变(例如,创建、删除、
重命名)也被刷新,否则"排序特性"就不再有效。从而,步骤409完成时,将文 件系统回滚至由数据库日志末端所反映的状态。
在一个实施例中,取消操作不会占用额外的磁盘空间。例如,文件创建的取 消仅释放磁盘资源。文件删除的取消可仅重命名现有文件而不会增加磁盘空间使 用。可以理解,这样的特征在磁盘空间几乎完全耗尽的情况中是重要的。
在步骤411,可以从数据库日志的末端到最旧的活动LSN进行回滚。应该理 解,在一个实施例中,步骤411可以像在典型ARIES取消阶段中那样进行。 一旦 完成步骤411,数据库和文件系统就被恢复到互相一致的状态。
从而,在步骤413,可在接受任何新文件系统操作之前执行检查点操作。以此 方式,如果在将来出现系统错误如崩溃等,则不必为相同操作重复以上结合步骤 40卜411所进行的恢复过程。
可以理解,通过将ARIES方法集成到一个实施例的数据库和文件系统恢复方 法来实施图4的方法400。然而也应理解, 一个实施例可以集成不同于ARIES操 作的元素。例如,现在转到图5,例示了回滚具有诸CLR的文件系统日志的示例 方法500。方法500结合以上结合图4讨论的方法400实施。在典型的ARIES恢 复中,诸CLR是不可取消的。正如以下讨论中将会看到的那样, 一个实施例允许 对诸CLR执行这样的取消操作。
从而,在步骤501,对日志记录是否是非CLR日志记录作出判断。如果是, 则在步骤505,对日志记录是否由CLR补偿作出进一步判断。如果不是,则在步 骤509执行取消操作。如果是,则在步骤507跳过取消操作。如果步骤501中作出 的判断的结果是该日志记录不是非CLR记录(即,该日志记录是CLR记录),则 在步骤503作出关于该日志记录是否是补偿了位于数据库日志末端之前的日志记 录的CLR (如由诸LSN等确定)的判断。如果是,则在步骤509,对该记录执行 取消操作。如果否,则该日志记录是补偿位于数据库日志末端之后的日志记录的 CLR。在这样的情况中,在步骤507,跳过取消操作。可以理解,取消CLR可能 会使另一CLR被记入日志(指示之前CLR的取消)。然而, 一个实施例考虑因 为特定文件系统操作的恢复操作可导致在文件系统日志中生成最多两条CLR,因 此文件系统日志空间预留应该(例如)保证预留了用于创建表示两个单独CLR的两个文件的足够空间。
应该理解,上述处理CLR的过程避免了存储跨文件系统日志回滚和数据库日 志回滚的任何持续状态,使得每一个回滚进程彼此独立。其它实施例可持久记住关 于数据库日志中的哪些日志记录已由文件系统日志中的CLR补偿的这种状态,同 时遵循ARIES算法来跳过对CLR的取消操作。
也可以理解, 一个实施例可选择排他地根据文件系统日志文件夹来实现上述 日志记录和恢复,而不必在数据库日志中重复记录。然而, 一个实施例考虑到数据 库日志记录设备的性能通常远优于基于文件系统文件夹的日志的性能。从而, 一个 实施例基于数据库日志来执行恢复操作,仅使用文件系统日志作为数据库日志未捕 获的那些操作的扩展。结果,相比于单单使用文件系统日志,总体的恢复性能得到 改善。
尽管结合各个附图的诸实施例描述了本发明,可以理解,可使用其它类似的 实施例,或可对所述实施进行修改和添加以便执行本发明的相同功能而不与之背 离。从而,本发明应不限于任何单个实施例,而应根据所附权利要求书的广度和范 围来解释。
权利要求
1. 一种维护数据库与文件系统之间的事务链接级一致性的方法,包括将文件系统改变记入数据库日志的记录中;在文件系统日志文件夹中创建对应于所述文件系统改变的文件;以及在重启恢复中,基于所述数据库日志,执行分析操作和条件重做操作;基于所述文件系统日志,执行条件重做操作和取消操作;以及基于所述数据库日志,执行取消操作。
2. 如权利要求l所述的方法,其特征在于,进一步包括创建与所述文件相关 联的文件名。
3. 如权利要求2所述的方法,其特征在于,所述文件名包括对应于所述文件 系统改变的文件系统对象名、日志序列号、事务标识符和操作描述符。
4. 如权利要求2所述的方法,其特征在于,进一步包括在所述文件名中记录 所述数据库日志记录的日志序列号,其中所述日志序列号对应于所述文件系统改变。
5. 如权利要求l所述的方法,其特征在于,所述记入步骤和创建步骤在所述 文件系统改变执行之前进行。
6. 如权利要求5所述的方法,其特征在于,所述记入步骤在所述创建步骤之前进行。
7. 如权利要求l所述的方法,其特征在于,所述数据库日志和所述文件系统 日志文件夹分别包括多项记录和多个文件,所述方法进一步包括把与所述文件系统改变相关联的日志序列号记录到所述多项记录的其中之选择所述多项记录的其中之一,其中所述执行条件重做操作步骤进一步包括将与所述文件系统改变相关联 的最大日志序列号同与所选择的记录相关联的日志序列号进行比较。
8. 如权利要求7所述的方法,其特征在于,如果与所选择的记录相关联的所述日志序列号大于或等于与所述文件系统改变相关联的最大日志序列号,则对所述 文件执行所述条件重做操作。
9. 如权利要求1所述的方法,其特征在于,所述文件系统改变是对存储在所 述文件系统中的二进制大对象数据做出的。
10. 如权利要求1所述的方法,其特征在于,所述文件系统改变是对所述文 件系统的文件或目录做出的。
11. 如权利要求1所述的方法,其特征在于,所述对数据库日志执行分析操作、条件重做操作和取消操作的各步骤是根据利用语义的恢复和隔离算法(ARIES) 执行的。
12. 如权利要求1所述的方法,其特征在于,所述对文件执行条件重做操作 和取消操作的各步骤是根据ARIES执行的。
13. 如权利要求1所述的方法,其特征在于,所述文件是第一文件,所述方 法进一步包括通过创建和刷新第二文件来执行文件系统刷新操作。
14. 一种维护数据库与文件系统之间的事务链接级一致性的方法,包括 将文件系统改变记入含有多项记录的数据库日志的记录中; 向所述记录分配第一日志序列号;在含有多个日志序列号的文件系统日志文件夹中创建具有文件名且对应于所 述文件系统改变的文件;将所述第一日志序列号编码到所述文件名中;以及在重启恢复中,对所述数据库日志执行分析操作和条件重做操作;选择所述多项记录之一;将与所选择的记录相关联的日志序列号同与所述文件系统改变相关联 的最大日志序列号进行比较;如果与所选择的记录相关联的所述日志序列号大于或等于与所述文件 系统改变相关联的最大日志序列号,则重做一日志记录;基于所述文件系统日志文件夹执行取消操作;以及基于所述数据库日志执行取消操作。
15. 如权利要求14所述的方法,其特征在于,所述文件名进一步包括对应于 所述文件系统改变的文件系统对象名、事务标识符和操作描述符。
16. 如权利要求14所述的方法,其特征在于,所述记入步骤和创建步骤在所 述文件系统改变执行之前进行,且其中所述记入步骤在所述创建步骤之前进行。
17. 如权利要求14所述的方法,其特征在于,所述文件系统改变是对存储在 所述文件系统中的二进制大对象数据做出的。
18. 如权利要求14所述的方法,其特征在于,所述基于数据库日志执行分析 操作、条件重做操作和取消操作以及基于文件系统日志执行条件重做操作和取消操作的各步骤是根据利用语义的恢复和隔离算法(ARIES)执行的。
19. 如权利要求14所述的方法,其特征在于,所述文件是第一文件,所述方 法进一步包括通过创建和刷新第二文件来执行文件系统刷新操作。
20. —种含有计算机可执行指令的计算机可读介质,所述计算机可执行指令 用于执行维护数据库与文件系统之间的事务链接级一致性的方法,所述方法包括.-将文件系统改变记入数据库日志的记录中;在文件系统文件夹中创建对应于所述文件系统改变的文件;以及在重启恢复中,基于所述数据库日志执行分析操作和条件重做操作; 基于所述文件系统日志文件夹执行条件重做操作和取消操作;以及 对所述数据库日志执行取消操作。
全文摘要
用于维护数据库与文件系统之间的事务链接级一致性的方法和计算机可读介质。在数据库日志的记录中将文件系统的改变记入日志,且在文件系统文件夹中创建对应于该文件系统改变的文件。在重启恢复过程期间,基于数据库日志执行分析操作和条件重做操作,并基于文件系统文件夹中的文件执行条件重做操作和取消操作。然后基于数据库日志执行取消操作。
文档编号G06F12/00GK101460930SQ200680012268
公开日2009年6月17日 申请日期2006年3月9日 优先权日2005年5月6日
发明者B·S·拉曼, K·严, R·B·拉杰恩 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1