先感謝一下我的同事們最先發現此問題,鳴謝:向飛、志剛、海云
最近在生產環境發現一個詭異的問題;
環境:WINDOWS 2012+SQLSERVER 2012 SP1,雙節點的故障轉移群集+單節點的SQLSERVER 2012 SP1實例(鏡像)
生產數據庫是從SQLSERVER 2008R2遷移到2012的,遷移過程很順利,按照一般經驗,可能導致數據庫所有者丟失,因此在遷移后手動修改數據庫所有者為sa,與此同時還有個job在做這個庫的歸檔(定期清理歷史數據到本地的歷史庫中,delete、insert操作);
遷移后嘗試運行job均可正常執行;第二天以鏡像方式做災備,搭建完鏡像環境后,歸檔的job報錯:無法登錄到服務器“(local)”。
后測試嘗試重建作業也無效,再創建一個新作業,只在這個做了鏡像的庫上執行“select 1”,同樣報錯(按理說select 1是不會記錄日志的,因此也就不會影響到鏡像)
最后通過查詢代理錯誤日志,發現如下錯誤:
確實,MultiSubnetFailover參數必須要開啟AlwaysOn屬性后才能使用。但為何在只建立鏡像的環境下,SQL Agent仍會通過這個連接選項連接到鏡像實例?
此外,我又做了兩個測試:
測試A:在開啟過AlwaysOn選項的單實例(非群集環境)上,先關閉AlwaysOn選項,刪除并重建端點,搭建鏡像環境;
測試B:在從未開啟過AlwaysOn選項的單實例(非群集環境)上(新裝的虛機),搭建鏡像環境;
上述兩次測試,JOB均可順利執行,并未出現此前在群集環境下的問題;
由此,基本可以排除此問題受AlwaysOn選項的影響的可能,反而是對群集環境才有此類的現象;
目前的群集環境不便開啟AlwaysOn選項,因此無法做進一步測試來驗證上面的觀點,有興趣的童鞋可以繼續測試一下;
PS:經過陳桑的提點,這個問題可以曲線解決;
創建job步驟的時候,連接數據庫選為非鏡像庫(如master),同時修改要執行的SQL,將對象名改為database.schema.object的格式即可;
新聞熱點
疑難解答