展開時に正しく設定されなかったため、数年間運用されているデータベースの照合順序を変更するように求められました。
したがって、私の研究では、すべての列の照合順序を変更するには、制約を削除する必要があることを示しており、すぐに醜く見えるようになりました。したがって、すべてのオブジェクトのスクリプトを作成し、古い照合へのすべての参照を検索/置換し、新しいデータベースを作成してから、dbatoolsを使用してデータをコピーすることを考えました。
Get-DbaDbTable -SqlInstance SourceServer -Database SourceDb |
foreach-object
{ Copy-DbaDbTableData -DestinationDatabase TargetDb -DestinationTable $_.Name }
これはすべての照合順序を変更する有効な方法ですか?最初は赤面したので、かなり順調に機能しているように見えます(つまり、エラーなしでデータの移行が完了しました)。
SQL_Latin1_General_CP1_CI_ASからSQL_Latin1_General_CP437_CI_AIへの移行が重要な場合。
まあ、それは非常に単純な場合もあれば、多くの複雑さを伴う場合もあります。データベースのデフォルトの照合順序の変更を妨げるかなりの数の制限があります。
次の私の投稿を参照して、照合の各レベルが何に影響を与えるか、どのような場合に遭遇する可能性があるか、注意する必要があるか、そしてそれらのことに対して何をすべきかについて詳しく説明します。
インスタンス、データベース、およびすべてのユーザーデータベースのすべての列の照合順序の変更:何が問題になるのでしょうか?
あなたのアプローチは完全に有効である可能性があります。うまくいくようであれば、おそらくうまくいくでしょう。チェックする必要のあるすべての場所を確認したことを確認するために、私の投稿の各ポイントに目を通してください。たとえば、単一のデータベースの照合順序を変更するだけですか?もしそうなら、インスタンスレベルの照合とは何ですか?あなたが言及した2つのうちの1つですか? couldデータベースレベルとインスタンスレベルの照合が一致しない場合は、奇妙な動作になることがありますが、必ずしもそうではありません。
ちょうど好奇心から:なぜあなたはSQL_Latin1_General_CP437_CI_AIを使いたいのですか?潜在的に奇妙な選択のようです。そのDBを使用するアプリには、コードページ437が本当に必要ですか? JIRAにとってこれは偶然でしょうか?それがJIRAの2つの「サポートされている」照合順序の1つであり、誰かがその特定の照合順序を使用したいと思うことはそれほど多くありません。この場合は、おそらくこの変更を行う必要はありません。この問題については、こちらのアトラシアンへの私の推奨事項をご覧ください。
データベースとサーバー/デフォルトの照合がSQL Serverで一致しない場合のJiraでの照合エラー
長いサポートチケットの短さ:アトラシアンは、最初に「サポートされている照合」を考案することで、自分たちとその顧客に大きな不満を与えました。これまでのところ、これら2つが選択された理由、および他の2つが「サポートされていない」理由についての証拠は提供されていません。これは、開発者が照合順序(またはSQL Server照合順序)を理解していないだけの問題であると私は99.99999%確信しています。彼らへの私の推奨は、彼らが以下をサポートすることです:
Jiraがインストールされているデータベースには、インスタンスレベルの照合と同じ、大文字と小文字を区別しない照合が必要です。
照合順序がアクセントを区別しないかどうかは、ユーザー次第であり、並べ替えや比較をどのように実行するかはあなた次第です。最後に、インスタンスとDBの照合が同じであることを確認してください。 (この作業をすべて実行して、DBを「サポート」する照合に変更しようとしたが、インスタンスレベルの照合とは異なる場合は、Jiraをそれらに準拠させようとしたため、Jiraを破損させた可能性があります(おそらく不要です)。 )明記された要件;-).
私のアドバイス:何も変更しないでください!あなたも言った:
数年前から運用されているデータベース
問題が発生することなく何年も運用されていれば、問題はないでしょう:-)
これはコメントには長すぎますが、コードページを変更するときにchar/varchar列のデータが失われる可能性を指摘したいと思います。データは、ソースコードページまたは「?」とは異なる文字にマップされる場合があります文字がまったく存在しない場合。重要なのは、データ損失が発生した場合、移行中にエラーは報告されないです。
このスクリプトは、1252から437のコードページに移動する非ASCII文字のマッピングを示しています。
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;
たとえば、437コードページにユーロ記号がないことに注意してください。この通貨記号が含まれているJiraチケットがないことを願っています:-)
+------------------+------------------+--------------------------+
| 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 | ÿ | ÿ |
+------------------+------------------+--------------------------+