目录

一、目标...2

二、前提条件、限制和建议...2

三、设置概述...2

四、安装Sql Server 2008 enterprise X64.3

4.1、安装.NET3.5.3

4.2、安装时选择全新SQL Server独立安装...4

4.3、选定功能组件,注意安装目录与其他节点保持一致...4

4.4、使用默认实例名称,或者与其他节点相同...5

4.5、设定服务启动账户...5

4.6、设置混合身份登录、制定SQL Server管理员...6

4.7、点击下一步,等待安装完成。在其他节点按照同样方式安装SQL Server.7

五、配置数据库镜像前的数据库准备...7

5.1、确认数据库使用了完整恢复模式...7

5.2、备份主体数据库...7

5.3、镜像节点还原...8

5.4、进行完整日志备份...9

5.5、事务日志备份在镜像数据库上还原。...10

5.6、在还原选项中选中NORECOVERY,执行还原操作。...11

六、配置镜像连接...11

6.1、 配置出站连接...12

6.1.1为主机配置出站连接:...12

6.1.2为镜像服务器配置出站连接...13

6.1.3为见证服务器配置出站连接...13

6.2、 配置入站连接...14

6.2.1为主体服务器配置入站连接...14

6.2.2为镜像服务器配置入站连结...15

6.2.3为见证服务器配置入站连接...17

6.3、 配置镜像数据库(可选)...18

6.4、 配置镜像伙伴...19

6.4.1在镜像服务器上配置...19

6.4.2在主体服务器上配置...19

6.4.3在主体服务器上配置见证服务器...19

6.7镜像成功之后验证...19

6.7.1检查数据库状态...20

6.7.2、监视镜像...21

6.7.4、主镜像切换...22

七、注意事项...23

八、删除镜像的方法...24

 

 SQLServer数据库镜像配置

一、目标

  利用SqlServer 2008 enterprise X64,建立异步(高性能)镜像数据库,同时建立见证服务器实现自动故障转移。

二、前提条件、限制和建议

Ø  伙伴双方(主体服务器和镜像服务器)及见证服务器必须使用相同版本的Sql Server

Ø  如使用见证服务器,择须确保其系统上安装 Sql Server 2005或更高版本

Ø  在镜像服务器上创建镜像数据库时,确保制定相同的数据库名称WITH NOREBOVORY来还原主题数据库备份。另外,还必须通过 WITH NORECOVERY 应用在该备份执行后创建的所有日志备份。如果数据库镜像已经停止,则必须将对主体数据库执行的所有后续日志备份应用到镜像数据库中,然后才可以重新启动镜像。

Ø  跨数据库事务和分布式事务均不支持数据库镜像

Ø  镜像的数据库路径尽量与主体服务相同,如果主体服务器CPU利用率在50%以上,择不建议配置自动故障转移

Ø  建议配置高效稳定的网络环境

三、设置概述

l  确保所有数据库用户在镜像服务器上都有登录名

l  在向另一个服务器实例提供数据库之前,您必须在该服务器实例上建立数据库用于新服务器实例时所需的环境

l  使用 NORECOVERY 还原最近的主体数据库完整备份,以创建镜像数据库。确保执行备份时主体数据库已使用完整恢复模式。镜像数据库和主体数据库名称必须相同,并且它们在数据库镜像会话中不能被重命名。

l  设置安全性并启动数据库镜像会话。可以使用 Transact-SQL 或数据库镜像向导来设置镜像。

l  (可选)将见证服务器添加到会话。

四、安装Sql Server 2008 enterprise X64

4.1、安装.NET3.5

SQLServer 2008 需要.NET 3.5支持,所以安装之前需要安装.NET3.5。在服务器管理的功能单元中,添加.NET Framework 3.5.1功能

 

4.2、安装时选择全新SQL Server独立安装

4.3、选定功能组件,注意安装目录与其他节点保持一致

4.4、使用默认实例名称,或者与其他节点相同

4.5、设定服务启动账户

设定服务启动账户,这里配置所有,服务均使用域管理启动(非域环境无所谓)。

4.6、设置混合身份登录、制定SQL Server管理员

4.7、点击下一步,等待安装完成。在其他节点按照同样方式安装SQL Server

五、配置数据库镜像前的数据库准备

5.1、确认数据库使用了完整恢复模式

打开SQL Server Management,在VirtualManagerDB数据库(将要镜像的数据库)上点击右键选择属性,定位到选项页,将恢复模式改为“完整”

5.2、备份主体数据库

在VirtualManagerDB数据库上点击右键——任务——备份,备份类型选择完整

5.3、镜像节点还原

