数据库镜像需要单独的许可。请参见单独授权的组件。
数据库镜像 是由运行在不同计算机上的两个或三个数据库服务器组成的配置,这些服务器相互协作,以维护数据库和事务日志文件的副本。
主服务器和镜像服务器都用来维护数据库文件和事务日志文件的副本。在需要确定这两个服务器中的哪个服务器可以取得数据库的所有权时,则使用称为仲裁服务器的第三个服务器。仲裁服务器并不维护数据库的副本。由这三个数据库服务器(主服务器、镜像服务器和仲裁服务器)组成的配置称为镜像系统。其中,主服务器和镜像服务器合在一起称为运行服务器或合作伙伴。
客户端连接到主服务器以访问数据库。对数据库所做的任何更改都会记录在主服务器的事务日志中。提交更改后,事务日志页会发送到镜像服务器,在该处,将事务日志页应用于数据库的镜像副本。服务器充当镜像服务器时,只能以只读模式访问镜像服务器上的数据库副本。请参见配置在镜像服务器上运行的数据库的只读访问。
当主服务器因硬件或软件故障而变为不可用时,镜像服务器便会与仲裁服务器协商以取得数据库的所有权并担当主服务器角色。为了实现所有权转让或角色切换,仍在工作的运行服务器和仲裁服务器必须承认镜像服务器在尝试进行角色切换时处于最新的、已同步状态。先前连接到原主服务器的所有客户端将断开,任何尚未提交的事务都会丢失。然后,客户端必须重新连接到新主服务器上的数据库才能继续访问该数据库。当原主服务器再次变为可用时,它会担当镜像服务器角色。
数据库服务器启动时会在数据库服务器消息窗口中显示状态消息,指明服务器所担当的角色以及启动进程的进度。如果因镜像系统中缺失一个或多个其它服务器而必须重新启动数据库,或者如果服务器角色从镜像服务器切换为主服务器,则会显示一条消息。
如果镜像系统中的某个服务器上发生声明失败,该服务器会将错误写入数据库服务器消息日志,然后退出。从而将它已失败通知给其它服务器,以便其它服务器采取适当的行动。
数据库镜像没有特殊的硬件或软件要求,且数据库服务器可在地理上分散的场所中运行。组成数据库镜像系统的数据库服务器既可以运行镜像数据库也可以运行非镜像数据库。同样,仲裁服务器可作为多个数据库镜像系统的仲裁服务器。
关于数据库镜像系统中每个数据库状态的详细信息存储在状态信息文件中。请参见状态信息文件。
有关在数据库镜像系统中涉及的升级 SQL Anywhere 或重建数据库的信息,请参见在数据库镜像系统中升级 SQL Anywhere 软件和数据库。
在某个服务器能够担当主服务器角色之前,必须要达到法定数目,也就是说,至少有一个其它服务器必须同意该服务器可以拥有数据库。如果镜像服务器不可用,但主服务器与仲裁服务器相互连接,则主服务器会继续提供对数据库的访问。如果主服务器未达到法定数目,则不再允许访问数据库。此时,它会停止镜像数据库,尝试将其重新启动,等待重新获得法定数目,然后再使数据库可用。
启动数据库镜像系统时,数据库服务器会经历一个启动过程,首先达到法定数目,然后再接受客户端连接。以下步骤描述了这一过程的典型事件顺序:
仲裁服务器等待服务器 1 和服务器 2。
服务器 1 寻找仲裁服务器或服务器 2。
服务器 1 连接到仲裁服务器。
服务器 1 与仲裁服务器协商,以便成为主服务器。
仲裁服务器和服务器 1 同意服务器 1 成为主服务器。
服务器 1 开始接受连接。
服务器 2 寻找服务器 1 和仲裁服务器。
服务器 2 连接到仲裁服务器和服务器 1。
服务器 2 请求法定数目。由于服务器 1 是主服务器,所以服务器 2 不会收到法定数目,于是它处于预备状态,等待来自服务器 1 的事务。
服务器 1 向服务器 2 发送事务。
使用数据库镜像时有以下限制:
需要网络数据库服务器 由于镜像涉及到数据库服务器之间的网络通信,所以必须使用网络数据库服务器 (dbsrv11);不能使用个人数据库服务器。
LOAD TABLE 语句 如果在基表上执行 LOAD TABLE 语句,则必须指定 WITH ROW LOGGING 或 WITH CONTENT LOGGING 作为语句的记录级别。这些子句允许将装载的数据记录在事务日志中,以便也将数据装载到镜像数据库中。如果不指定这些语句,则报告错误。请参见LOAD TABLE 语句和使用 LOAD TABLE 语句导入数据。
故障转移和预定事件 如果数据库有预定事件并发生了故障转移,则只要故障转移在事件的预定开始时间之前完成,该预定事件便会在镜像服务器上运行。否则,该事件的下一预定发生在镜像服务器上运行。
事务日志限制 使用数据库镜像时不能截断事务日志,因为这样可能会导致事务丢失。需要时可重命名事务日志。如果要删除旧事务日志,则可以使用预定事件将其删除,只要您确定不再需要这些事务日志。例如,可创建一个事件,该事件每天都运行,用于删除存留时间超过一周的事务日志副本。请参见数据库镜像和事务日志文件。
Web 服务器不能参与镜像系统 如果 SQL Anywhere 数据库服务器包含在数据库镜像系统中,则不能将该数据库服务器用作 Web 服务器,因为发生故障转移时,该数据库服务器的 IP 地址会发生变化。
使用数据库镜像时,在几乎所有的情况下,应用程序应该都能够以连接到非镜像数据库时的运行方式进行运行。但在开发用于数据库镜像的应用程序时还需考虑以下几点:
创建可重新连接到数据库的客户端(例如,发生故障转移时,用户可能需要关闭应用程序,然后再重新启动)。
在异步或异步满页模式下运行时,必须确定在发生故障转移且事务尚未提交到数据库时会发生什么情况。
镜像服务器取得数据库所有权后必须回退未完成的事务。事务越长,回退事务花费的时间就越多。故障转移的恢复速度由客户端的数量和需要回退的事务的长度来决定。如果您很关注恢复速度,就要尽可能地设计使用短事务的应用程序。
有关升级用于数据库镜像系统的 SQL Anywhere 的信息,包括应用 EBF,请参见在数据库镜像系统中升级 SQL Anywhere 软件和数据库。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |