一、先簡單介紹下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;