将备份文件拷贝到镜像节点,执行还原。右键点击数据库,选择还原数据库选定备份文件,写入还原数据库名称,注意此数据库名称必须与主体服务器数据库名称一致。即VirtualManagerDB。

   点击选项页,勾选覆盖现有数据库。选择NORECOVERY模式

5.4、进行完整日志备份

执行backup LOGVirtualManagerDB  to Disk = 'c:\backup\vlogback.bak'

(也可以在界面中备份日志,同数据库备份)

5.5、事务日志备份在镜像数据库上还原。

镜像数据库上,点击右键——任务——还原——事务日志。

5.6、在还原选项中选中NORECOVERY,执行还原操作。

六、配置镜像连接

如果服务器在同一个域中,参照方法(

),需要注意的是,使用的域账号需要同时拥有访问主、镜像服务器的权限;如果服务器不在一个域中使用证书设置数据库镜像(基本是必须的),下面介绍的是非域环境下的镜像配置。

数据库镜像是将数据库事务处理从一个SQL Server数据库移动到不同SQL Server环境中的另一个SQL Server数据库中。镜像不能直接访问;它只用在错误恢复的情况下才可以被访问。

见证服务器是第三个SQL Server 2005/2008运行实例,它是在判断什么时候进行错误恢复的时候,用于基本和镜像之间内部交流。只有当你想实现自动错误恢复的时候用到这个选项。它实现了2比1投票的能力,当我的一个组件不可达,并因此需要进行错误恢复的时候。见证服务器只有在你想实现自动错误恢复的时候才需要用到。见证服务器可以不配置,相关配置略过即可。

6.1、配置出站连接

主要工作是为服务器实例制作证书:

6.1.1为主机配置出站连接:

/********************************************************

此脚本在主体服务器执行

********************************************************/

USE master;

--DROP MASTER KEY

CREATE MASTER KEY ENCRYPTION BY PASSWORD ='OA@asp.net';

GO

--为此服务器实例制作一个证书。

--DROP CERTIFICATE oa-anquan_cert

CREATE CERTIFICATE oa-anquan_cert

WITH SUBJECT = 'oa_anquancertificate',START_DATE = '05/01/2010

,EXPIRY_DATE = '01/01/2099';

GO

--使用该证书为服务器实例创建一个镜像端点。

--DROP ENDPOINT Endpoint_Mirroring
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP (
LISTENER_PORT=5022
, LISTENER_IP = ALL
)
FOR DATABASE_MIRRORING (
AUTHENTICATION = CERTIFICATE oa-anquan_cert
, ENCRYPTION = REQUIRED ALGORITHM AES
, ROLE = PARTNER
);
GO

--备份oa-anquan 证书,并将其复制到其他机器,将 D:\dbmirror\oa-anquan_cert.cer 复制到 oa-canoe\oa-tjcfw。

BACKUP CERTIFICATE oa-anquan_cert TO FILE ='D:\dbmirror\oa-anquan_cert.cer';

GO

6.1.2为镜像服务器配置出站连接

/***********************************************

在镜像服务器执行此脚本

***********************************************/

USE master;

--DROP MASTER KEY

CREATE MASTER KEY ENCRYPTION BY PASSWORD ='OA@asp.net';

GO

--为 oa-canoe 服务器实例制作一个证书。

--DROP CERTIFICATE oa-canoe_cert

CREATE CERTIFICATE oa-canoe_cert

WITH SUBJECT = 'oa-canoe certificate fordatabase mirroring',START_DATE = '05/01/2010'

,EXPIRY_DATE = '01/01/2099';

GO

--在 oa-canoe 中为服务器实例创建一个镜像端点。

--DROP ENDPOINT Endpoint_Mirroring

CREATE ENDPOINT Endpoint_Mirroring

STATE = STARTED

AS TCP (

LISTENER_PORT=5022

, LISTENER_IP = ALL

)

FOR DATABASE_MIRRORING (

AUTHENTICATION = CERTIFICATE oa-canoe_cert

, ENCRYPTION = REQUIRED ALGORITHM AES

, ROLE = PARTNER

);

GO

--备份 oa-canoe 证书,将D:\dbmirror\oa-canoe_cert.cer 复制到oa-anquan\oa-tjcfw。

BACKUP CERTIFICATE oa-canoe_cert TO FILE ='D:\dbmirror\oa-canoe_cert.cer';

GO

6.1.3为见证服务器配置出站连接

/****************************

见证服务器执行

*****************************/

--ALTER DATABASE MirrorDB SET PARTNER OFF

USE master;

--DROP MASTER KEY

CREATE MASTER KEY ENCRYPTION BY PASSWORD ='OA@asp.net';

