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