it-swarm.com.de

Prozess zum Ändern der Sortierung in einer Datenbank

Ich wurde gebeten, die Sortierung in einer Datenbank zu ändern, die seit einigen Jahren in Produktion ist, da sie zum Zeitpunkt der Bereitstellung nicht richtig eingestellt war.

Meine Forschung zeigt also, dass man, um die Sortierung aller Spalten zu ändern, Einschränkungen und was nicht fallen lassen muss, und es sah schnell hässlich aus. Also habe ich darüber nachgedacht, einfach alle Objekte zu skripten, alle Verweise auf die alte Sortierung zu finden/zu ersetzen, die neue Datenbank zu erstellen und dann die Daten mit dbatools zu kopieren:

Get-DbaDbTable -SqlInstance SourceServer -Database SourceDb |
 foreach-object 
    { Copy-DbaDbTableData -DestinationDatabase TargetDb -DestinationTable $_.Name }

Ist dies ein gültiger Ansatz, um die Sortierung für alles zu ändern? Auf den ersten Blick scheint es ziemlich schwimmend geklappt zu haben (d. H. Durch die Migration von Daten ohne Fehler gekommen zu sein).

Wechseln Sie von SQL_Latin1_General_CP1_CI_AS zu SQL_Latin1_General_CP437_CI_AI, wenn dies wichtig ist.

6
Tony Hinkle

Nun, es könnte sehr einfach sein oder viele Komplikationen haben. Es gibt einige Einschränkungen, die verhindern, dass die Standardkollatierung einer Datenbank geändert wird

Bitte lesen Sie den folgenden Beitrag von mir, der ausführlich beschreibt, welche Auswirkungen die einzelnen Sortierungsstufen haben, worauf Sie möglicherweise stoßen und worauf Sie achten müssen und was Sie dagegen tun müssen:

Ändern der Sortierung der Instanz, der Datenbanken und aller Spalten in allen Benutzerdatenbanken: Was könnte möglicherweise schief gehen?

Ihr Ansatz könnte vollständig gültig sein. Wenn es zu funktionieren scheint, dann möglicherweise. Gehen Sie einfach jeden Punkt in meinem Beitrag durch, um sicherzustellen, dass Sie an allen Stellen gesucht haben, die überprüft werden müssen. Ändern Sie beispielsweise nur die Sortierung einer einzelnen Datenbank? Wenn ja, wie lautet die Sortierung auf Instanzebene? Es ist eines der beiden, die Sie erwähnt haben? Es kann ein merkwürdiges Verhalten geben, wenn die Kollatierungen auf Datenbankebene und Instanzebene nicht übereinstimmen, aber nicht unbedingt.

Nur aus Neugier: Warum möchten Sie SQL_Latin1_General_CP437_CI_AI verwenden? Scheint eine möglicherweise seltsame Wahl zu sein. Benötigt die App, die diese Datenbank verwendet, wirklich die Codepage 437? Ist das zufällig für JIRA? Ich frage nur, weil dies eine der beiden "unterstützten" Kollatierungen für JIRA ist und es nicht allzu oft vorkommt, dass jemand diese bestimmte Kollatierung verwenden möchte. Wenn dies der Fall ist, müssen Sie diese Änderung wahrscheinlich nicht vornehmen. Bitte lesen Sie meine Empfehlung an Atlassian hier zu diesem Thema:

Sortierfehler in Jira, wenn Datenbank und Server/Standardkollatierung in SQL Server nicht übereinstimmen

Langes Support-Ticket kurz: Atlassian hat sich und seinen Kunden einen großen Nachteil erwiesen, indem es in erster Linie "unterstützte Kollatierungen" entwickelt hat. Bisher wurde kein Beweis dafür erbracht, warum diese beiden ausgewählt wurden und warum andere nicht "unterstützt" werden. Ich bin mir zu 99,99999% sicher, dass dies nur ein Problem der Entwickler ist, die Kollatierungen (oder SQL Server-Kollatierungen) nicht verstehen, was nichts gegen ihre Entwickler ist, da Jira ein bisschen fantastisch ist. Es ist nur so, dass die meisten Leute dieses Zeug nicht verstehen. Meine Empfehlung an sie ist, dass sie Folgendes unterstützen:

