iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 5
1
自我挑戰組

IT人員面面觀系列 第 5

[SQL Server]鏡像應用Q&A

  • 分享至 

  • xImage
  •  

在上一篇文章己經把鏡像同步建立好了,

接著分享在資料庫維運時可能遇到的鏡像操作問題。

問題一、原本的主機發生問題(如硬碟故障或其它硬體有問題時),如何切換到備援機?

可以連至主機進行鏡像手動容錯移轉(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)
https://docs.microsoft.com/zh-tw/sql/database-engine/database-mirroring/mirroring-states-sql-server
監視資料庫鏡像 (SQL Server)
https://docs.microsoft.com/zh-tw/sql/database-engine/database-mirroring/monitoring-database-mirroring-sql-server
ALTER DATABASE (TRANSACT-SQL) 資料庫鏡像
https://docs.microsoft.com/zh-tw/sql/t-sql/statements/alter-database-transact-sql-database-mirroring
如何在 SQL Server 2005 和 SQL Server 2008 的執行個體之間傳送登入和密碼https://support.microsoft.com/zh-tw/help/918992/how-to-transfer-logins-and-passwords-between-instances-of-sql-serve


上一篇
[SQL Server]在單一主機上實作資料庫鏡像機制
下一篇
[SQL Server]變更DB主機名稱
系列文
IT人員面面觀28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言