* ­

三个SQL Server 2005的实例,如果在同一台机器上不允许端口相同。 ­

server1主数据库服务器        5011 ­

server2备份数据库服务器   5022 ­

jgj监视服务器                  5033 ­

数据库    DBMirror

­Server1上准备好要镜像的数据库,然后完整备份,将备份还原到Server2服务器上,注意使用NoRecovery选项 ­

­准备好以上后,开始执行代码: ­

另 可参考:http://www.cnblogs.com/huangcong/archive/2010/05/10/1731715.html

*/ ­

­

--创建端点 ­

--Server1主数据库服务器 ­

CREATE ENDPOINT DbMirroring ­

AS TCP(LISTENER_PORT=5011) ­

        FOR DATABASE_MIRRORING(ROLE=PARTNER,ENCRYPTION=SUPPORTED) ­

Go ­

Alter EndPoint DbMirroring STATE=STARTED ­

Go ­

­

--Server2备用服务器 ­

CREATE ENDPOINT DbMirroring ­

AS TCP(LISTENER_PORT=5022) ­

        FOR DATABASE_MIRRORING(ROLE=PARTNER,ENCRYPTION=SUPPORTED) ­

Go ­

Alter EndPoint DbMirroring STATE=STARTED ­

Go ­

­

--JGJ见证服务器 ,可以不要

CREATE ENDPOINT DbMirroring ­

        STATE=STARTED ­

AS TCP(LISTENER_PORT=5033) ­

        FOR DATABASE_MIRRORING(ROLE=WITNESS,ENCRYPTION=SUPPORTED) ­

go ­

­

--配置安全性 如果SQL服务启动帐户为域用户,或主从不在同一台机器上, ­必须设置

--Server1 ­

Use master ­

Go ­

Grant connect on endpoint::"DbMirroringEP" to "jgj\administrator" ­

GO ­

­--Server2 ­

Use master ­

Go ­

Grant connect on endpoint::"DbMirroringEP" to "jgj\administrator" ­

GO ­

­--jgj ­

Use master ­

Go ­

Grant connect on endpoint::"DbMirroringEP" to "jgj\administrator" ­

GO ­

­

--启动镜像 ­

--Server2 ­

ALTER DATABASE DBMirror ­

SET PARTNER=N'TCP://jgj:5011' ­

Go ­

­

--Server1 ­

ALTER DATABASE DBMirror ­

SET PARTNER=N'TCP://jgj:5022' ­

Go ­

­

--指定见证服务器端点 ­(1还是2上,还是全部,忘记了)

ALTER DATABASE DBMirror ­

SET WITNESS=N'TCP://jgj:5033' ­

GO ­

­

--配置数据库镜像事务安全级别 ­,1和2上都执行一下。

ALTER DATABASE DBMirror Set SAFETY Full ­

GO ­

­

­

--通过系统目录视图查看数据库镜像配置情况 ­

Select * from sys.database_mirroring_endpoints ­

Select * from sys.database_mirroring where database_id=(select database_id from sys.databases where name =’ DBMirror’) ­

­

--故障转移

1.自动故障转移:在使用高可用性的配置环境中,手动停止主体服务器,并删除主体数据库日志文件后,再启动主体服务器,观察主体和镜像服务器中数据库名后所显示的字样发生了变化,主体数据库变成了镜像数据库,镜像修复后成了主体数据库。  

 

2.手动故障转移:可以在无故障的情况下实现手动故障转移。在主体数据库中执行

ALTER DATABASE  DBMirror SET PARTNER FAILOVER;

 

3.强制故障转移: 通常应用于高性能模式中,高可用性镜像和见证服务器均不可用时,可以使用此方法快速修复,但此方法容易以导致数据的丢失。强制故障转移语句:

ALTER DATABASE  DBMirror SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS;

 

我们对上述采用了高可用性模式的实验切换到高性能模式并实行强制故障转移,执行下述语句:

               ALTER DATABASE DBMirror  SET WITNESS OFF;      ----在主服务器上执行,停用Witness

               GO

               ALTER DATABASE DBMirror  SET SAFETY OFF;         ----在主服务器上执行,关闭事务安全 

               GO

               ----然后停止主服务器的SQL server服务

               ALTER DATABASE DBMirror  SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS;  ----在镜像服务器上执行

               GO                                                                                                                                ----用于强制转移故障

               ALTER DATABASE DBMirror  SET SAFETY OFF;         ----在镜像服务器上执行后,镜像服务器开始提供服务,此句可以不用执行。

               GO

 

               执行上述操作后,镜像服务器开始提供服务,原主体服务器处于挂起状态,此时可以使用以下SQL语句来恢复挂起的数据库。

               ALTER DATABASE  DBMirror  SET PARTNER RESUME;           ----在新的主体服务器上执行

               GO

­

­

               自动重定向连接,使用ADO.NET或者SQL Native Client能够自动连接到故障转移后的伙伴,连接字符串中必须指定故障转移伙伴。

                ConnectionString=”Data Source=computerA;Failover Partner=computerB;

                Initial Catalog=DBMirror ;Integrated Security=True;”

--客户端重定向 ­