Die Datenbank, in der Jira installiert ist, muss eine Sortierung ohne Berücksichtigung der Groß- und Kleinschreibung aufweisen, die mit der Sortierung auf Instanzebene identisch ist.

ob die Sortierung akzentunempfindlich ist oder nicht, liegt bei Ihnen und wie Sortierungen und Vergleiche durchgeführt werden sollen. Stellen Sie am Ende einfach sicher, dass die Instanz und die Datenbank dieselbe Sortierung haben. (Wenn Sie all diese Arbeiten nur ausführen würden, um die Datenbank in eine Kollatierung zu ändern, die sie "unterstützen", die sich jedoch von der Kollatierung auf Instanzebene unterscheidet, hätten Sie Jira beschädigt, indem Sie versucht hätten, ihre (höchstwahrscheinlich unnötige) einzuhalten ) angegebene Anforderung ;-).

Mein Rat: nichts ändern! Du hast sogar gesagt:

eine Datenbank, die seit einigen Jahren in Produktion ist

Wenn es seit Jahren ohne Probleme in Produktion ist, gibt es wahrscheinlich keine Probleme :-)

8
Solomon Rutzky

Dies ist zu lang für einen Kommentar, aber ich möchte das Potenzial für Datenverlust in char/varchar-Spalten beim Ändern der Codepage herausstellen. Daten können einem anderen Zeichen als der Quellcodepage oder einem '?' wenn überhaupt kein Charakter existiert. Wichtig ist, während der Migration werden keine Fehler gemeldet wenn Datenverlust auftritt.

Dieses Skript zeigt die Zuordnung für Nicht-ASCII-Zeichen von der Codepage 1252 bis 437:

WITH 
     t10 AS (SELECT n FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) t(n))
    ,t1k AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) + 127 AS num FROM t10 AS a CROSS JOIN t10 AS b CROSS JOIN t10 AS c)
    ,CP1252_Characters AS (
        SELECT
              num AS CodePoint
            , CHAR(num) COLLATE SQL_Latin1_General_CP1_CI_AS AS CP1252_Character
        FROM t1k
        WHERE num < 256
    )
SELECT
      CP1252_Characters.CodePoint AS CP1252_CodePoint
    , CP1252_Characters.CP1252_Character
    , CP1252_Characters.CP1252_Character COLLATE SQL_Latin1_General_CP437_CI_AI AS Converted_CP457Character
FROM CP1252_Characters;

Beachten Sie beispielsweise das Fehlen des Euro-Symbols auf der Codepage 437. Ich hoffe du hattest keine Jira Tickets mit diesem Währungssymbol :-)

