天天看點

SQLServer 2012異常問題(一)--故障轉移群集+鏡像環境導緻作業執行失敗

先感謝一下我的同僚們最先發現此問題,鳴謝:向飛、志剛、海雲

最近在生産環境發現一個詭異的問題;

環境:WINDOWS 2012+SQLSERVER 2012 SP1,雙節點的故障轉移群集+單節點的SQLSERVER 2012 SP1執行個體(鏡像)

生産資料庫是從SQLSERVER 2008R2遷移到2012的,遷移過程很順利,按照一般經驗,可能導緻資料庫所有者丢失,是以在遷移後手動修改資料庫所有者為sa,與此同時還有個job在做這個庫的歸檔(定期清理曆史資料到本地的曆史庫中,delete、insert操作);

遷移後嘗試運作job均可正常執行;第二天以鏡像方式做災備,搭建完鏡像環境後,歸檔的job報錯:無法登入到伺服器“(local)”。

後測試嘗試重建作業也無效,再建立一個新作業,隻在這個做了鏡像的庫上執行“select 1”,同樣報錯(按理說select 1是不會記錄日志的,是以也就不會影響到鏡像)

SQLServer 2012異常問題(一)--故障轉移群集+鏡像環境導緻作業執行失敗

最後通過查詢代理錯誤日志,發現如下錯誤:

SQLServer 2012異常問題(一)--故障轉移群集+鏡像環境導緻作業執行失敗

确實,MultiSubnetFailover參數必須要開啟AlwaysOn屬性後才能使用。但為何在隻建立鏡像的環境下,SQL Agent仍會通過這個連接配接選項連接配接到鏡像執行個體?

此外,我又做了兩個測試:

測試A:在開啟過AlwaysOn選項的單執行個體(非群集環境)上,先關閉AlwaysOn選項,删除并重建端點,搭建鏡像環境;

測試B:在從未開啟過AlwaysOn選項的單執行個體(非群集環境)上(新裝的虛機),搭建鏡像環境;

上述兩次測試,JOB均可順利執行,并未出現此前在群集環境下的問題;

由此,基本可以排除此問題受AlwaysOn選項的影響的可能,反而是對群集環境才有此類的現象;

目前的群集環境不便開啟AlwaysOn選項,是以無法做進一步測試來驗證上面的觀點,有興趣的童鞋可以繼續測試一下;

PS:經過陳桑的提點,這個問題可以曲線解決;

建立job步驟的時候,連接配接資料庫選為非鏡像庫(如master),同時修改要執行的SQL,将對象名改為database.schema.object的格式即可;