SQLServer2005数据库镜像搭建走了很多弯路,很多时候卡在一个错误上几天,从打算做到最后成功完成,用了差不多一个月,如下是整理的全过程,还有一些错误解决可能没有记录上,如下记录在另外几台机子上都成功搭建完成。肯定能成功的,就是需要耐心,有错误一个一个地解决。
如下是操作步骤:
一、环境准备(主机和镜像机都一样)
(1)创建相同用户名和密码的windows用户并给予管理员权限,即两台机子操作系统的登录名和密码相同(不能为空)。然后进入新创建的用户系统。
(2)使用SQL数据库版本相同
(3)相同的电脑的DNS尾码,右键点击【计算机】选择属性,选择计算机名称
点击【其他】按钮,将DNS尾码设置成相同的值,如it.com,电脑名称若为
primary,则完整的电脑名称就为primary.it.com,将镜像server的DNS尾码设
置成相同值,需要重启计算机
(4)在C:\WINDOWS\system32\drivers\etc路径内hosts文件的最后添加IP和完整主机和镜像机的电脑名称
(5) 开始——Microsoft SQL Server 2005——配置管理工具——SQL Server配置管理器,点击左边的SQL Server2005网络配置——MSSQLSERVER的协议,启用右边的NamePiges和TCP/IP选项;
开始——Microsoft SQL Server 2005——配置管理工具——SQL Server外围应用配置器——服务和连接的外围配置器——MSSQLSERVER——Database Engine——远程服务,点击右边的“本地连接和远程连接”,选“同时使用TCP/IP和NamePiges”
(6)开始——Microsoft SQL Server 2005——配置管理工具——SQL Server配置管理器,点击左边的SQL Server2005服务,右击右边的SQL Server(MSSQLSERVER)重新启动
(7)登陆数据库,服务器名称填写IP,身份认证选Windows身份认证,点开“安全性”,右击登录名——新建登录名——常规——搜索——高级——立即查找,找到新创建的用户名——确定,选服务器角色(左上角)——sysadmin选项勾上
——确定
二、备份操作
(1)在主机上:恢复模式为FULL(右击要镜像的数据库,属性),将需进行数据库镜像的数据库进行两次备份,目标数据库填写数据库名称,备份类型分别为“完整”和“事务日志”。
(2)在镜像机上:将备份好的bak文件在镜像机上进行还原,目标数据库填写数据库名称,点开“选项”(左上角),把“覆盖现有数据库”和“不对数据库进行任何操作。。。。其他事务日志(A)”勾上。(还原成功的数据库显示正在还原...)
(3)在主机上:逐条执行以下语句(第个go为一个语句):其中在主机和镜像机上生成证书后要把证书文件相互复制过去
Use master
Createmasterkey encryption by password='********';--创建数据库主密
Go
Createcertificate host_A_certwithsubject ='host_A_certificate',
start_date='05/05/2015',expiry_date='12/12/2027';--创建主服务器SQL证书‘host_A_cert’,过期时间‘’,默认年
go
Createendpoint
state=startedasTCP(listener_port=5022,Listener_IP=all)
for Database_Mirroring(AUTHENTICATION=CERTIFICATE host_A_cert,
ENCRYPTION=REQUIRED ALGORITHMAES,ROLE=PARTNER);--创建依附与证书的镜像端点'Endpoint_Mirroring',默认端口
go
BACKUPCERTIFICATE host_A_certTOFILE='D:\host_A.cer'--将证书备份到D盘
Go
将备份好的证书复制一份到镜像机的D盘目录下
(4)在镜像机上:逐条执行以下语句:
Use master Create masterkeyencryption by password='********';--创建数据库主密钥
Go
Createcertificate host_B_certwithsubject ='host_B_certificate',
start_date='05/05/2015',expiry_date='12/12/2017';--创建主服务器SQL证书‘host_A_cert’,过期时间‘’,默认年
go
Createendpoint
state=startedasTCP(listener_port=5022,Listener_IP=all)
for Database_Mirroring(AUTHENTICATION=CERTIFICATE host_B_cert,
ENCRYPTION=REQUIRED ALGORITHMAES,ROLE=PARTNER);--创建依附与证书的镜像端点'Endpoint_Mirroring',默认端口
go
BACKUPCERTIFICATE host_B_certTOFILE='D:\host_B.cer'--将证书备份到D盘
Go
将备份好的证书复制一份到主机的D盘目录下
(5)在主机上:逐条执行以下语句:
Createlogin host_B_loginwithpassword='********'--为备机创建一个登录帐号‘host_B_login’
go
createuser host_B_userforloginhost_B_login;--为帐号‘host_B_login’创建登录名
go
Createcertificate
authorization
from file='D:\host_B.cer'--将账户与证书关联起来
go
grant connectonendpoint::Endpoint_Mirroringto[host_B_login];--添加Connect权限
go
Createlogin host_A_loginwithpassword='********'
go
createuser host_A_userforCertificatehost_A_cert;
go
grant connectonendpoint::Endpoint_Mirroringto [host_A_login];
go
(6)在镜像机上:逐条执行以下语句:
createlogin host_A_loginwithpassword='********'--为备机创建一个登录帐号‘host_A_login’
go
createuser host_A_userforloginhost_A_login;--为帐号‘host_B_login’创建登录名
go
Createcertificate
authorization
from file='D:\host_A.cer'--将账户与证书关联起来
go
grant connectonendpoint::Endpoint_Mirroringto[host_A_login];--添加Connect权限
go
Createlogin host_B_loginwithpassword='********'
go
createuser host_B_userforCertificate host_B_cert;
go
grant connectonendpoint::Endpoint_Mirroringto [host_B_login];
go
(7)
在主机上:
右击要镜像的数据库——任务——镜像——配置安全性——下一步——否(有见证服务器就选是)——下一步——下一步——选镜像机IP(Windows身份认证)——下一步——完成——开始镜像
(8) 成功后如下图所示:
三、测试镜像
--取消正在还原的状态 事务是否回滚
RESTOREDATABASE 数据库名称 WITH RECOVERY
RESTOREDATABASE 数据库名称 WITHNORECOVERY
--正在恢复 用如下语句运行后变为正在还原
alter database镜像的数据库set partner OFF
1.主体与镜像转换
--主机
use master;
alter database 数据库名称 set partner failover;
执行成功后原主体数据库会显示正在还原,备机数据库显示主体正在同步字样
2. 测试主备切换
主机崩溃,强制备机当主机,原主机恢复后再切换回去
主机A
备机B
此时,在B机上执行
use master;
alter database 数据库名称 set partner FORCE_SERVICE_ALLOW_DATA_LOSS; --强制接收
停止主机A的SQL SERVER 服务(比如断电),此时备机上的数据库会显示正在恢复状态,大概持续几十秒,最后变成
dataName(主体,已断开链接),即现在的镜像B可以用来充当主机了
假如现在有业务往数据库里插也是能成功的
现在把原主机A恢复(通电),然后在B机里操作
use master;
alter database 数据库名称 set partner resume;
此时A机是作为镜像的,B机是作为主机的,要再切换一下,则再在B上执行
alter database 数据库名称 set partner failover;