MS SCOM: collation conflict

Ложка дёгтя как приз за невнимательность! А вы читаете Release Notes, Requirements, Installation Guide?

Итак, тем кто ставил MS SCOM 2007 и выше, и при установки MS SQL для баз данных указал collation отличный от «SQL_Latin1_General_CP1_CI_AS» (или не указал ничего, а использова дефолтный) столкнутся с тем, что отчеты в SCOM работать не будут. А лог будет наполнен ошибками вида:
«Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation».

Вот документ совместимостей для MS SCOM 2007 R2, где указана правильная collation: http://technet.microsoft.com/en-us/library/bb309428.aspx. Где-то в середине длинного текста: раздел «Minimum Software Requirements», в таблице «Supported Software Requirements for Operations Manager 2007» первая строка «Operations Manager Operations database», пункт два:
SQL collation must be SQL_Latin1_General_CP1_CI_AS; no other collation configurations are supported
Как говорят, это чуть ли не единственное место, где сказано про collation.

Если у вас установлен уже MS SCOM 2007 R2, то проверить можно в СУБД MS SQL: в Management Studio откройте свойства сервера, раздел «General», в таблице строка Server Collation.
Если значение отличается от SQL_Latin1_General_CP1_CI_AS, то вам предстоит… переустановить весь SCOM вместе с сиквелом!


Что такое этот коллейшн?
Collation (сопоставление) указывает серверу БД как обрабатывать данные. Какую таблицу символов использовать, приоритетность одних символов над другими при сортировке, поиске и сравнении различных значений.
В алгоритме сопоставления участвует несколько параметров: различать ли пробелы при сортировке, равнозначны ли строчные и прописные буквы, как сравнивать одно- и двух-байтные символы, как обрабатывать иерографические символы и т.п.
По умолчанию, при установки SQL значение коллейшен «Latin1_General» с параметрами Case-sensitive отключено (то есть Case Insensitive или просто CI, это означает, что нет разницы при сравнении больших и маленьких букв, ‘Вова’ и ‘вова’ – равнозначны) и Accent-sensitive включено (AS, то есть буквы с акцентами различаются и ‘a’ не равно ‘á’)
Значение это присваивается всему серверу СУБД и должно совпадать с логикой работы базы данных. У баз тоже выставляется значение collation, и оно должно совпадать со значением сервера. Менять эти значения процедура не тривиальная, а менять просто так – опасная.
Чем отличаются два вышеозначенных коллейшена? Могу ошибиться тут, поправьте, если не так, по-умолчанию используется текущие региональные настройки Windows и кодовая таблица 1251, CP1 точно означает кодовую страницу 1252.

Но вернемся от теории к проблеме.

Ссылка на официальную базу знаний Microsoft: http://support.microsoft.com/kb/958979, где так и сказано английским по белому:
Workaround:
When installing SQL server be sure to select SQL collation SQL_Latin1_General_CP1_CI_AS. If OpsMgr has already been installed you will have to reinstall SQL and OpsMgr to change the SQL collation.

Как правильно переустановить, ничего не потеряв вот хорошая статья: http://thoughtsonopsmgr.blogspot.com/2010/04/failed-to-store-data-in-data-warehouse.html (eng).
Думаю нет смысла переводить всю статью на русский.


На самом деле проблема не новая, но беда в том, что не все сразу сталкивается с этой проблемой. Т.е. система может проработать долгое время, пока вы с ней не столкнетесь, например, установив MP для Exchange 2010 или Veeam MP for VMware 5.7 и захотите построить отчеты.
Вот статья в kb Veeam на тему: http://www.veeam.com/kb1465