collation change sql server 2008
dieser post ist hauptsächlich als erinnerung für mich – ich brauch das sicher nochmal und will dann nicht unbedingt nochmal suchen was ich getan habe – alle hardcoresqlspezialisten sollten jetzt nur weiterlesen, wenn sie echte fehler in meinem text anmerken wollen – ich hab das recht „rustikal“ geschrieben, ohne begründungen und nur so, wie es bei mir funktioniert hat…
problem am anfang: der sql server hatte eine falsche collation eingestellt, wir haben die Latin1_General_CI_AS gebraucht, bei der installation war eine andere eingestellt – was bedeudet, das die datenbanken, die einfach mit klick-klick auf dem server erstellt wurden, die falsche collation hatten.
so, und das war das problem, weil viele t-sql scripts, ssis packages und so nicht collationübergreifend funktionieren.
jetzt gibt es eine recht einfache methode die standard collation eines servers zu ändern – die killt aber leider alle datenbanken – weil die systemdatenbanken da neu erstellt werden – ein backup der db’s und dann einfach restoren hilft auch nicht, da da die alte collation wieder reinkommt – daher muss man die datenbanken mit rechtsklick/tasks/generate scripts hinaussichern, und dort einige einstellungen treffen, damit der export auch richtig funktioniert:
um alles rauszubekommen muss man fast alle werte auf true setzen – aber auf keinen fall den, wo gefragt wird, ob die collation mitexportiert werden soll:
das sind die einstellungen wie sie sein sollten.
so, jetzt muss man dann die datenbanken droppen – ich hab sie zur sicherheit detached und wegverschoben, das sie noch da sind, wenn was ist.
dann kann man die collation vom server ändern, das geht über ein sql-server-setup befehlchen auf der commandline:
‚Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts /[ SAPWD= StrongPassword ] /SQLCOLLATION=CollationName‘
im verzeichnis C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Release ausführen, die option /SAPWD= ist wichtig für den fall, das der mixed mode (für die anmeldung) vom sql server aktiviert ist – bei den /SQLSYSADMINACCOUNTS= empfielt sich die BUILTIN\Administrators zu nehmen, wenn keinen sicherheitsbedenken dagegen sprechen, weil in der gruppe muss man sein, um das setup aufzurufen und man kann dann auch die anpassungen wieder machen das alle wieder die richtigen rechte bekommen.
dieser aufruf dauert jetzt ein bisschen, dann sagt er entweder OK oder irgendeinen fehler – egal wie, man sollte in C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Log die Summary.txt ansehen, ob alles funktioniert hat – wenn ja, sollte es so aussehen:
Overall summary:
Final result: Passed
Exit code (Decimal): 0
Exit message: Passed
Start time: 2009-09-17 10:09:31
End time: 2009-09-17 10:11:03
Requested action: RebuildDatabase
.
.
.
Detailed results:
Feature: Database Engine Services
Status: Passed
MSI status: Passed
Configuration status: Passed
Feature: Analysis Services
Status: Passed
MSI status: Passed
Configuration status: Passed
Feature: Reporting Services
Status: Passed
MSI status: Passed
Configuration status: Passed
Rules with failures:
Global rules:
There are no scenario-specific rules.
Rules report file: C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Log\20090917_100748\SystemConfigurationCheck_Report.ht
So, jetzt hat man die richtige Collation am Server – aber die Datenbanken sind weg…
die werden jetzt wieder angelegt, das *.sql script, das man vorher erstellt hat wieder ausgeführt (über sqlcmd, das sql server management studio oder wie auch immer) und dann müssten noch die db’s überprüft werden, speziell, wenn man über sqlcmd arbeitet, weil das einige dinge anders versteht als das management studio…
so – und wenns nicht funktioniert hat, kann man die datenbanken die man am anfang detached hat, nochmal attachen und das ganze nochmal probieren – weil die sind ja immer noch in der alten collation – dann könnte man es über ein ssis package machen und die db’s zweimal umbenennen oder so – aber das hab ich schon nicht mehr probiert…