联机模式和数据变换的制作方法

文档序号:11530764阅读:441来源:国知局

背景技术
::通常,数据库用户需要进行要求更新大量的数据的模式(例如,更改列的类型)或数据(例如,将姓名列分为两列:名字和姓氏)修改。这可以是进一步应用程序升级的一部分,或者由于模式的原始设计中的一些缺陷。这样的操作可能要求对数据库的表中的每一行更新。目前,这些操作只能被脱机执行,其为应用程序引入了大量的停机时间。当修改发生时,数据库表仍然无法访问,这可以导致针对一些大型表的数小时的不可用性。此外,当这些更改是应用程序升级的一部分时,通常有需要在新应用程序可以被部署之前发生的多个模式或数据变换。例如,应用程序v1需要数据库模式v1,而应用程序v2需要数据库模式v2。本文所要保护的主题不限于解决任一个缺点或只在诸如上述环境中操作的实施例。相反,仅提供背景以说明其中可以实践本文描述的一些实施例的一个示例性
技术领域
:。技术实现要素:本文所图示的一个实施例包括可以在计算环境中被实践的方法。该方法包括用于转换数据库的操作,同时允许数据库中的数据在数据库的转换期间对数据库用户是用的。方法包括为数据库的数据库项的旧副本创建新版本的元数据,以将数据库的数据库项的旧副本转换为数据库项的新副本,以对数据库项的旧副本中的项进行转换。方法还包括创建在数据库项的旧副本中要变换的数据项的副本,同时在将数据从数据库项的旧副本迁移到数据库项的新副本时对数据库项的旧副本中要变换的数据项进行变换,以对数据库项的旧副本中的数据项进行变换。方法还包括将数据库项的旧副本迁移到数据库项的新副本的同时,服务于对数据库项的旧副本进行的用户查询,以允许数据库保持联机的同时对数据库中的数据项进行变换。提供本
发明内容以简化的形式介绍一些概念,这些概念在下面的详细描述中进一步描述。本
发明内容不旨在识别权利要求中主题的关键特征或必要特征,也不旨在用于辅助确定要求保护的主题的范围。附加特征和优点将在下面的描述中阐述,并且部分将从描述中显而易见,或者可以通过本文教导的实践来了解。本发明的特征和优点可以借助所附权利要求中特别指出的仪器和组合来实现和获得。本发明的特征将从下面的描述和所附权利要求中变得更加显而易见,或者可以通过下文阐述的本发明的实践来了解。附图说明为了描述可以获得上述和其它优点和特征的方式,将通过参考在附图中图示的具体实施例来呈现上述简要描述的主题的更具体的描述。请理解,这些附图只描绘了典型的实施例,因此不被认为是在范围上的限制,将通过使用附图以附加的特征和细节来描述和解释实施例,在附图中:图1图示了包括数据项的新副本和数据项的旧副本的数据库;图2图示了变换数据库的操作;以及图3图示了变换数据库的方法。具体实施方式以下示例在可从华盛顿州雷德蒙德的微软公司获得的的上下文中进行了说明。因此,所图示的特定数据库语句对于实现是特别的。然而,应当理解,其它实施例可以使用其他数据库产品及其对应的语句。现在参考图1,图示了示例数据库102。本文中的一些实施例可以实现数据库模式的旧版本104和数据库模式的数据库项的新版本新副本。此外,实施例可以根据数据库模式的旧版本104来维护数据库项的旧副本108,并且根据数据库模式的数据库项的新版本新副本来维护数据库项的新副本110。当数据库102可用于用户(即,数据库102联机)时,通过执行模式和数据类型改变操作,应用程序112可以对模式的旧版本104进行操作,直到数据库102中的所有必要的改变已经被完成。然后,数据库管理员114可以将模式切换到数据库项的新版本新副本,并且还可以在没有任何(或非常小的)停机时间的情况下升级应用程序112。本文实施例可以抽象出所有实现逻辑以从管理员114执行这样的操作。管理员114简单地描述所需的变换,和由系统内部处理诸如表的数据库项的各种副本的维护。例如,参考图2,在一些实施例中,数据可以从旧的列类型迁移到新的列类型,同时将数据类型从旧的数据类型转换为新的数据类型。具体地,图2图示了模式改变,其中类型“int”的列被更改为类型“bigint”的列,以允许在列中包括更大的数字。旧列中的int列中的条目被转换为“bigint”数据类型并被移入新列。实施例可以维护数据的两个副本108和110。迁移旧的副本108中的原始数据的后台线程116被修改为当数据被复制到新的副本110时转换特定列的数据类型。对于并发更新,维护数据的新副本110的查询计划的部分现在被修改以注入将数据转换为新的数据类型的数据类型转换运算符(例如在来自微软公司上的“convert”运算符118)或者在其它产品中的其它数据类型转换运算符。即使这只是执行数据类型转换,这个逻辑也可以扩展到通过任意的用户定义的表达式来变换数据,允许应用程序更新所要求的更复杂的场景(比如将姓名分成两列)。当数据库联机并对用户是可用的时,实施例可以执行以下阶段以迁移数据库。·准备阶段:这个阶段将新版本的表添加到元数据、创建新的行集合、并启用版本控制来执行数据的快照扫描。·构建阶段:构建阶段执行语句以复制数据库中的数据,诸如来自华盛顿州雷德蒙德微软公司的中的insert...select,以填充表的新副本110。数据库查询优化器120知道这是“特别的”数据操作语言,并且生成将数据从旧版本108复制到新版本110的计划。如图2所图示,简单地从数据库中选择数据的操作可以访问旧版本108。插入、更新或删除数据的操作访问旧版本108和新版本110两者。·最终阶段:在最终阶段,表格被排他地锁定(诸如中的sch-m锁定的模式修改锁定)很短的时间,以便更新元数据,丢弃表的旧版本108。模式修改锁定阻止对表的并发访问。这意味着模式修改锁定阻止所有外部操作直到锁定被解除。在联机模式和/或数据变换期间,并发选择操作正在访问表的旧版本108,但数据操纵操作(如插入、更新和删除)需要维护旧版本108和新版本110两者。元数据通知查询优化器,这是一个“联机”表,并且因此会图2所图示的生成一个特殊的查询计划以适当地对其进行维护。在数据库联机时,可以重新使用此过程来支持广泛的操作。由用户指定的数据库项的新模式新副本来创建表的新版本110。为了实现这一点,关系元数据被版本化,使得可以适当地完成表的新版本110的维护,应用所需的变换。此外,存储引擎122中的新副本110中的新的行集合是用模式的数据库项的新版本创建的。附加地,由表构建器124执行用于插入和选择数据的语句(诸如中的insert...select语句)在将数据复制到表的新版本110时对数据进行变换。查询优化器120看到表的两个版本,并且生成适当的查询执行计划以在复制数据的同时应用变换。并发数据操纵语言操作可以从元数据中看到模式/数据的两个版本,并且查询优化器120在应用所需的变换的同时生成特殊计划以维护数据的新版本110。另一个实现使用表构建过程,其中并发更新操作不必维护数据的新版本/副本,但后台任务处理更新的增量,并在将其复制到数据的新版本110时应用所需的变换。当增量变得非常小时,表被锁定,以便后台任务可以复制数据的最后一部分并终结操作。增量可以是例如需要处理的在100到1000行的数量级。然而,在一些实施例中,增量应足够小,以便迁移很快,并且仅需要几毫秒。除了上述更通用的、可以覆盖大多数列修改、添加或删除操作(诸如中的altercolumn操作)的方法之外,实施例可以处理压缩列上的特定类型更改作为仅元数据操作。对于其中具有原始列类型的任何行格式和内容和具有新列类型的行格式和内容相同的情况是可能的。在这种情况下,实施例可以简单地更新关系引擎和存储引擎元数据,而不对行进行任何更新。目前,许多列修改、添加或删除操作都被处理为仅限元数据操作。然而,数据压缩提供了支持更多可能常用的情况的机会。对于启用数据压缩的行集合,所有列都作为可变长度列存储在存储引擎中,并且与实施例正在使用的压缩算法相结合,上述要求例如对于以下类型改变是有效的:·smallint->int->bigint·smallmoney->money·char(n)->char(m),其中n<=m·char(n)->varchar(m),其中n<=m·binary(n)->binary(m),其中n<=m·binary(n)->varbinary(m),其中n<=m数据定义语言数据定义语言可以包括允许用户指定在模式或数据变换中使用的操作将作为“联机”操作进行的附加选项。下面的示例示出了包含在中的altertable...altercolumn语句,其中包含指示这是“联机”操作的参数:参数[withonline=on/off]提供了指定将如何执行操作的能力。元数据在一些实施例中,对联机的列修改的数据定义语言以与脱机操作相同的逻辑开始,区别在于它仅采用意图共享锁而不是独占模式修改锁。这允许并发数据操纵语言继续进行。元数据修改即使元数据检查可以在意图共享锁(即,指示事务的意图通过在这些单独的资源上放置共享锁来读取在层次结构中较低的一些(但不是全部)资源,其阻止其它事务获取排他锁)下完成,元数据更新需要特殊处理,因为它们通常需要在表上的排他锁。要解决这个问题,而不是就地更新列元数据:·用新属性(类型等)创建列的新副本。这意味着旧列的信息仍然可用。·仅在存储器中创建新列,而不更新系统表。如果系统表被更新,实施例将提交更新它们以释放行锁的事务。这将对恢复产生问题。·新列不会添加到表的列集合中,以便除非明确请求,并行查询不可见。这意味着代理器仍然可以像往常一样地加载所有列,并且不需要更改来处理“联机”列。回滚时的元数据恢复还实现特殊逻辑来处理回滚数据定义语言。通常,元数据假设数据定义语言操作正在对象上保持独占模式修改锁,并且没有其他实体可以保持引用,因此,在发生故障的情况下,实施例仅仅从元数据缓存中移除整个对象。磁盘一致性由事务回滚处理,因此在下一个请求实施例中,只需简单地从磁盘重新加载对象。由于这是联机操作,所以实施例只在表上保留意图共享锁(而不是独占模式修改锁)。由于实施例在回滚时不能获得更多的锁,所以其它方可以保持对该对象的引用,因此实施例不能简单地将其从缓存中移除。为了在回滚时清理元数据,实施例结合专门针对联机列修改操作的新虚拟日志记录结合使用参考计数。虚拟日志记录在不描述需要回滚的磁盘上的更改而只是可以调用数据库服务器代码来执行回滚内存值的一些逻辑的占位符的意义上是虚拟的。在回滚时,虚拟日志记录会将“联机”列标记为已中止,以便新查询无法获得对其的引用。如果列对象没有引用,它将丢弃它。否则,它将移除其引用,释放引用的最后一个实体实际上将会将其从元数据缓存中移除。阻止并发操作由于实施例在内存中进行元数据改变,所以实施例避免了两次“联机”操作的并发访问。为此,实施例将采取专门的锁来防止相同表上的并发联机操作。此锁在整个操作期间保持。并发查询如上所述,新列不会被添加到列集合中,并且除非明确请求,否则将不会是可见的。这意味着代理器将总是使用“旧”列元数据,并且查询优化器120将基于此来生成计划。如图2所示,诸如中的select查询的数据选择查询在联机表重建操作期间只能使用数据库项的旧副本108,因此它们将尝试访问包含“旧”列的行集合。由于用于计划生成的元数据与se中的数据格式相匹配,因此所有数据选择查询都应正常工作。实施例可以具有关于由在列修改操作期间发生的类型转换引起的错误的功能。例如,当用户访问列c1为“bigint”但是当前被改变为“int”的表时,如果所插入的值不适合“int”,则用户将得到对于类型“int”存在溢出的错误。然而,从用户的角度来看,列类型仍然是“bigint”,这是系统视图所报告的。因此,在一些实施例中,可以将附加信息添加到这些错误消息中以利用关于错误的原因的附加细节警告用户。如果列修改操作被取消或失败(例如,因为对于给定行不能进行数据变换),则可以通过简单地销毁第二副本(例如数据库项的新副本110)来几乎立即完成回滚操作。实施例可以利用各种实现的特征来实现某些优化。例如,由于实施例创建数据的新副本(例如数据库项的新副本110),诸如最小日志记录的优化可被用于加速操作并减少所需的日志空间。下面的讨论现在涉及可以被执行的多种方法和方法动作。即使方法动作可以按照特定顺序进行讨论或以特定顺序示出在流程图中,但除非具体说明或需要因为动作取决于在此动作被执行之前完成的另一动作,否则不需要特别的排序。现在参考图3,图示了方法300。方法300可以在计算环境中实践。方法300包括用于变换数据库的动作同时允许数据库中的数据在数据库的变换期间对数据库用户是可用的。方法包括为用于数据库的数据库项的旧副本创建元数据的新版本,以用于将数据库项的旧副本变换为用于数据库的数据库项的新副本,以变换数据库项的旧副本中的项(动作302)。例如,如图1所示,为数据库项的现有副本108创建数据库模式的新版本106。方法300还包括在数据库项的旧副本中创建要被变换的数据项的副本,同时在将数据从数据库项的旧副本迁移到数据库项的新副本时,对所述数据库项的旧副本中的要被变换的所述数据项应用变换,以用于变换数据库项的旧副本中的数据项(动作304)。这是根据元数据的新版本完成的。因此,例如,根据数据库模式的新版本106,来自数据项的旧副本108的数据项被复制到数据项的新副本110。方法300还包括当将数据从数据库项的旧副本迁移到数据库项的新副本时,服务于对数据库项的旧副本进行的用户查询以允许数据库保持联机同时变换数据库中的数据项(动作306)。因此,如图2所示,用户126可以发送由数据库项的旧副本108服务的各种数据库查询。可以实施方法300,其中在数据库项的旧副本中创建要变换的数据项的副本包括:获取数据库项的旧副本的快照。可以实施方法300,其中服务于对数据库项的旧副本进行的用户查询包括:服务于从数据库项的新副本和数据库项的旧副本的查询,包括当用户查询包括数据更新时更新数据库项的新副本和数据库项的旧副本两者。更新可以包括对现有数据项的插入操作、删除操作或修改操作中的至少一个。图2图示了针对插入、更新和删除操作所示的此更新路径的示例,其中当用户请求这样的操作时,对数据项的旧副本108和数据项的新副本110两者均进行修改。在一些这样的实施例中,方法300还可以包括将针对数据库项的旧副本的查询计划改变为针对数据库项的新副本和数据库项的旧副本两者的查询计划。在上面图示的示例中,这可以由查询优化器120执行。可以实施方法300,其中服务于对数据库项的旧副本的用户查询包括:当用户查询仅包括检索数据时,服务于仅从数据库项的旧副本而不从数据库项的新副本的查询。例如,如图2所示,当命令是不修改、插入或删除数据的选择命令时,可以从数据库项的旧副本108中对查询进行服务。可以实施方法300,其中变换数据库项的旧副本到数据库项的新副本包括拆分列。例如,姓名列可以被拆分为姓氏列和名字列。可以实施方法300,其中变换数据库项的旧副本到数据库项的新副本包括改变列的数据属性。例如,实施例可以改变列的类型。在图2所示的示例中,类型从int更改为bigint。可以实施方法300,其中变换数据库项的旧副本到数据库项的新副本包括添加新列。备选地或附加地,可以实施方法300,其中变换数据库项的旧副本到数据库项的新副本包括组合列。备选地或附加地,可以实施方法300,其中变换数据库项的旧副本到数据库项的新副本包括删除列。方法300还可以包括恢复数据库,诸如例如通过检测数据库故障、以及通过丢弃数据库项的新副本并使用数据库项的旧副本继续数据库操作来回滚数据库。由于使用数据库项的旧副本108和数据库项的新副本110两者,方法300的某些实施例还可以包括:标识由于维护数据库项的旧副本和数据库项的新副本两者而不需要执行的日志操作。此外,这些方法可以由包括一个或多个处理器和诸如计算机存储器的计算机可读介质的计算机系统来实施。具体地,计算机存储器可以存储当由一个或多个处理器执行时使得执行诸如实施例中所述的动作的各种功能的计算机可执行指令。本发明的实施例可以包括或利用包括计算机硬件的专用计算机或通用计算机,如下面更详细地讨论的。本发明范围内的实施例还包括用于携带或存储计算机可执行指令和/或数据结构的物理和其它计算机可读介质。这样的计算机可读介质可以是可由通用计算机系统或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。携带计算机可执行指令的计算机可读介质是传输介质。因此,作为示例而非限制,本发明的实施例可以包括至少两种明显不同种类的计算机可读介质:物理计算机可读存储介质和传输计算机可读介质。物理计算机可读存储介质包括ram、rom、eeprom、cd-rom或其它光盘存储器(例如cd、dvd等)、磁盘存储器或其它磁存储设备、或可用于以计算机可执行指令或数据结构的形式存储的所需程序代码装置和可由通用计算机或专用计算机访问的任何其它介质。“网络”被定义为使得能够在计算机系统和/或模块和/或其它电子设备之间传送电子数据的一个或多个数据链路。当信息通过网络或其它通信连接(硬连线、无线或硬连线或无线的组合)传输或提供给计算机时,计算机将适当地视连接为传输介质。传输介质可以包括能用于以计算机可执行指令或数据结构的形式携带所需程序代码装置和可由通用计算机或专用计算机访问的网络和/或数据链路。以上组合也包括在计算机可读介质的范围内。此外,在到达各种计算机系统组件时,可以将以计算机可执行指令或数据结构形式的程序代码装置自动地从传输计算机可读介质传送到物理计算机可读存储介质(反之亦然)。例如,通过网络或数据链路接收的计算机可执行指令或数据结构可以在网络接口模块(例如,“nic”)内的ram中缓冲,然后最终传送到计算机系统ram和/或在计算机系统处的更少的易失性计算机可读物理存储介质。因此,计算机可读物理存储介质可以包括在同样(或甚至主要)利用传输介质的计算机系统组件中。计算机可执行指令包括例如使通用计算机、专用计算机或专用处理设备执行某一功能或功能组的指令和数据。计算机可执行指令可以是例如二进制文件、诸如汇编语言的中间格式指令或者甚至是源代码。即使主题已经用特定于结构特征和/或方法动作的语言描述,但是应当理解,所附权利要求书中限定的主题不一定限于上述所描述的特征或动作。相反,所描述的特征和动作被公开为实现权利要求的示例形式。本领域技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持设备、多处理器系统、基于微处理器的消费电子产品或可编程的消费电子产品、网络pc、小型计算机、大型计算机、移动电话、pda、寻呼机、路由器、交换机等。本发明还可以在分布式系统环境中实现,其中通过网络(通过硬连线数据链路、无线数据链路或通过硬连线和无线数据链路的组合)链接的本地计算机系统和远程计算机系统两者均执行任务。在分布式系统环境中,程序模块可以位于本地存储设备和远程存储设备两者中。替代地或另外地,本文的功能描述可以至少部分地由一个或多个硬件逻辑组件来执行。例如但非限制,可以使用的说明性类型的硬件逻辑组件包括现场可编程门阵列(fpga)、程序专用集成电路(asic)、程序特定标准产品(assp)、系统级芯片系统(soc)、复杂可编程逻辑器件(cpld)等。在不脱离本发明的精神或特征的情况下,本发明可以以其它具体形式实施。所描述的实施例在所有方面被认为仅是说明性的而不是限制性的。因此,本发明的范围由所附权利要求书而不是上述描述来指示。与权利要求书等同的含义和范围内的所有改变将被包括在其范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1