[SQL Server] 在Availability Group中同步兩台Replicas中的SQL Logins,Linked Servers

問題:
公司的SQL Server導入了AlwaysOn 技術,當failover發生的時候出現無法登入SQL Server的情況。

研究:
跟Microsoft了解以後AlwaysOn技術Primary跟Secondary兩台伺服器的Database Objects是完全獨立而且不相通的,那就是說無論Logins、 Linked Server、 Agent Jobs也要在兩台伺服器分別建兩份。

解決方法:

  • Logins:
    • 使用Domain account:
      可直接解決問題。不過歷史的問題小弟不能選擇這個方案(灑花)
    • 使用Contained Database:
      原理就是把Database的所有相關東西打包變成一個Object,就不會發生Data同步,Database Object不同步的問題,可是很SAD,我也不能用這個方法。
    • 手動同步兩台伺服器的Logins:
      由於每一個 Login 有一組獨一無二的SID,所以就算在Secondary建一個使用者名稱跟密碼也一模一樣的Login,當failover發生時也會出現無法登入的情況。要手動同步兩邊的Login可以看Microsoft的官方教學。重點是同步兩台伺服器的Login SID,UserMapping部分不需要手動同步。
      不過萬一Primary的Login更改了密碼,就無能為力需要利用以上方法再同步一次了。(哀)
  • Linked Server:
    • 很抱歉,你需要手動在Primary那邊的Linked Server一個一個的產生SQL,然後放回Secondary,而且每次增加Linked Server也要這樣做。
結論:
顯然AlwaysOn技術集中關注資料的部分,Server Object,包括SQL Logins對於Primary跟Secondary兩台伺服器來說是完全獨立的東西需要分開來建立跟維護,想導入AlwaysOn技術的大大需要注意,不過可分開獨立Storage存放兩份data是小弟選擇它的原因之一。

同場加映:
如何找出已經失效或者沒有連結任何資料庫的使用者帳號?
參考這條SQL



Popular posts from this blog

[SQL SERVER] 找出LOCK方法懶人包

[SQL Server] 解決log檔(ldf file)過度膨脹的實戰經驗

[開箱] Dell P2415Q 4K螢幕開箱