一、先简单介绍下sql server 自带的双机的热备的几种方案
1,发布--订阅
利用sql server 复制功能实现主机发布数据库,备机订阅数据库,做到数据热备
2,日志传送
SQLServer数据库引擎中,使用日志传送将事务日志不间断地从一个数据库(主数据库)发送到另一个数据库(辅助数据库)。不间断地备份主数据库中的事务日志,然后将它们复制并还原到辅助数据库,这将使辅助数据库与主数据库基本保持同步。目标服务器充当备份服务器,并可以将查询处理从主服务器重新分配到一个或多个只读的辅助服务器。日志传送可与使用完整或大容量日志恢复模式的数据库一起使用。
3,数据库镜像
利用sql server 镜像功能在备机建立镜像后,实现主机和备机数据热备。数据库镜像是用于提高数据库可用性的主要软件解决方案。镜像基于每个数据库实现,并且只适用于使用完整恢复模式的数据库。数据库镜像维护一个数据库的两个副本,这两个副本必须驻留在不同的SQL Server数据库引擎实例(服务器实例)上。通常,这些服务器实例驻留在不同位置的计算机上。其中一个服务器实例使数据库服务于客户端(“主体服务器”),而另一个服务器实例则充当热备用或备用服务器(“镜像服务器”),具体取决于镜像会话的配置和状态。同步数据库镜像会话时,数据库镜像提供了热备用服务器,可支持在已提交事务不丢失数据的情况下进行快速故障转移。
二、数据库镜像热备方法
注意点:
1.数据库的模式要是完整模式。
2.要对数据库完整备份和事务日志备份,分别还原到镜像库上,使用NORECOVERY模式。
3.镜像数据库是不允许删除和操作,即便查看属性也不行。
4.先删除端点,再删除证书,再删除主密钥。
5.只有是同步模式的时候,才能手动故障转移,异步模式不能手动故障转移。
主机:192.168.11.253
备机:192.168.11.251
(1),先创建密匙,主机备机都要下面执行代码
use master --创建密匙
go
create master key encryption by password='888888'
go
select * from sys.key_encryptions --查询密匙
(2),创建证书,
主机执行
use master --主机证书为:DBA
go
create certificate DBA_cert with subject='DBA certificate',expiry_date='2099-1-1'
go
备机执行
use master --主机证书为:DBB
go
create certificate DBB_cert with subject='DBB certificate',expiry_date='2099-1-1'
go
select * from sys.certificates --查看证书
(3),创建主库镜像和端点
主机执行
use master
go
create endpoint Ticket_Mirroring --端点为Ticket_Mirroring ,端口号:5022,镜像为DBA
state=started
as tcp ( listener_port = 5022,listener_ip = all )
for database_mirroring ( authentication = certificate DBA_cert, encryption = required algorithm aes, role = all )
go
备机执行
create endpoint Ticket_Mirroring --端点为Ticket_Mirroring ,端口号:5022,镜像为DBB
state=started
as tcp ( listener_port = 5022,listener_ip = all )
for database_mirroring ( authentication = certificate DBB_cert, encryption = required algorithm aes, role = all )
go
(4),备份密匙
主机执行
use master --备份密匙
go
backup certificate DBA_cert to file = 'D:\cert\DBA_cert.cer' --密匙路径
go
备机执行
use master --备份密匙
go
backup certificate DBB_cert to file = 'D:\cert\DBA_cert.cer' --密匙路径
go
(5),复制交换密匙,保证在主机和备机的D:\cer下路径都有DBA_cert和DBB_cert文件
(6)创建登录名,和证书关联,主机创建备机,备机创建主机
主机执行
use master
go
create login DBB_login with password='888888'
go
备机执行
use master
go
create login DBA_login with password='888888'
go
(7),创建使用该登录名的用户,主机创建备机,备机创建主机
主机执行
use master
go
create user DBB for login DBB_login
go
备机执行
use master
go
create user DBA for login DBA_login
go
(8),证书与用户关联,主机关联备机,备机关联主机
主机执行
use master
go
create certificate DBB_cert
authorization DBB
from file='D:\cert\DBB_cert.cer'
go
备机执行
use master
go
create certificate DBA_cert
authorization DBA
from file='D:\cert\DBA_cert.cer'
go
(9),授予对远程数据库端点的登录名的CONNECT权限,主授权备机,备机授权主机
主机执行
use master
go
GRANT CONNECT ON ENDPOINT::Ticket_Mirroring TO [DBB_login];
go
备机执行
use master
go
GRANT CONNECT ON ENDPOINT::Ticket_Mirroring TO [DBA_login];
go
(10),从主机上备份需要热备的数据库的数据库和事务日志,数据库一定要完整,然后把数据库和事务日志还原到备机,还原一定要使用NORECOVERY模式,
还原后备机数据库显示正在还原为正常现象。
(11),连接镜像(先在备机库上操作,然后在主机库上操作)
备机执行
use master --连接镜像
go
ALTER DATABASE Ticket SET PARTNER = 'TCP://192.168.11.253:5022';
go
主机执行
use master --连接镜像
go
ALTER DATABASE Ticket SET PARTNER = 'TCP://192.168.11.251:5022';
go
(12),这个时候我们就已经完成镜像备份啦,可以打开数据库镜像监视器查看同步情况,状态不对的话,先刷新试试,完成状态如下图:
主机图
备机图
(13),主库宕机后,怎么恢复镜像库为可用状态。
--第一步:脱离镜像
alter database test set partner off
--第二步;修改数据库的状态为recovery
restore database test with recovery
(14),脱离镜像后还要建立镜像的话,可以重新备份数据库和事务日志用NORECOVERY模式还原,然后连接镜像
use master --连接镜像,先在备机库上操作,然后在主机库上操作
go
ALTER DATABASE Ticket SET PARTNER = 'TCP://192.168.11.253:5022';
go
三、常用命令
--切换主备
use master;
alter database testdb set partner failover;
--备机强制切换
use master;
alter database testdb set partner force_service_allow_data_loss;
--恢复镜像
use master;
alter database testdb set partner resume;
--取消见证服务器
ALTER DATABASE testdb SET WITNESS OFF ;
--取消镜像
ALTER DATABASE testdb SET PARTNER OFF;
--设置镜像数据库还原为正常
RESTORE DATABASE testdb WITH RECOVERY;