GO

--为此服务器实例制作一个证书。

--DROP CERTIFICATE oa-tjcfw_cert

CREATE CERTIFICATE oa-tjcfw_cert

WITH SUBJECT = 'oa-tjcfwcertificate',START_DATE = '05/01/2010'

,EXPIRY_DATE = '01/01/2099';

GO

--使用该证书为服务器实例创建一个镜像端点。

--DROP ENDPOINT Endpoint_Mirroring

CREATE ENDPOINT Endpoint_Mirroring

STATE = STARTED

AS TCP (

LISTENER_PORT=5022

, LISTENER_IP = ALL

)

FOR DATABASE_MIRRORING (

AUTHENTICATION = CERTIFICATE oa-tjcfw_cert

, ENCRYPTION = REQUIRED ALGORITHM AES

, ROLE = WITNESS

);

GO

--备份 oa-tjcfw 证书,并将其复制到其他系统,即 oa-canoe\oa-anquan。

BACKUP CERTIFICATE oa-tjcfw_cert TO FILE ='D:\dbmirror\oa-tjcfw_cert.cer';

GO

注意:证书必须指定过期时间,如果未指定,则将 EXPIRY_DATE 设置为 START_DATE 一年之后的日期。

6.2、配置入站连接

6.2.1为主体服务器配置入站连接

--为入站连接配置oa-anquan

--在oa-anquan 上为 oa-canoe 创建一个登录名。

USE master;

--DROP LOGIN oa-canoe_login

CREATE LOGIN oa-canoe_login WITH PASSWORD ='OA@asp.net';

GO

--创建一个使用该登录名的用户。

--DROP USER oa-canoe_user

CREATE USER oa-canoe_user FOR LOGINoa-canoe_login;

GO

--使证书与该用户关联。

--DROP CERTIFICATE oa-canoe_cert

CREATE CERTIFICATE oa-canoe_cert

AUTHORIZATION oa-canoe_user

FROM FILE = 'D:\dbmirror\oa-canoe_cert.cer'

GO

--授予对远程镜像端点的登录名的CONNECT 权限。

GRANT CONNECT ONENDPOINT::Endpoint_Mirroring TO [oa-canoe_login];

GO

--在oa-anquan 上为 oa-tjcfw 创建一个登录名。

USE master;

--DROP LOGIN oa-tjcfw_login

CREATE LOGIN oa-tjcfw_login WITH PASSWORD ='OA@asp.net';

GO

--创建一个使用该登录名的用户。

--DROP USER oa-tjcfw_user

CREATE USER oa-tjcfw_user FOR LOGINoa-tjcfw_login;

GO

--使证书与该用户关联。

--DROP CERTIFICATE oa-tjcfw_cert

CREATE CERTIFICATE oa-tjcfw_cert

AUTHORIZATION oa-tjcfw_user

FROM FILE = 'D:\dbmirror\oa-tjcfw_cert.cer'

GO

--授予对远程镜像端点的登录名的CONNECT 权限。

GRANT CONNECT ONENDPOINT::Endpoint_Mirroring TO [oa-tjcfw_login];

GO

USE master;

--DROP LOGINoa-anquan_login

CREATE LOGINoa-anquan_login WITH PASSWORD='OA@asp.net';

GO

--创建一个使用该登录名的用户。

--DROP USERoa-anquan_user

CREATE USERoa-anquan_user FORCERTIFICATEoa-anquan_cert;

GO

--授予对远程镜像端点的登录名的CONNECT 权限。

GRANT CONNECT ONENDPOINT::Endpoint_Mirroring TO [oa-anquan_login];

GO

6.2.2为镜像服务器配置入站连结

--为入站连接配置 oa-canoe

--在 oa-canoe 上为oa-anquan 创建一个登录名。

USE master;

--DROP LOGINoa-anquan_login

CREATE LOGINoa-anquan_login WITH PASSWORD ='OA@asp.net';

GO

--创建一个使用该登录名的用户。

--DROP USERoa-anquan_user

CREATE USERoa-anquan_user FORLOGINoa-anquan_login;

GO

--使证书与该用户关联。

--DROP CERTIFICATEoa-anquan_cert

CREATE CERTIFICATEoa-anquan_cert

AUTHORIZATIONoa-anquan_user

FROM FILE ='D:\dbmirror\oa-anquan_cert.cer'

GO

--授予对远程镜像端点的登录名的CONNECT 权限。

GRANT CONNECT ONENDPOINT::Endpoint_Mirroring TO [oa-anquan_login];

GO

--在 oa-canoe 上为 oa-tjcfw 创建一个登录名。

