sql server 雙機熱備份方案之資料庫映象 (實測sql server 2016)
一、先簡單介紹下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
gocreate 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;