2016-01-18 17 views
2

我最近繼承了一個多實例A/A設置的SQL Server集羣。在單個SQL Server實例中有多個數據庫排序規則有哪些問題?

目前,它有6分的情況下,3與高交易率,我將獨自離開運行大單數據庫,但每個實例中的其他3主機多個數據庫,並通過整理已經拆了下來。

三個排序是:

  • Latin1_General_CI_AS,
  • SQL_Latin1_General_CP1_CI_AS,並
  • SQL_Latin1_General_CP850_BIN2

都沒有被利用的數據庫,所以可以完全脫落集羣,有些數據庫不保證成爲集羣的一部分,並將被轉移到虛擬機。

我的問題是如何處理剩下的數據庫。我想將它們合併爲一個實例以便於管理。很少有數據庫彼此交互,而那些數據庫的排序規則相同。

什麼是這樣做的利弊不同,重要的會以任何方式影響實例的更新和修補?

感謝

回答

2

在一般情況下,如果歸類是明確使用無處不在,那麼你不一定會出現問題。但是,你很可能。

一個大問題是查詢中的常量。它們繼承運行查詢的數據庫的默認排序規則。如果更改排序規則,則查詢可能失敗或其性能可能發生變化。不兼容的排序規則可能會影響索引的使用。

我會非常小心在系統中有多個排序規則。我認爲你應該測試將數據庫更改爲常見排序規則,然後將其統一起來。如果需要針對特定​​用途不同的排序規則,然後分離出代碼,並使用明確排序規則,而不是默認排序規則的例外情況。

1

當移動一個數據庫,以不同的排序規則的一個實例,心該實例排序規則確定數據庫名,變量,GOTO標籤和tempdb的排序規則。從不區分大小寫的實例歸類轉爲區分大小寫或二進制歸類會破壞代碼,除非變量和GOTO標籤的定義和使用完全匹配大小寫。同樣,如果變量/標籤僅由大小寫區分,則從區分大小寫/二進制轉爲區分大小寫會導致問題。

此外,臨時表的列排序規則將使用實例歸類除非顯式指定COLLATE DATABASE DEFAULT。在tempdb中使用對象時,這可能會導致歸類衝突錯誤。

因此,可能需要進行代碼修復以將不同歸類的數據庫合併到一個實例中。實例修補不會受到影響。

在混合環境整理工作已經,我可以說這個問題是避免的,但可能很難修復大型遺留應用程序。

相關問題