Posts

Showing posts from January, 2016

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

Image
問題:
公司的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