USE master;

--DROP LOGIN oa-tjcfw_login

CREATE LOGIN oa-tjcfw_login WITH PASSWORD ='OA@asp.net';

GO

--创建一个使用该登录名的用户。

--DROP USER oa-tjcfw_user

CREATE USER oa-tjcfw_user FOR LOGINoa-tjcfw_login;

GO

--使证书与该用户关联。

--DROP CERTIFICATE oa-tjcfw_cert

CREATE CERTIFICATE oa-tjcfw_cert

AUTHORIZATION oa-tjcfw_user

FROM FILE = 'D:\dbmirror\oa-tjcfw_cert.cer'

GO

--授予对远程镜像端点的登录名的CONNECT 权限。

GRANT CONNECT ONENDPOINT::Endpoint_Mirroring TO [oa-tjcfw_login];

GO

--在 oa-canoe 上为 oa-canoe 创建一个登录名。

USE master;

--DROP LOGIN oa-canoe_login

CREATE LOGIN oa-canoe_login WITH PASSWORD ='OA@asp.net';

GO

--创建一个使用该登录名的用户。

--DROP USER oa-canoe_user

CREATE USER oa-canoe_user FOR CERTIFICATEoa-canoe_cert;

GO

--授予对远程镜像端点的登录名的CONNECT 权限。

GRANT CONNECT ONENDPOINT::Endpoint_Mirroring TO [oa-canoe_login];

GO

6.2.3为见证服务器配置入站连接

--为入站连接配置 oa-tjcfw

--在 oa-tjcfw 上为 oa-canoe 创建一个登录名。

USE master;

--DROP LOGIN oa-canoe_login

CREATE LOGIN oa-canoe_login WITH PASSWORD ='OA@asp.net';

GO

--创建一个使用该登录名的用户。

--DROP USER oa-canoe_user

CREATE USER oa-canoe_user FOR LOGINoa-canoe_login;

GO

--使证书与该用户关联。

--DROP CERTIFICATE oa-canoe_cert

CREATE CERTIFICATE oa-canoe_cert

AUTHORIZATION oa-canoe_user

FROM FILE = 'D:\dbmirror\oa-canoe_cert.cer'

GO

--授予对远程镜像端点的登录名的CONNECT 权限。

GRANT CONNECT ONENDPOINT::Endpoint_Mirroring TO [oa-canoe_login];

GO

--在 oa-tjcfw 上为oa-anquan 创建一个登录名。

USE master;

--DROP LOGIN oa-anquan_login

CREATE LOGIN oa-anquan_login WITH PASSWORD= 'OA@asp.net';

GO

--创建一个使用该登录名的用户。

--DROP USER oa-anquan_user

CREATE USER oa-anquan_user FOR LOGINoa-anquan_login;

GO

--使证书与该用户关联。

--DROP CERTIFICATE oa-anquan_cert

CREATE CERTIFICATE oa-anquan_cert

AUTHORIZATION oa-anquan_user

FROM FILE ='D:\dbmirror\oa-anquan_cert.cer'

GO

--授予对远程镜像端点的登录名的CONNECT 权限。

GRANT CONNECT ONENDPOINT::Endpoint_Mirroring TO [oa-anquan_login];

GO

6.3、配置镜像数据库(可选)

通常来说数据库都将会有若干个用户作为访问数据库的用户,并且数据库会有相应的登录名,但是在备机中缺少与之相对应的登录名,例如某业务系统使用’oateam’作为登录名访问数据库,但是在备机中没有’oateam’这个登录名,因此一旦主备切换,业务系统就无法登录数据库了,这种情况称为"孤立用户"

在主数据库中执行如下语句:

USE master;

select sid,name from syslogins;

查找出相应的用户名和sid,例如:上述的’oateam’

在备数据库中执行如下语句:

USE master;

exec sp_addlogin

@loginame = '<LoginName>',

@passwd = '<Password>',

@sid = <sid> ;

这里的’LoginName’即主数据库中的登录名,sid即是上述通过SQL语句查找出的sid。

例如,查询得到的sid和name如下所示。

sid name

---------------------------------------------------

50x074477739DCA0E499C29394FFFC4ADE4 oateam

则建立登录名的SQL语句:

USE master;

exec sp_addlogin

@loginame = 'oateam’,

@passwd = ‘OA@asp.net’,

@sid = 0x074477739DCA0E499C29394FFFC4ADE4;

到此为止可以认为备机数据库的环境已经与主机同步了

在主体服务器上备份数据库,镜像只支持完全恢复模式,在备份数据库之前检查恢复的模式,需要同时完整备份数据库和事务日志。

