在不同数据库服务器之间划分一个数据库所有权以控制访问数据库的制作方法

文档序号:6578665阅读:180来源:国知局

专利名称::在不同数据库服务器之间划分一个数据库所有权以控制访问数据库的制作方法
技术领域
:本发明涉及数据库系统,尤其涉及一种在不同数据库服务器之间对数据库所有权进行划分以控制访问数据库。
背景技术
:多处理计算机系统是那些包括多个处理单元的系统,这些处理单元能够相对于彼此而并行执行指令。为了使用并行处理能力,一个任务的不同方面可以指派给不同的处理单元。在这里,一个任务的不同方面称为工作区组(workgranule),而负责在可用处理单元之间分配工作区组的进程则称为协调器进程。多处理计算机系统通常分为三种共享一切的系统(sharedeverythingsystem)、共享磁盘的系统(shareddisksystem)以及无共享的系统(sharednothingsystem)。在将工作分配给执行工作区组的进程时所放置的约束条件是根据所涉及的多处理系统类型而变化的。在共享一切的系统中,所有处理器上的进程都可以直接访问系统中所有的动态存储设备(下文中通称为"存储器")以及所有的静态存储设备(下文中通称为"磁盘")。因此在一个共享一切的系统中,对于如何指派工作区组而言几乎是没有约束条件的。然而需要在不同计算机组件之间进行高度布线以提供共享一切的功能。另外,对共享一切的架构来说,还存在着可伸縮性的限制。在共享磁盘的系统中,处理器和存储器归合成节点。共享磁盘系统的每个节点自身即可构成一个共享一切的系统,其中包含了多个处理器和多个存储器。所有处理器上的进程都可以访问该系统的所有磁盘,但是只有属于某个特定节点的处理器上的进程可以直接访问该特定节点的存储器。共享磁盘系统所需要的布线通常少于共享一切的系统。然而,共享磁盘系统更易受到不均衡工作负载条件的影响。举例来说,如果节点具有一个进程,该进程作用于一个需要大量动态存储器的工作区组,那么,属于该节点的存储器可能不足以同时保存所有需要的数据。因此,即使其他节点保持大量可用和未使用存储器,该进程也还是要与节点的本地存储器交换数据。共享磁盘系统提供了造成存储器毁损的软件故障划分。唯一的例外是那些由节点间的锁定管理器所使用的控制块,实际上,这些控制块在所有节点都得到了复制。在无共享系统中,所有处理器、存储器以及磁盘都将归合成节点。与共享磁盘系统一样,在无共享系统中,每个节点自身都可构成一个共享一切的系统或是一个共享磁盘的系统。只有那些运行在某个特定节点上的进程可以直接访问该节点内部的存储器和磁盘。在这三种常规的多处理系统中,无共享系统通常在不同系统组件之间需要最少的布线。然而,无共享系统最易受到不均衡工作负载条件的影响。举例来说,在某个工作区组中所要访问的全部数据都可保存在某个特定节点的磁盘上。因此只有运行在该节点内部的进程可用于执行该工作区组,即使是在其它节点上的进程都保持空闲的情况下。无共享系统提供了导致存储器和/或磁盘毁损的软件故障划分。唯一的例外就是对依据不同节点的数据子集"所有权"加以控制的控制块。与共享磁盘锁定管理信息相比,对所有权很少进行修改。因此,所有权技术要比共享磁盘锁定管理技术更加简单可靠,因为它们并不具有对于高性能的需要。运行在多处理系统上的数据库通常分为两种共享磁盘的数据库和无共享数据库。在共享磁盘的数据库系统中,多个数据库服务器(通常运行在不同节点上)能够读取和写入数据库的任何部分。共享磁盘架构中的数据访问是借助一个分布式锁定管理器来协调的。共享磁盘的数据库既可运行在无共享的计算机系统上,也可运行在共享磁盘的计算机系统上。要想在一个无共享计算机系统中运行一个共享磁盘的数据库,那么可以向操作系统添加软件支持,也可以提供附加硬件而使得进程能够直接访问远程磁盘。无共享数据库假设只有当数据包含在一个与进程同属一个节点的磁盘上的时候,该进程才能直接访问数据。具体地说,数据库数据是在可用数据库服务器之间细分的。每个数据库服务器只能直接读写该数据库服务器拥有的那部分数据。如果第一服务器试图访问第二服务器拥有的数据,那么第一数据库服务器必须向第二数据库服务器发送消息,以使第二数据库服务器代表它来执行数据访问。无共享数据库既可以运行在共享磁盘的多处理系统上,也可以运行在无共享的多处理系统上。为了在共享磁盘的机器上运行一个无共享数据库,可以提供一种软件机制来对数据库进行逻辑划分并将每个分区的所有权指派给某个特定节点。无共享系统和共享磁盘的系统各自都具有与其特定架构相关的便利优点。举例来说,如果存在对于数据的频繁写访问(写热点),那么无共享数据库提供了更好性能。如果存在频繁的读访问(读热点),那么共享磁盘的数据库提供了更好的性能。并且如上所述,在出现软件故障的情况下,无共享系统提供了更好的容错性。根据上文,较为理想的是提供一个单独的数据库系统,该系统能够提供这两种数据库架构的性能优势。然而,这两种架构通常是相互排斥的。
发明内容在这里提供了一个数据库系统,其中将数据库或数据库的某个部分划分成所有权组。每个所有权组都被指派了一个或多个数据库服务器,使之作为所有权组的所有者。指派为所有权组的所有者的数据库服务器被看作是属于该所有权组的所有数据项的所有者。也就是说,这些数据库服务器准许直接访问该所有权组中的数据项,而其他数据库服务器则不准许直接访问这些数据项。根据本发明的一个方面,提供了一个数据库系统,该系统包括一个或多个持久存储设备,其上保存了一个数据库,该系统还包括运行在多个节点上的多个数据库服务器。每个节点都能够直接访问持久存储设备。至少一部分数据库划分为多个所有权组。每个所有权组都指派了一个所有者集合。只有那些作为所有权组所有者集合中的成员并在数据库服务器上运行的进程才准许直接访问所有权组内部的数据。每个所有权组都标记为无共享所有权组或是共享磁盘所有权组。每个无共享所有权组都从数据库服务器中指派了一个所有者。只有每个无共享所有权组的所有者才准许直接访问无共享所有权组内部的数据。每个数据库服务器都准许直接访问所有权组内部的数据,而这些所有权组则标记为共享磁盘所有权组。本发明是借助实例来描述的,但这并不作为限制,在附图的图形中,相同的附图标记代表相同的部件,其中图1是可以执行本发明一个实施例的计算机系统的框图;图2是根据本发明一个实施例而使用所有权组的分布式数据库系统的框图;图3是一个描述对支持所有权组的系统的数据项执行操作的步骤的流程图;图4是一个对根据本发明实施例来改变所有权组的所有者集合的步骤加以描述的流程图;以及图5是一个描述根据一个本发明实施例来进行原子变化的技术的框图。具体实施例方式在这里描述了一种方法,用于在不同的数据库服务器之间对一个数据库的所有权进行划分,以便对数据库访问加以控制。在以下描述中,为了说明的目的,对许多细节进行了阐述,以便提供关于本发明的全面理解。然而对本领域技术人员来说,本发明显然可以在不具备这些特定细节的情况下实施。为了避免不必要地使本发明不清楚,其他实例、公知结构和设备是以框图形式显示的。硬件综述图1是描述可以执行本发明一个实施例的计算机系统100的框图。计算机系统100包括一条总线102或是用于传递信息的其他通信结构,并且包括一个与总线102耦合并用于处理信息的处理器104。计算机系统100还包含一个主存储器106,例如随机访问存储器(RAM)或是其它动态存储器,该存储器与总线102耦合,用于保存信息以及处理器104所要执行的指令。在运行处理器104所执行指令的过程中,主存储器106还可用于保存临时变量或是其它中间信息。计算机系统100还包括一个只读存储器(ROM)108或其它静态存储设备,其与总线102耦合,用于保存静态信息和涉及处理器104的指令。并且提供了诸如磁盘或光盘这种存储设备IIO,其与总线102耦合,用于保存信息和指令。计算机系统100可以经由总线102而与阴极射线管(CRT)这类显示器112相连,从而将信息显示给计算机用户。包括字母数字及其他按键的输入设备114与总线102相连,以便将信息和命令选择传递给处理器104。另一种用户输入设备是光标控制116,例如鼠标、轨迹球或光标方向键,用于将方向信息和命令选择传递给处理器104并且控制显示器112上的光标移动。这种输入设备通常在第一轴(例如x)和第二轴(例如y)这两个轴上具有两个自由度,由此设备能够确定一个平面上的位置。本发明涉及使用计算机系统100来提供一个混合的共享磁盘/无共享的数据库系统。根据本发明的一个实施例,处理器104执行主存储器106中包含的一个或多个指令的一个或多个序列,计算机系统IOO对此做出响应,由此提供这种数据库系统。这些指令可以5从诸如存储设备110这样的另一种计算机可读介质读入主存储器106。通过执行主存储器106中包含的指令序列,处理器104执行这里描述的处理步骤。在替换实施例中,硬布线电路可用于取代软件指令或是与之组合,由此实现本发明。因此,本发明的实施例并不局限于硬件电路和软件的任何一种特定组合。这里使用的术语"计算机可读介质"是指任何一种参与向处理器104提供指令以供执行的介质。这种介质可以采取很多形式,其中包括但不局限于非易失介质、易失介质和传输介质。举例来说,非易失介质包括光盘或磁盘,例如存储设备iio。易失介质包括动态存储器,例如主存储器106。传输介质包括同轴电缆、铜线和光纤,其中包括构成总线102的线。传输介质还可以采取声波或光波的形式,例如无线电波和红外数据通信中产生的信号。举例来说,计算机可读介质的通用形式包括软盘、软磁盘、硬盘、磁带或任何其它磁介质、CD-ROM或任何其它光学介质、穿孔卡、纸带、或具有孔洞图案的任何其它物理介质、RAM、PROM和EPROM、FLASH-EPROM、其它任何存储芯片或盒式磁盘机、如下所述的载波或是计算机可以读取的其它任何介质。不同形式的计算机可读介质涉及向处理器104传递一个或多个指令的一个或多个序列,以便加以执行。举例来说,起初可以在远程计算机的磁盘上携带指令。远程计算机可以将指令加载到它的动态存储器中,并且使用调制解调器经由电话线来发送指令。计算机系统100本地的调制解调器可以在电话线上接收数据并且使用红外发射机来将数据转换成红外信号。红外检测器可以接收红外信号中携带的数据,而恰当的电路则可将数据安插到总线102上。总线102将数据传送到主存储器106,处理器104从主存储器106中检索并执行指令。在由处理器104执行之前或之后,主存储器106接收的指令可以随意保存在存储设备110上。计算机系统100还包括一个与总线102相连的通信接口118。通信接口118提供了一个与网络链路120耦合的双向数据通信,其中网络链路120与本地网络122相连。举例来说,通信接口118可以是一个综合业务数字网(ISDN)的网卡或是一个为相应类型的电话线路提供数据通信连接的调制解调器。作为另一个实例,通信接口118可以是一个局域网(LAN)网卡,它向兼容的LAN提供数据通信连接。此外还可以实施无线链路。在任何一种这类实施中,通信接口118都会收发电、电磁或光信号,这些信号传送的是那些代表不同类型信息的数字数据流。网络链路120通常经由一个或多个网络而向其它数据设备提供数据通信。举例来说,网络链路120可以通过本地网络122来将一个连接提供给主机124或是互联网服务供应商(ISP)126运作的数据设备。ISP126进而又经由现在通常称为"互联网"128的全球分组数据通信网络来提供数据通信业务。本地网络122和互联网128都使用了传送数字数据流的电、电磁或光信号。经由不同网络的信号以及网络链路120上经由通信接口118的信号携带了往返于计算机系统100的数字数据,这些信号即为传送信息的载波的示范性形式。计算机系统100可以经由一个或多个网络、网络链路120以及通信接口118发送消息并接收数据,其中包括了程序代码。在互联网实例中,服务器130可以经由互联网128、ISP126、本地网络122以及通信接口118来发送一个用于应用程序的被请求码。根据本发明,这种下载得到的应用是为这里所述的混合共享磁盘/无共享数据库系统提供的。接收到的代码可以按照接收时的原状由处理器104执行和/或存入存储设备110或其它非易失存储器而供稍后执行。这样,计算机系统ioo可以得到载波形式的应用码。这里所述的在不同数据库服务器之间划分一个数据库所有权而对数据库访问加以控制的方法是在一个计算机系统上实施的,尽管根据本发明的一个方面,对某些"无共享"磁盘数据的访问将会受到软件约束,但是对该计算机系统而言,可以从节点提供全部磁盘的共享磁盘访问,也就是说,它是一个可用于严格的共享磁盘访问的系统。所有权组根据本发明的一个实施例,将一个数据库(或其某些部分)划分为所有权组。每个所有权组都被指派了一个或多个数据库服务器,以此作为所有权组的所有者。指派为所有权组所有者的数据库服务器被看作是从属于该所有权组的所有数据项的所有者。也就是说,这些数据库服务器准许直接访问该所有权组内部的数据项,而其他数据库服务器则不能直接访问这些数据项。根据一个实施例,经常受到同时访问的数据项归合到相同的所有权组,以此确保它们由相同的数据库服务器所拥有。所有权组是通过将相关数据项组合视为一个原子单元而对一组相关数据项进行操作的。举例来说,通过将一个所有权组的所有权从第一数据库服务器转移到第二数据库服务器,该所有权组内部的所有数据项的所有权都可从第一数据库服务器转移到第二数据库服务器。混合数据库系统图2是一个对根据本发明一个实施例的混合数据库系统架构进行描述的框图。图2包括三个节点202、204和206,其上分别运行着数据库服务器208、210和212。数据库服务器208、210和212分别与缓冲存储器220、222和224相关联。每个节点202、204和206都与系统总线218相连,以使数据库服务器208、210和212能够直接访问保存在这两个磁盘214和216上的数据库250内部的数据。包含在磁盘214和216上的数据从逻辑上划分为所有权组230、232、234和236。根据本发明的一个实施例,每个所有权组包含一个或多个表空间(tablespace)。表空间是一个或多个数据文件(datafile)的集合。然而,本发明并不局限于任何一种特定的划分颗粒度,并且可以与更大或更小范围的所有权组一起使用。根据一个实施例,每个所有权组都被指定为共享磁盘所有权组或是无共享所有权组。指定为无共享所有权组的各个所有权组都指派了一个可用数据库服务器,以此作为它的所有者。在图2描述的系统中,所有权组230是服务器210拥有的无共享所有权组,所有权组232是一个共享磁盘所有权组,所有权组234是服务器212拥有的无共享所有权组,所有权组236是服务器208拥有的无共享所有权组。由于所有权组230是服务器210拥有的无共享所有权组,因此只允许服务器210直接访问所有权组230内部的数据(Dl)。任何试图访问所有权组230数据的其它服务器通常需要向服务器210发送请求,要求服务器210作为请求服务器的代表来执行预期的数据访问。同样,所有权组234和236也是无共享所有权组,并且只能被它们各自的所有者直接访问。由于所有权组232是一个共享磁盘的所有权组,因此任何数据库服务器都可直接访问其中包含的数据集。如图2所示,每个数据库服务器都可在其缓冲存储器中包含该数据(D2)的一个副本。并且使用了一个分布式锁定管理器来对共享数据访问进行协调。根据一个实施例,该数据库系统包括一种机制,用于将某个特定所有权组从共享磁盘动态改变为无共享,反之亦然。举例来说,如果某个特定无共享数据集受到频繁的读访问(读热点),那么可以将其所属的所有权组从无共享转换为共享磁盘,从而将该数据转换为共享磁盘。同样,如果某个共享磁盘的数据集受到频繁的写访问(写热点),那么可以将包含该数据的所有权组改成一个无共享所有权组,并将该所有权组的所有权指派给一个数据库服务器,由此将该数据转换成无共享数据。根据本发明的一个方面,该数据库系统还包括一种机制,用于把无共享所有权组的所有权从一个节点重新指派给另一个节点。操作员可能需要该操作来改善负载均衡,并且该操作也可自动进行,以便在节点Nl出现故障之后继续为访问Nl所拥有的无共享所有权组的数据提供支持。所有权如上所述,提供了一种数据库系统,其中某些所有权组被指定为无共享所有权组,而某些所有权组则被指定为共享磁盘的所有权组。每个无共享所有权组都被指派了一个所有者。对所有数据库服务器来说,无共享所有权组的所有权是已知的,因此,在需要对所有权组内部数据执行任务的时候,这些数据库服务器可以向所有权组的所有者发送请求。根据本发明的一个实施例,不同所有权组的所有权信息都保存在一个控制文件中,并且所有能够访问该数据库的数据库服务器都准许访问该控制文件。每个数据库服务器都可将控制文件的一个副本存入缓存。在缓存中具有控制文件副本的情况下,数据库服务器可以确定该所有权组的所有权,而不必始终承担与从磁盘中读取所有权信息相关联的开销。图3是描述数据库服务器所执行的步骤的流程图,该数据库服务器希望得到既使用共享磁盘所有权组又使用无共享所有权组的系统中的数据。在步骤300,数据库服务器确定预期数据所属的所有权组。在步骤302,数据库服务器确定包含预期数据的所有权组的所有者。如上所述,可以通过访问一个控制文件来执行步骤302,其中可以将控制文件的一个副本存入与数据库服务器相关联的缓存。如果该所有权组是一个共享磁盘所有权组,那么所有数据库服务器都将被看作是该所有权组的所有者。如果该所有权组是一个无共享所有权组,那么将会在控制文件中把某个数据库服务器指定为该所有权组的所有者。在步骤304,数据库服务器判定自身是否即为保持预期数据的所有权组的所有者。如果(1)该所有权组是一个共享磁盘的所有权组,或者(2)该所有权组是一个无共享所有权组,并且控制文件中把该数据库服务器指定为无共享所有权组的所有者,那么该数据库服务器即为该所有权组的所有者。如果数据库服务器是保持预期数据的所有权组的所有者,那么控制将会传递到步骤310,在那里数据库服务器将会直接检索预期数据。如果数据库服务器不是保持数据的所有权组的所有者,那么控制将会传递到步骤306。在步骤306,数据库服务器向该所有权组的所有者发送一个请求,以使该所有者代表请求者来访问预期数据。在步骤308,数据库服务器从该所有权组的所有者接收预期数据。所有者集合根据一个替换实施例,一个所有权组并不局限于(1)只由仅仅一个数据库服务器8所拥有(无共享),或者(2)由所有的数据库服务器所拥有(共享磁盘)。相反,所有权组还可以由可用数据库服务器中的任何指定子集所拥有。在这里,拥有某个特定所有权组的数据库服务器集合称为所有权组的所有者集合。因此,无共享所有权组与所有者集合中只包含一个数据库服务器的所有权组等价,而共享磁盘所有权组则与所有者集合中包含了所有可用数据库服务器的所有权组等价。当使用所有者集合来执行一个关于所有权组的数据的任务时,不属于该所有权组的所有者集合的数据库服务器将会向那些归属于该所有权组的所有者集合的数据库服务器中的一个服务器发送请求。响应于该请求,请求接收者直接访问该所有权组的数据并且执行所请求的任务。由所有权组内部写热点产生的争用只会在那些归属于所有权组的所有者集合的数据库服务器之间产生。改变所有权组的所有权如上所述,把所有权组从无共享变成共享磁盘或从共享磁盘变成无共享,这是合乎需要的。这种变化可以响应于读写热点检测而被自动启动,也可以手动启动(例如响应于数据库管理员发出的命令)。可以使用不同技术来把所有权组从一个所有者集合("源所有者集合")转移到另一个所有者集合("目的所有者集合")。图4是一个描述根据本发明实施例来改变所有权组的所有者集合而执行的步骤的流程图。参考图4,在步骤400,一个"禁止改变"的消息广播到所有可用的数据库服务器。该禁止改变消息命令数据库服务器停止对那些所有者集合将会变化的所有权组("转移中的所有权组")内部的数据做出前向改变。前向改变是那些创建一个先前并不存在(也就是创建一个新的"当前"版本的数据项)的版本的改变。另一方面,后向改变则是那些导致重新创建先前已有版本的数据项改变。在步骤402,负责改变所有权组的所有者集合("所有者改变机制")的那部分数据库一直等待,直到所有改变了转移中的所有权组的事务都已提交(commit)或回滚(rollback)。由于不再允许对所有权组进行前向改变,因此,那些在步骤400之前已对转移中的所有权组内部数据执行了某些而非全部更新的事务将会回滚。由于步骤400仅仅阻止那些对转移中的所有权组的前向改变,因此不会防止数据库服务器回滚那些它们已对转移中的所有权组做出的改变。不幸的是,可能会需要大量开销来判定哪些事务更新了转移中的所有权组。因此提供了本发明的一个实施例,其中数据库系统并不尝试追踪那些更新了转移中的所有权组以内的数据的事务。然而,在不对该信息进行追踪的情况下,必须假设任何一个准许访问转移中的所有权组数据并始于步骤400之前的事务都改变了转移中的所有权组内部的数据。基于这个假设,步骤402要求改变机制的所有者一直等待,直到(1)可能已经访问了转移中的所有权组数据,以及(2)始于步骤400之前的所有事务提交或回滚。通常,只有那些在归属于变换所有权组的源所有者集合的数据库服务器中运行的事务才有可能访问转移中的所有权组的数据。因此,如果转移中的所有权组是共享磁盘的,那么改变机制的所有者必须一直等待,直到所有数据库服务器中始于步骤400之前的所有事务都已提交或是回滚。如果转移中的所有权组是无共享的,那么改变机制的所有者必须一直等待,直到拥有转移中的所有权组的数据库服务器的所有事务都已提交或者回滚。需要注意,其中包含了那些在其他节点发起并已创建了转移中的所有权组的本地子事务的用户事务。在有可能更新了转移中的所有权组内部数据的全部事务都已提交或回滚的时候,控制将会前进到步骤404。在步骤404,改变机制的所有者通过更新最小单元操作中的控制文件来改变转移中的所有权组的所有者集合。举例来说,该指示变化可以使转移中的所有权组从无共享所有权组转移到共享磁盘的所有权组,反之亦然。作为选择,指示变化可以只改变拥有一个无共享所有权组的数据库服务器,而不改变该所有权组的类型。在改变控制文件,使之反映转移中的所有权组的新的所有者集合时,控制将会前进到步骤406。在步骤406,一个"刷新缓存"的消息将会发送到所有的可用数据库服务器。一旦接收到刷新缓存的消息,每个数据库服务器将会无效掉缓存中包含的控制文件副本。因此,当数据库服务器随后需要检查控制文件来确定所有权组的所有权时,它们会从持久存储器中检索更新版本的控制文件。由此这些数据库服务器将会了解到转移中的所有权组的新的所有者集合。对所有权变化的调整在频繁使用某个查询的时候,该查询通常会保存在数据库内部。在将所保存的查询初始提交到数据库系统的时候,大部分数据库系统都会为所保存的查询产生一个执行计划,而不是在每次使用所保存查询的时候重新计算一个运行方案。一个查询的执行计划必须顾及包含该查询所访问数据的所有权组的所有权。举例来说,如果该查询指定了对于某个特定数据库服务器专门拥有的所有权组中的一个数据项的更新,那么该查询的执行计划必须包括将该更新操作发送到该特定数据库服务器。然而如上所述,为了改变所有权组的所有权而提供了一种机制。这种所有权变化可以出现在已经为某个特定所保存查询生成了执行计划之后。因此,这些执行计划可能需要某些数据库服务器对它们不再拥有的所有权组内部数据执行操作。根据本发明的一个实施例,那些要求对不为其所有的所有权组内部数据执行操作的数据库服务器向请求该操作的进程返回一个"所有权错误"的消息。响应于接收到一个所有权错误消息,将会为该导致错误的查询产生一个新的执行计划。新的执行计划考虑到了当前版本的控制文件所指示的所有权组的当前所有权。控制文件的管理如上所述使用了一个原子操作来更新控制文件,以便改变所有权组的标志(步骤404)。在这里可以使用不同机制来确保该操作是最小单元的操作。举例来说,如图5所示,根据本发明的一个实施例,控制文件包括一个位图和一系列数据块对。位图512中的每个比特都与一个数据块对相对应。在任何给定时间,一个数据块对中只有一个数据块包含当前数据。与数据块对相关联的比特值指示了对应数据块对的两个数据块中哪一个保持当前数据。举例来说,比特502与包含数据块506和508的数据块对504相关联。比特502的值(例如"0")代表数据块506是数据块对504内部的当前数据块。比特502的值可以变为"l",这表示数据块508的数据是当前数据(由此数据块506中的数据不再有效)。由于一个数据块对的非当前数据块的数据被认为是无效的,因此可以将数据写入非当前数据块,而不改变控制文件的有效内容。实际上只有在位图512的比特值发生改变10的时候,控制文件的内容才会改变。因此,作为原子变化的预备步骤,数据块对504中当前数据块506的内容可以加载到存储器中,也可以被修改,还可以存入数据块对504的非当前数据块508。在执行了这些预备步骤之后,该变化可以通过改变与数据块对504相对应的位图512内部的比特502的值而被自动进行。这仅仅是自动执行改变的技术的一个实例。其它技术也是可以接受的。因此,本发明并不局限于任何一种用于自动执行改变的特有技术。在所有权组之间移动数据项—种改变诸如表空间这种数据项所有权的方法是改变数据项归属的所有权组的所有者。另一种改变数据项所有权的方法是把数据项重新指派给不同的所有权组。举例来说,通过从指派给服务器A的所有权组中移除表空间A并将其安插在指派给服务器B的所有权组中,可以将表空间A的所有者从服务器A改为服务器B。根据本发明的一个实施例,所有权组的全体成员都保存在数据库内部的一个数据字典中。因此,要从第一所有权组将一个数据项移动到第二所有权组,那么必须更新数据字典内部的第一和第二所有权组的全体成员的信息。在改变数据项所有权组时所涉及的不同步骤与那些用于改变所有权组的所有者集合的上述步骤相似。具体地说,对于正在转移的表空间("转移中的表空间")的访问是被禁止的。然后,所有权变化机制将会等待锁定在数据项上的所有事务(或其组件)回滚或者提交。—旦锁定在数据项上的所有事务都已提交或者回滚,那么数据字典将被修改,以便指示该数据项的新的所有权组。然后控制文件将被修改,以便指示数据项移至的所有权组的所有者集合即为数据项的所有者集合。该改变自动允许目标所有者访问该数据项。如果所有权组正在所有权变化之中,那么控制文件将被更新,以便指示该数据项处于一个"移动延迟"的状态中。对于数据项所属的所有权组的变化有可能会改变数据项所有者,也有可能不改变数据项所有者。如果源所有权组的所有者集合与转移中的所有权组的所有者集合相同,那么,在数据项从源所有权组移动到转移中的所有权组的时候,数据项的所有者不会改变。另一方面,如果源所有权组的所有者集合不同于转移中的所有权组的所有者集合,那么,在把数据项从源所有权组移动到转移中的所有权组的时候,数据项的所有者将会改变。特定所有权的变化条件根据一个实施例,提供了某些技术方法来处理以下情况,其中(l)在归属于一个所有权组的数据项正在转移到另外一个所有权组的时候,尝试改变该所有权组的所有者集合;以及(2)当目的地所有权组正在改变其所有者集合的时候,尝试将数据项转移到另外一个所有权组。为了检测这些状态,本发明的一个实施例在控制文件内部为归属于一个所有权组的每个数据项(例如表空间)提供了一个或多个状态标志。举例来说,可以使用一个标记来指示数据项归属的所有权组是否处于指派新的所有者的过程中。同样,一个标记可以指示数据项正处于转移到不同所有权组的过程中。在尝试改变所有权组的所有者集合的时候,所有权变化机制将会检查归属于所有权组的数据项的状态标志,以便确定归属于该所有权组的任何数据项是否处于变换到不同所有权组的过程中。如果归属于该所有权组的任何一个数据项处于转移到另外一个所有权11组的过程中,那么将会停止尝试改变该所有权组的所有者集合。如果没有一个归属于该所有权组的数据项处于转换到不同所有权组的过程中,那么归属于该所有权组的数据项的状态标志指示数据项归属的所有权组的所有权正处在转移之中。并且还将一个消息发送到不同的数据库服务器,以便无效掉它们缓存的控制文件版本。由此确保了这些数据库服务器了解到新的状态标志值。当尝试把数据项移动到不同所有权组的时候,数据项的状态标志将被检查,以便确定目的所有权组是否处于改变其所有者集合的过程中。根据一个实施例,这个检查的执行发生在修改数据字典使之反映新的数据项所有权组之后,以及更新控制文件而使新的所有权组的所有者能够访问该数据项之前。如果数据项归属的所有权组处在改变其所有者集合的过程中,那么用于控制文件中的数据项的状态标志将被设置成指示一个"移动延迟"的状态。另外,整个数据库中的"移动延迟"标记将被设定为指示该数据库中包含了某些处在移动延迟状态中的数据项。在完成了转移所有权组成员的操作的时候,执行变换的进程将会更新状态标志,以便指示该所有权组不再处于所有权转移的过程中。另外,该进程还清除了在所有权组的所有权转移过程中移动到该所有权组的任何数据项的"移动延迟"标志。故障排除在所有权改变的过程中有可能会发生故障。该故障有可能是"进程死亡(progressdeath)"或是"服务器宕机(serverdeath)"的结果。在涉及所有权改变的某个进程出现故障的时候,将会出现一个进程死亡。在整个数据库服务器发生故障的时候,将会出现一个服务器宕机。在存在这两种故障类型的情况下,持久存储器上仍未保存的所有改变也许会丢失。在这种故障之后,有必要将数据库返回到一种一致状态。根据本发明的一个实施例,从进程死亡中恢复是通过使用状态对象(stateobject)来执行的。状态对象是一种数据结构,它被分配在了与进程所属的数据库服务器相关联的存储器区域中。在执行一个动作之前,进程会更新状态对象,以便指示它要执行的动作。如果进程死亡,那么服务器内部的另一个进程(例如"进程监视器")将会调用该状态对象的一种方法(一个"清除程序")而把数据库返回到一个一致状态。在进程出现故障之后执行来进行清除的特殊动作取决于失效进程所执行的操作以及失效进程死亡在其失效之前已经执行到的程度。根据一个实施例,在所有权组的所有权改变过程中,进程故障是如下处理的如果执行所有权变化的进程在其改变最终控制文件之前失效,那么初始的所有者将会作为所有权组的所有者而得到恢复。如果执行所有权变化的进程是在改变最终控制文件之后但是在删除状态对象之前失效的,那么新的所有者仍然是该所有者,并且状态对象将被删除。在将数据项从一个所有权组转移到另一个所有权组的时候,进程故障是如下处理的如果执行转移的进程是在改变数据字典之前失效的,那么数据项的初始所有者将会作为数据项所有者而得到恢复。如果执行转移的进程是在提交了涉及字典的变化之后但是在最终控制文件发生改变之前失效的,那么进程监视器将会结束移动并对控制文件进行适当改变。如果该所有权组处在所有权变化中,那么数据项处于"移动延迟"状态中。如果执行转移的进程是在最终控制文件改变之后但是在删除状态对象之前失效的,那么进程监视器将会删除状态对象。服务器宕机虽然数据库服务器宕机,但是并没有向宕机服务器单独拥有的所有权组的数据提供访问。因此,根据本发明的一个实施例,服务器宕机是一个事件,它触发了一个自动的所有权变化,其中,出现故障的服务器单独拥有的全部所有权组都指派给了新的所有者。在服务器故障之后执行的用于进行清除的特殊动作取决于数据库服务器正在执行的操作以及服务器宕机前执行了多少所有权转移。根据一个实施例,所有权组的一个所有权变化过程中的服务器故障是如下处理的如果在改变最终控制文件之前源数据库服务器已经宕机,那么所有权组将会指派到另一个线程,控制文件中的状态信息将会更新,以便指示所有权组不再处于转移之中。如果目标数据库服务器宕机,那么(1)执行转移的进程将会检测到实例(instance)失效并且终止转移,或者(2)在宕机服务器的恢复过程中,所有权组将会从宕机服务器重新指派到另一个服务器。在将数据项从一个所有权组转移到另一个所有权组时出现的服务器故障是如下处理的如果源服务器是在字典变化之前宕机的,那么在恢复过程中,新的所有者将被指派给源所有权组并会清除数据项的转移标记。如果源服务器是在改变字典之后但是在改变最终控制文件之前宕机的,那么在源服务器的恢复过程中会为数据项指派恰当的所有者或是将其标记为移动延迟,由此结束移动操作。如果目标服务器宕机,并且已经改变了最终控制文件,那么数据项将会标记为"移动延迟"。在宕机服务器的恢复过程中,转移中的所有权组的所有权将被重新指派,移动延迟标记将被清除。减少所有权变化过程中的停机时间如上所述,图4描述的步骤代表一种用于改变所有权组的所有权的技术。在这种技术中,步骤402需要所有权变化机制一直等待,直到所有事务都已提交或是回滚,其中这些事务改变了归属于转移中的所有权组的数据之外的那些数据。在这个等待过程中,转移中的所有权组的所有数据都是不可用的。因此,最小化等待时间是非常重要的。如上所述,对实际改变了归属于转移中的所有权组的数据的事务进行追踪,这很可能是不切实际的。因此,所有权变化机制等待所有运行在归属于转移中的所有权组的源所有者集合的所有数据库服务器上的事务提交或者回滚。由于所有权变化机制必须等待的事务数量,并且其中许多事务有可能并未改变转移中的所有权组的数据,因此延迟有可能是非常重要的。根据一个替换实例,提供了一种机制,该机制允许那些在所有者之间转移的数据在这个延迟中保持可用。具体地说,禁止变化的消息并未发送到所有数据库服务器。相反,一个"新的所有者"消息发送到所有数据库服务器,它指示的是所有权组的目标所有者集合。新的所有者消息可以广播,举例来说,在更新控制文件之后向所有数据库服务器发送一个刷新缓存的消息,以便指示(l)源所有者集合,(2)目标所有者集合,以及(3)该所有权组处在转移之中。在服务器接收到新的所有者的消息之后,由该服务器启动的所有事务都开始行动,就好像目标所有者集合拥有该所有权组那样。在服务器接收新的所有者消息之前,服务器中已经启动的所有事务都会继续进行,就好像源所有者集合拥有该所有权组那样。因此,在等待过程中,转移中的所有权组的所有权在源所有者集合成员与目标所有者集合成员之间得到了有效共享。换句话说,转移中的所有权组的数据是在两个数据库服务器之间临时共享的,并且共享磁盘锁定机制是为了访问这类数据而被临时激活的。在广播新的所有者消息之前开始的源所有者集合中的所有事务都已提交或者回滚的时候,控制文件将会再次更新。在第二次更新中,控制文件将被更新,以便指示目标所有者集合即为所有权组的独占所有者,并且该所有权组不再处于转移之中。在上述说明中,已经参考本发明的实施例而对其加以描述。然而很明显,可以对本发明进行各种修改和变化,而不脱离它的实质和范围。因此,说明书以及附图被看作是说明性的,它们并不具有限制意义。权利要求一种用于管理数据的方法,所述方法包括以下步骤在可被多个节点访问的永久存储器上维持多个永久数据项;将所述多个永久数据项中的每个永久数据项的所有权分配给所述多个节点中的至少一个节点;将涉及所述多个永久数据项中的特定数据项的操作传送给分配给所述特定数据项的特定节点,使得所述特定节点执行对所述特定数据项的操作,其中所述特定数据项驻留在所述永久存储器的特定位置处;当所述第一节点继续操作时,将所述特定数据项的所有权从所述特定节点重新分配给另一节点,而不从所述永久存储器上的所述特定位置处移动所述特定数据项;在所述重新分配后,当任意节点希望执行涉及所述特定数据项的操作时,希望执行所述操作的所述节点将所述操作传送给所述其它节点,如果所述特定数据项驻留在所述特定位置处,则所述其它节点对所述特定数据项执行所述操作。2.根据权利要求1所述的方法,其中,所述多个节点是多个节点数据库系统的节点。全文摘要本发明涉及在不同数据库服务器之间划分一个数据库所有权以控制访问数据库。至少一部分数据库(250)被划分成所有权组(230,232,234,236),其中每一个都被指派了一个或多个数据库服务器(208,210,212)作为所有者。指派为所有者(s208,s210,s121)的数据库服务器(208,210,212)被看作是这个所有权组中全部数据项的拥有者。就是说它们被允许在所有权组中直接访问数据项,而其他数据库服务器则不准许直接访问这些数据项。一个数据库系统中包括一个或多个保存了数据库(250)的永久存储设备(214,216),以及运行在多个可以直接访问永久存储设备(214,216)的节点(202,204,206)上的多个数据库服务器(208,210,212)。至少一部分数据库(250)被划分成了多个所有权组(230,232,234,236),其中每个所有权组都被指派了一个所有者集合。只有在归属于一个所有者集合的数据库服务器上运行的进程才准许直接访问这个所有权组内部的数据。文档编号G06F17/30GK101714152SQ200910146448公开日2010年5月26日申请日期2001年6月28日优先权日2001年6月28日发明者詹弗兰科·普措卢申请人:甲骨文国际公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1