数据库镜像与SQL SERVER 2005版本
下表显示各种版本的SQL SERVER 2005支持的数据库镜像功能。
表2:数据库镜像和SQL SERVER 2005版本
|
数据库 镜像功能 |
企业版 |
开发人员版 |
标准版 |
工作组版 |
SQL Express |
|
镜像伙伴 |
√ |
√ |
√ |
|
|
|
见证服务器 |
√ |
√ |
√ |
√ |
√ |
|
Safety = FULL |
√ |
√ |
√ |
|
|
|
Safety = OFF |
√ |
√ |
|
|
|
|
故障转移后UNDO期间数据库可用性 |
√ |
√ |
√ |
|
|
|
并行redo |
√ |
√ |
|
|
|
|
数据库快照 |
√ |
√ |
|
|
|
少数几个数据库镜像功能要求使用SQL SERVER 2005企业版或者开发人员版:
◆高性能模式下safety设置为OFF (异步数据传输);
◆数据库快照;
◆使用多线程在镜像数据库上应用事务日志(并行REDO)。
SQL Express和工作组版本可以作为数据库镜像的见证服务器,但不能作为伙伴服务器。
数据库镜像动态
要深入理解SQL SERVER 2005 数据库镜像,了解数据库镜像会话如何变化将对您大有帮助。这一部分内容包括数据库镜像会话中不同的数据库状态、同步和异步的日志记录传输机制、以及故障转移次序。
配置和安全性
一旦确定了主服务器、镜像服务器、以及可选的见证服务器,设置数据库镜像主要包括三个步骤。
1.必须备份数据库并使用norecovery在镜像数据库上还原该数据库。
注意:在备份数据库并还原到镜像数据库之前,主数据库必须设置为FULL还原模型。如果必须在事务日志中传输Bulk-logged记录,那么数据库镜像将无能为力。镜像服务器必须有足够的磁盘空间以允许和主数据库同样的文件增长。如果希望在镜像服务器中创建数据库快照,那么还必须为快照提供额外的磁盘空间。
如果备份、拷贝、以及还原数据库耗费了相当长的时间,那么可能需要现在原始数据库上进行一次事务日志备份来控制日志的大小。但是,如果通过日志到日志的备份清理了日志记录,数据库镜像将无法初始化。因此必须在初始化数据库镜像之前在镜像数据库上按顺序恢复那些事务日志记录备份。
2.参与数据库镜像会话的服务器必须彼此信任。对于本地通信而言,例如一个域内的通信,信任意味着SQL Server实例登陆账号必须有权限连接到其他镜像服务器,也包括endpoints。首先在每个服务器上使用CREATE LOGIN命令,然后使用GRANT CONNECT ON ENDPOINT命令(参阅" in SQL Server Books Online中“Example of Setting Up Database Mirroring Using Windows Authentication”)
非信任域之间的通信必须使用证书。如果使用CREATE CERTIFICATE语句创建自签名的证书,基本上所有数据镜像证书的要求都可以满足。确认在CREATE CERTIFICATE语句中将证书标记为ACTIVE FOR BEGIN_DIALOG。
3.下一步是创建数据库镜像的endpoints。创建endpoints要求您必须具有SQL Server instance的系统管理员权限。必须在每台服务器上创建专门用于数据库镜像的endpoints. 创建endpoints最简单的方式就是使用Configure Database Mirroring Security向导,可以在Database Properties对话框中Mirroring页面上单击Configure Security按钮启动该向导。Configure Security对话框会在构造和执行CREATE ENDPOINT命令之前,提示您输入正确的计算机名称和端口号,以及可选的登陆帐号。(参阅SQL Server Books Online中 “How to: Create a Mirroring Endpoint (Transact-SQL)”)
如果在域中设置数据库镜像,并且所有的SQL Server实例使用相同的服务帐号和密码,那么就不需要在每个服务器上创建登陆帐号。类似的,如果在工作组中,并且所有的SQL Server实例使用相同的服务帐号和密码,也不需要在每个服务器上创建登陆帐号。设置endpoints时将Configure Database Mirroring Security向导中的登陆帐号保留为空就可以了。
每个数据库endpoint必须指定服务器上一个唯一的端口号。如果使用不同服务器上的SQL Server实例,那么这些端口号可以是相同的。Configure Database Mirroring Security向导会自动建议您使用5022作为端口号。如果任何SQL Server实例运行在同一台服务器上,那么每个实例的端口号必须唯一,所有的镜像端口号也必须唯一。
假设在高可用镜像会话中有三台服务器。Server A是主服务器,server B是镜像服务器,server W作为见证服务器。对于server A而言,下面的命令在5022端口创建endpoint:
|
注意:角色被指定为PARTNER,这样该服务器可以担当数据库镜像的主服务器或者镜像服务器。在server B上执行相同的命令。因为server B是独立物理服务器上的SQL Server实例,因此可以使用相同的端口号。然后对于server W,使用
|
注意:对于server W,角色被指定为WITNESS。
默认不启动endpoint。接下来在每个服务器上使用下面的命令来启动endpoint:
|
可以在CREATE ENDPOINT命令中插入可选的STATE选项。在每台服务器上反复执行该选项。
使用CREATE ENDPOINT创建endpoint时,可以通过协议特定的参数根据IP地址来限制对endpoint的访问。结合RESTRICT_IP with ALL选项和EXCEPT_IP加上那些允许访问的特殊IP地址可以对一组IP地址作限制。(参阅SQL Server Books Online中的See “CREATE ENDPOINT”)。
查询每个服务器的sys.database_mirroring_endpoints目录视图来检查数据库镜像的endpoints:
|
