2003年9月11日
『SQL Server のソート順、照合順序の影響』
システム管理 ML での話題を紹介します。
・複数列のプライマリーキー
・DB復元時に「再起動チェックポイントファイル…」のエラーがログに出力される
・DTSパッケージそのものの移行のトラブル
・[HOWTO] SQL Server を実行しているコンピュータ間でデータベースを移動する方法
松本さんに補足いただいています。
現時点で ML のメンバーでなくても、
http://www.sqlpassj.org/bbs/ml_disp.aspx?forum_id=3
より閲覧可能です。
特にデータベース管理者にとって重要になる SQL Server のソート順、照合順序について紹介します。
SQL Server 6.5, 7 といった旧バージョンとの互換性が影響を与えていることがあります。SQL Server
6.5 のインストールのデフォルトは、日本語版の場合バイナリ順でした。SQL Server 7 から変更されています。
このため、
古くからのアプリケーションを動作させたい
→バイナリ順でインストールされた SQL Server 7 のサーバー
SQL Server 7 向けに(デフォルト設定と仮定して)開発されたアプリケーションを動作させたい
→デフォルトのままインストールされた SQL Server 7 のサーバー
とサーバーを 2 セット確保したくなることがありました。
またソート順のことなるサーバーではデータベースのリストアができませんので障害後の対応時に混乱するケースがありました。
SQL Server 2000 では、照合順序と変更の上、機能強化がはかられています。
照合順序をインスタンス単位で指定するだけでなく、
・データベース
・テーブル
・式
の各レベルで COLLATE 句 を用い切り替えることが可能です。
この機能強化により、
古くからのアプリケーションを動作させたい
→バイナリ順のデータベース (必要なら sp_dbcmptlevel 65)
SQL Server 7 向けに(デフォルト設定と仮定して)開発されたアプリケーションを動作させたい
→デフォルトのままのデータベース (必要なら sp_dbcmptlevel 70)
SQL Server 2000 向けに(デフォルト設定と仮定して)開発されたアプリケーションを動作させたい
→デフォルトのままのデータベース
とデータベースを使い分けることで、サーバー 1 セットでも対応できる可能性がでてきました。また、プラットフォームにしている
OS が共通であれば、基本的に照合順序の異なるデータベースのリストアも可能です。
ただ、インスタンス全体より一段低いレベルで照合順序を切り替えていますので、注意点が残ります。例えば、
・ tempdb の照合順序は多くの場合デフォルトのままです。
→一時テーブルがデータベースと異なる照合順序になります。COLLATE database_default を追加してバイナリ順にそろえないと動作に影響することがあります。
・「変数、GOTO ラベル、一時ストアド プロシージャ、および一時テーブル」の識別子は、インスタンスの既定の照合順序に従います。
・ master に接続してユーザーデータベースへのアクセスを完全修飾名で行っていると SQL 文の挙動はインスタンスの照合順序によります。(旧アプリケーションの確認、一部修正が必要)
この他 Windows 照合順序の機能はプラットフォームの OS ( Windows ) に頼ると思いますので OS 毎の挙動差が気になります。
この点については明確な資料を見つけることができませんでした。
ただ、
http://support.microsoft.com/default.aspx?scid=kb;ja;257424
[FIX] SP2 を適用した日本語 DB サーバを W2k にアップグレードする際の問題
-------------------------------------------------------------------------
Microsoft Windows NT、Windows 95、または Windows 98 を実行しているサーバーに SQL
Server 7.0 Service Pack 2 ( SP2 ) をインストールした後で、オペレーティング システムを Windows
2000 にアップグレードした場合、この Windows 2000 へのアップグレードによって、日本語文字の並べ替えに関係する特定のシステム
ファイルが、SP2 で必要となるバージョンよりも古いバージョンのファイルに置き換えられます。
-------------------------------------------------------------------------
との記述がありますので、 SQL Server インストール時にかなりのレベルで整合性を保つよう更新していると思います。
こまかな照合順序 COLLATE 句 の影響についてはシステム構築ML 他 ML で話題になっています。一読をお勧めします。
|