經過測試SQL Server數據庫數據和日誌驅動器加強AlwaysOn故障轉移策略sql
譯者注:數據庫
該腳本適合在SQL Server 2012\2014中配置爲自動故障轉移的副本中部署。windows
前言服務器
在SQL Server 2012和2014,在自動故障轉移模式的AlwaysOn可用性組不會在數據庫級別錯誤觸發故障轉移。例如:若是用戶數據庫的數據或日誌文件失敗,或者用戶數據庫損壞並致使狀態從在線變爲其餘狀態(如置疑),數據庫羣集不會自動故障轉移可用性組。ide
在SQL Server 2016,咱們在建立和修改可用性組命令的部分添加了一個額外的配置設置叫作DB_FAILOVER,若是在主副本的一個數據處於非在線狀態將觸發故障轉移。意思是,若是AG配置爲自動故障轉移,而且處於同步狀態的數據庫遇到失敗,數據庫級別的錯誤將會觸發自動故障轉移。測試
添加這個腳本的方法,使你你能夠再遇到磁盤故障時讓羣集執行自動故障轉移。該VB腳本在腳本中指定的路徑執行文件寫入。若是寫入失敗,意味着磁盤失敗而且腳本失敗。失敗的腳本致使羣集中的腳本資源失敗。若是在腳本資源上的依賴恰當配置,這將致使因爲磁盤/VB腳本失敗的羣集觸發故障轉移。.net
由於這個腳本不須要鏈接或以任何方式利用SQL Server,你能夠針對SQL Server 2012\2014\2016部署。但在2016中的收益不如配置啓用參數DB_FAILOVER,由於一個數據庫級別的失敗致使自動故障轉移。翻譯
翻譯自:3d
在SQL Server 2012和2014,AlwaysOn健康診斷以多種方式檢測SQL Server進程的健康。然而,沒有在AlwaysOn可用性組上的數據庫的可訪問性或存活性的健康檢測。若是承載可用性組數據庫或日誌文件的磁盤丟失,AlwaysOn健康診斷不會檢測該事件,而且應用程序運行時錯誤訪問數據庫失敗。丟失驅動器或訪問承載可用性數據庫數據和日誌文件的驅動器錯誤,會影響訪問你的生產數據的訪問。
正如可用性組的自動故障轉移的彈性故障轉移策略所描述:
「損壞的數據庫和置疑的數據庫不會在任何失敗條件級別上檢測。所以,一個數據庫損壞或置疑(是否因爲硬件失敗、數據故障或其餘問題)毫不會觸發自動故障轉移。」
注意:SQL Server 2016加強數據庫健康檢測的AlwaysOn健康診斷。若是你的AlwaysOn可用性組開啓數據庫健康檢測,而且數據庫狀態轉化爲非ONLINE狀態(sys.databases.state_desc),整個可用性組將自動故障轉移。可參考MSDN關於「CREATE AVAILABILITY GROUP」的「DB_FAILOVER」部分。
你能夠經過檢測磁盤健康來加強數據庫的可用性。添加一個普通的腳本資源到你的可用性組資源組,作基本的針對承載可用性組數據庫數據和日誌文件的驅動器的讀或寫測試。如下描述如何添加一個普通腳本資源做爲一個可用性組資源的依賴,經過甲苯的磁盤健康檢查來加強AlwaysOn健康檢測。
使用一個普通腳本資源來作基本的SQL Server數據和日誌驅動器健康檢查
這是一個高級別的描述關於部署普通的腳本資源來檢測可用性組數據庫驅動器健康。
添加一個普通的腳本集羣資源到可用性組資源組。讓可用性組資源依賴於普通資源腳本。這樣,若是腳本資源報告IsAlive失敗,Windows羣集會嘗試重啓或者故障轉移可用性組資源。
普通腳本集羣資源IsAlive測試在特定的數據驅動器位置建立一個文本文件、在特定的日誌驅動器位置建立一個文本文件。若是文件存在,腳本將會覆蓋它。
該腳本打包爲GenericScript_SQLIsAlive.zip,包括:
Sqlisalive.vbs
這個普通的腳本用Visual Basic腳本編寫,並部署Windows羣集IsAlive。
Add_SQLIsAliveScript.ps1
這個PowerShell腳本添加普通腳本資源到你的可用性組資源組,並設置可用組依賴於你的普通腳本資源。
Readme.txt
部署普通腳本資源的按步驟的指南,和如何測試腳本的額外指南。
部署普通腳本資源
I. 配置普通腳本sqlisalive.vbs。
數據和日誌驅動器路徑:
當前,普通腳本配置爲測試一下驅動器和路徑:c:\temp\data和c:\temp\log。對於測試目的,在每一個副本的本地驅動器上建立這些路徑(主副本和自動故障轉移夥伴輔助副本)。以後,你能夠修改它們爲適當的你的數據庫數據和日誌文件位於的驅動器和路徑。
DataDriveFile=」c:\temp\data\ScriptFileData.txt」
LogDriveFile=」c:\temp\log\ScriptFileLog.txt」
II. 配置和執行PowerShell腳原本部署普通腳本到你的可用性組。
注意:這個普通腳本只部署每60秒運行的IsAlive。
1. 確保你的可用性組有兩個副本配置爲自動故障轉移。
2. 拷貝普通腳本文件到相同的本地存儲路徑,像配置爲自動故障轉移的副本的全部服務器的「C:\temp\sqlisalive.vbs」。
3. 建立用於健康檢查的路徑,C:\temp\data和C:\temp\log。
4. Add_SQLIsAliveScript.ps1腳本添加普通腳本資源到你的可用性組,並在普通腳本資源上添加一個依賴到你的可用性組資源。在Add_SQLIsAliveScript.ps1,修改以下變量:
設置$ag爲你的可用性組名稱。
設置$listener爲你的可用性組監聽器名稱。若是你的可用性組沒有監聽器,設置$listener爲」」。
設置$scriptfilepath爲你的sqlisalive.vbs腳本的路徑和文件名。
5. 在承載主副本的服務器上,運行PowerShell腳本Add_SQLIsAliveScript.ps1去添加普通腳本資源到你的可用性組資源組。
6. 打開故障轉移羣集管理器,並檢查可用性組資源組來確認添加了普通腳本資源到可用性組資源組。普通腳本應該出如今資源頁面,並在可用性組資源組爲在線狀態。
7. 確承認用性組資源中在普通腳本資源上建立了依賴。
注意:
額外的readme.txt包含如何測試腳本資源來確認它能夠故障轉移到你的可用性組資源的指南。
經過普通腳本資源診斷失敗檢測
對承載主副本的節點生成羣集日誌,並搜索「Data Drive Create File」或「Log Drive Create File」,以定位普通腳本資源IsAlive成功或失敗的報告:
00001b04.00002924::2015/12/07-17:16:41.798 INFO [RES] Generic Script <sqlisalive>: Entering IsAlive
00001b04.00002924::2015/12/07-17:16:41.801 INFO [RES] Generic Script <sqlisalive>: Data Drive Create File Succeeded
00001b04.00002924::2015/12/07-17:16:41.801 INFO [RES] Generic Script <sqlisalive>: Log Drive Create File Succeeded
或者例如,你設置\Data目錄爲只讀:
00001b04.00002924::2015/12/07-17:17:41.801 INFO [RES] Generic Script <sqlisalive>: Entering IsAlive 00001b04.00002924::2015/12/07-17:17:41.804 INFO [RES] Generic Script <sqlisalive>: Data Drive Create File Succeeded 00001b04.00002924::2015/12/07-17:17:41.804 INFO [RES] Generic Script <sqlisalive>: Data Drive Create File Failed 00001b04.00002924::2015/12/07-17:17:41.804 INFO [RES] Generic Script <sqlisalive>: Permission denied 00001b04.00002924::2015/12/07-17:17:41.804 ERR [RES] Generic Script <sqlisalive>: 'IsAlive' script entry point returned FALSE.' 00001b04.00002924::2015/12/07-17:17:41.804 INFO [RES] Generic Script <sqlisalive>: Return value of 'IsAlive' script entry point caused HRESULT to be set to 0x00000001. 00001b04.00002298::2015/12/07-17:17:41.804 WARN [RHS] Resource sqlisalive IsAlive has indicated failure.