+------------------+------------------+--------------------------+
| CP1252_CodePoint | CP1252_Character | Converted_CP457Character |
+------------------+------------------+--------------------------+
|              128 | €                | ?                        |
|              129 |                 | ?                        |
|              130 | ‚                | ,                        |
|              131 | ƒ                | ƒ                        |
|              132 | „                | ,                        |
|              133 | …                | .                        |
|              134 | †                | +                        |
|              135 | ‡                | ╪                        |
|              136 | ˆ                | ^                        |
|              137 | ‰                | %                        |
|              138 | Š                | S                        |
|              139 | ‹                | <                        |
|              140 | Π               | O                        |
|              141 |                 | ?                        |
|              142 | Ž                | Z                        |
|              143 |                 | ?                        |
|              144 |                 | ?                        |
|              145 | ‘                | `                        |
|              146 | ’                | '                        |
|              147 | “                | "                        |
|              148 | ”                | "                        |
|              149 | •                |                         |
|              150 | –                | -                        |
|              151 | —                | -                        |
|              152 | ˜                | ~                        |
|              153 | ™                | T                        |
|              154 | š                | s                        |
|              155 | ›                | >                        |
|              156 | œ                | o                        |
|              157 |                 | ?                        |
|              158 | ž                | z                        |
|              159 | Ÿ                | Y                        |
|              160 |                  |                          |
|              161 | ¡                | ¡                        |
|              162 | ¢                | ¢                        |
|              163 | £                | £                        |
|              164 | ¤                |                         |
|              165 | ¥                | ¥                        |
|              166 | ¦                | ▌                        |
|              167 | §                |                         |
|              168 | ¨                | "                        |
|              169 | ©                | c                        |
|              170 | ª                | ª                        |
|              171 | «                | «                        |
|              172 | ¬                | ¬                        |
|              173 | ­                | -                        |
|              174 | ®                | r                        |
|              175 | ¯                | _                        |
|              176 | °                | °                        |
|              177 | ±                | ±                        |
|              178 | ²                | ²                        |
|              179 | ³                | 3                        |
|              180 | ´                | '                        |
|              181 | µ                | µ                        |
|              182 | ¶                |                         |
|              183 | ·                | ·                        |
|              184 | ¸                | ,                        |
|              185 | ¹                | 1                        |
|              186 | º                | º                        |
|              187 | »                | »                        |
|              188 | ¼                | ¼                        |
|              189 | ½                | ½                        |
|              190 | ¾                | _                        |
|              191 | ¿                | ¿                        |
|              192 | À                | A                        |
|              193 | Á                | A                        |
|              194 | Â                | A                        |
|              195 | Ã                | A                        |
|              196 | Ä                | Ä                        |
|              197 | Å                | Å                        |
|              198 | Æ                | Æ                        |
|              199 | Ç                | Ç                        |
|              200 | È                | E                        |
|              201 | É                | É                        |
|              202 | Ê                | E                        |
|              203 | Ë                | E                        |
|              204 | Ì                | I                        |
|              205 | Í                | I                        |
|              206 | Î                | I                        |
|              207 | Ï                | I                        |
|              208 | Ð                | D                        |
|              209 | Ñ                | Ñ                        |
|              210 | Ò                | O                        |
|              211 | Ó                | O                        |
|              212 | Ô                | O                        |
|              213 | Õ                | O                        |
|              214 | Ö                | Ö                        |
|              215 | ×                | x                        |
|              216 | Ø                | O                        |
|              217 | Ù                | U                        |
|              218 | Ú                | U                        |
|              219 | Û                | U                        |
|              220 | Ü                | Ü                        |
|              221 | Ý                | Y                        |
|              222 | Þ                | _                        |
|              223 | ß                | ß                        |
|              224 | à                | à                        |
|              225 | á                | á                        |
|              226 | â                | â                        |
|              227 | ã                | a                        |
|              228 | ä                | ä                        |
|              229 | å                | å                        |
|              230 | æ                | æ                        |
|              231 | ç                | ç                        |
|              232 | è                | è                        |
|              233 | é                | é                        |
|              234 | ê                | ê                        |
|              235 | ë                | ë                        |
|              236 | ì                | ì                        |
|              237 | í                | í                        |
|              238 | î                | î                        |
|              239 | ï                | ï                        |
|              240 | ð                | d                        |
|              241 | ñ                | ñ                        |
|              242 | ò                | ò                        |
|              243 | ó                | ó                        |
|              244 | ô                | ô                        |
|              245 | õ                | o                        |
|              246 | ö                | ö                        |
|              247 | ÷                | ÷                        |
|              248 | ø                | o                        |
|              249 | ù                | ù                        |
|              250 | ú                | ú                        |
|              251 | û                | û                        |
|              252 | ü                | ü                        |
|              253 | ý                | y                        |
|              254 | þ                | _                        |
|              255 | ÿ                | ÿ                        |
+------------------+------------------+--------------------------+
4
Dan Guzman