2018年9月1日 星期六

[SQL Server][HA]鏡像應用Q&A

在上一篇文章己經把鏡像同步建立好了,
接著分享在資料庫維運時可能遇到的鏡像操作問題。
問題一、原本的主機發生問題(如硬碟故障或其它硬體有問題時),如何切換到備援機?
可以連至主機進行鏡像手動容錯移轉(manual failover)至備援機
USE [master]
ALTER DATABASE [APPSYS] SET PARTNER FAILOVER;
如果仍無法移轉,在容許資料遺失的情況下可執行以下指令
USE [master]
ALTER DATABASE MyDB SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS 
或者至備援機斷開鏡像。
--連至備援端DB移除資料庫鏡像
USE [master]
--中斷鏡像同步後,如主體端DB沒有做過Log備份,都可以再次設定鏡像同步
ALTER DATABASE [APPSYS] SET PARTNER OFF;
--將資料庫恢復成RECOVERY模式,可進行存取的狀態
RESTORE DATABASE [APPSYS] WITH RECOVERY;

問題二、如何監控鏡像同步的情況?
可查詢sys.database_mirroring查詢當下鏡像的情況:
select db_name(database_id) as '資料庫名稱',mirroring_state_desc as '鏡像狀態' from sys.database_mirroring
where mirroring_state is not null
鏡像狀態可能的狀態有:
Unknown、正在同步處理、已同步處理、已暫停、已中斷連接
只要透過排程(Job)來定期執行以上語法,再判斷回傳鏡像狀態為己暫停或是己中斷連接時,
即發送通知給相關人員即可。

問題三、鏡像機制中斷後重建時要注意什麼?
在鏡像中斷後,只要主體端無任何備份(導致交易紀錄截斷)
仍可以直接進行鏡像同步,無需在備援機再次還原DB。
但假如主體端己經過做備份,則是仍須要到主體端備份DB後再至備援機進行DB還原才可以進行鏡像同步。

問題四、假設己容錯移轉至備援機,如何讓前端系統程式能使用相同的登入帳號(Login)?
在主體端可以使用微軟(KB提供的語法建立二支Store Procedure:sp_hexadecimal、sp_help_revlogin,
再執行exec sp_help_revlogin可顯示全部Login的建立Script,再拿去備援機執行即可複製Login。
exec sp_help_revlogin
--顯示Login Create Script
--CREATE LOGIN [tt01] WITH PASSWORD = 0x01005B429E7F53752B8B2B8DE7D5F97512738BA25CC527490C78 HASHED, SID = 0x51236A2E950F2A4680B087495907AFE3, DEFAULT_DATABASE = [APPSYS], CHECK_POLICY = ON, CHECK_EXPIRATION = OFF
問題五、如果遇到主機需要進行硬體維修或網路中斷時,可透過鏡像暫停和繼續來避開作業時間。
--暫停鏡像,以利後續作業
ALTER DATABASE APPSYS SET PARTNER SUSPEND;
--恢復鏡像
ALTER DATABASE APPSYS SET PARTNER RESUME;
--需等待後續的資料同步完成

參考資料:

沒有留言:

張貼留言

[SQL Server]主動通知SQL Server發生錯誤的機制

當SQL Server有特定錯誤發生時,管理人員也沒有時間經常去查看SQL Server錯誤檔, 於是有時特定錯誤可能很重要時,但卻沒有人被通知到,現在小弟實作一個主動通知的機制。 首先先新增警示,在這裡選擇想要被通知的錯誤訊息的等級或其它設定 接著在回應頁籤中,勾選執...