USE MASTER; 
GO 
BACKUP DATABASE Credit 
TO DISK = 'D:\dbmirror\Credit.bak' 
WITH INIT 
GO 
BACKUP LOG Credit 
TO DISK = 'D:\dbmirror\Credit_log.bak' 
WITH INIT 
GO

将Credit.bak、Credit_log.bak复制到oa-canoe上,复制到oa-canoe的镜像服务器实例上以NORECOVERNY选项进行恢复.

注意:这里数据库必须备份两次,一次全备份和一次事务日志备份,在Mirror机上还原数据库必须使用NORECOVERNY选项进行恢复.

6.4、配置镜像伙伴

6.4.1在镜像服务器上配置

--在 oa-canoe 的镜像服务器实例上,将oa-anquan上的服务器实例设置为伙伴(使其成为初始主体服务器实例)。

ALTER DATABASE Credit

SET PARTNER = 'TCP://10.6.11.84:5022';

GO

6.4.2在主体服务器上配置

--必须要在镜像数据库中先设置好伙伴后,才能在主体服务器执行

--在oa-anquan 的主体服务器实例上,将oa-canoe 上的服务器实例设置为伙伴(使其成为初始镜像服务器实例)。

ALTER DATABASE Credit

SET PARTNER = 'TCP://10.6.11.224:5022';

GO

6.4.3在主体服务器上配置见证服务器

--设置见证服务器,在oa-anquan 的主体服务器实例上,将oa-tjcfw 上的服务器实例设置为见证(使其成为初始见证服务器实例)

ALTER DATABASE Credit SET WITNESS =N'TCP://10.6.11.74:5022';

GO

6.7镜像成功之后验证

镜像成功之后,画面如下


配置成功后可以,镜像数据库是不可以操作的,可以新建一个数据快照验证数据是否同步成功。

6.7.1检查数据库状态


  对于镜像数据库,不可以删除,否则将出现如下错误信息:


6.7.2、监视镜像



6.7.4、主镜像切换

6.7.4.1 界面操作



  然后,再检查主体数据库与镜像数据库的状态变化,以及通过“数据库镜像监视器”查看镜像的状态。

6.7.4.2 脚本切换

见证服务器不是必须配置项,如果没有配置见证服务器,除了在ssms中操作主镜像切换还可以手动切换,方法如下:

主机崩溃,强制备机当主机,原主机恢复后再切换回去

主机A

备机B

停止主机A的SQL SERVER 服务(比如断电),此时备机上的数据库会显示正在恢复状态,大概持续几十秒

此时,在B机上执行

use master;

alter database backuptest set partnerFORCE_SERVICE_ALLOW_DATA_LOSS; --强制接收

最后变成backuptest(主体,已断开链接),即现在的镜像B可以用来充当主机了

假如现在有业务往数据库里插也是能成功的

现在把原主机A恢复(通电),然后在B机里操作

use master;

alter database backuptest set partnerresume;

此时A机是作为镜像的,B机是作为主机的,要再切换一下,则再在B上执行

alter database backuptest set partnerfailover;

 

七、注意事项

n  镜像相关服务器上的SQLSERVER 版本必须一致。

n  在实施镜像之前,一定要将主数据库完整备份到镜像数据库,这里一定要备份两次,一次数据库备份和一次事务日志备份。

n  数据帐号的孤立帐号处理,具体参见配置镜像数据库。

n  如果不是在域帐户间实施镜像,则一定需要为服务器制作证书,证书一定要指定过期时间,如果没有指定,默认的过期时间是开始时间开始计算,一年的有效期。

n  推荐使用64位版本的SQLServer 2008,64位的服务器可以提升服务器的性能和利用率,在32位的系统中,每个服务器实例,数据库最多支持10个数据库。

n  系统数据库,如master,msdb等无法实施镜像。

n  一旦建立镜像,镜像数据库就只作为主数据库的冗余备份使用。

另外:如果配置过程中有错误信息,可以查看该储存过程exec xp_readerrorlog;

八、删除镜像的方法

u  查看终端点 select* from sys.endpoints

u  删除某终端点(终端点不带引号)  drop endpoint <endpoint_name>

u  删除证书  在master |Security | Certificates

u  删除用户  在master |User

u  然后可以删除登录名 drop login <login_name>

u  修改masterkey  :   alter master key drop encryption by service master key

u  删除masterkey  : drop master key

u  删除镜像的命令:alter databse <dbname> set partner off

在所有镜像准备工作已完毕,准备开始做镜像的时候,一定要先在镜像服务器上执行 alter database <dbname> set partner='TCP://主体服务器IP : 端口号(通常为5022)'