SQLリファレンス

実践レベルのSQLコマンドリファレンスなど

実践的なSQLコマンド、お勧めのSQL統合開発ツールやSQL書籍を紹介します

トップ SQLリファレンス SQLツール SQL書籍 SQL技術文書

Index

  • 拠点間のデータ連携について
  • 照合順序について

拠点間のデータ連携について

SQL Serverのレプリケーション機能について
分散型データベースによる拠点間のデータ連携を実現するには、SQL Serverの場合、レプリケーションという機能を利用します。
レプリケーションの機能を利用するには、拠点間でデータを統一するための監視役となるサーバーが1つ必要となります。レプリケーションを利用する際に監視役となるサーバーは、Expressエディションでは実現できません。有償版のSQL Serverが必要となります。
レプリケーションの監視役サーバー(今後、「親サーバー」と書きます)としての役割は、有償版のSQL Serverであればどのエディションでもよく、もっとも安価なWorkgroupエディションでも可能です。
(SQL Server 2005の価格体系については、http://www.microsoft.com/japan/presspass/detail.aspx?newsid=2403を参照)
SQL Server 2005 Workgroupエディションは、Windows XPへのインストールも可能ですが、SQL Server 2005は、どうやらWindows Server 2008との相性があまりよくないらしいので、あらたにサーバーOSをもちいる場合はWindows Server 2008を避けた方がいいかもしれません。
(Windows Server 2008 で SQL Server 2005 をインストールする際の既知の問題の一覧 http://support.microsoft.com/kb/936302/ja)
また、拠点のサーバー(「子サーバー」と書きます)は、Expressエディションでもレプリケーションが可能です。
拠点間で同期をとるタイミングとしては、親サーバーから子サーバーに対して同期する間隔をスケジューリングする方法と、個々の子サーバーが親サーバーに対して同期する間隔をスケジューリングする方法の2つがあります。(前者を「プッシュサブスクリプション」、後者を「プルサブスクリプション」といいます)
後者の場合、子サーバーもWorkgroupエディション以上である必要があります。(SQL Server Agentが必要となるため)
異なる拠点間で同一のデータを修正した場合のデータ競合については、データ競合時の優先順位を子サーバーごとに設定できます。「早い者勝ち」といった設定も可能です。
子サーバーには有効期間が設けられており、その有効期間内に親サーバーと同期をとらなかった子サーバーに関しては、レプリケーションの対象から除外されてしまいます。有効期間の初期値は2週間となっていますが、任意で変更することが可能です。(有効期間を無期限に設定することもできます)
マージレプリケーションを行うための問題点
プルサブスクリプションを行うための問題点としては、レプリケーションで同期をとるテーブルにたいして、勝手に新たなフィールドが1つ設けられてしまう点が挙げられます。この問題ですぐに思いつくのが、テーブルにデータを追加する際のSQLコマンド(INSERT命令)にてフィールド名を個別に指定していないものに関しては、すべてSQL実行エラーとなってしまいます。また、テーブルに存在するすべてのフィールドを抽出するような処理があれば、当然今までとシステムの挙動が異なります。
そのため、レプリケーション対応後は、システムのすべての機能を再度実行テストしたほうがよいかと思います。
子サーバーのデータを親サーバーに反映させるレプリケーション(マージレプリケーション)の場合のみ、この問題は発生します。親サーバーのデータで子サーバーのデータを一方的に塗り替えるだけでよい場合(スナップショットレプリケーション、トランザクションレプリケーション)は該当しません。
レプリケーションの設定方法について
SQL Server 2005のレプリケーションの設定に関する注意点です。

.NET FRAMEWORK 2.0以上が必要
SQL Server 2005 Workgroup エディションをインストールするには、事前に.NET Framework 2.0以上がインストールされている必要があります。.NET Framework 2.0のインストーラは、SQL Server 2005 Workgroup エディションのインストーラに含まれています。
また、SQL Server 2005 Express Management Studioのインストールにも、.NET Framework 2.0以上が必要です。SQL Server 2005 Express Management Studioのインストーラには.NET Framework 2.0のインストーラは含まれていないため、別途インストールしておく必要があります。Windows 7にSQL Server 2005 Express Management Studioをインストールする場合、Service Packが4以上のものをインストールします。
あらかじめデータベースオブジェクトを生成しておく
レプリケーションの対象となるテーブルなどのデータベースオブジェクトは、レプリケーションの設定前にあらかじめ生成しておく必要があります。
親サーバーにはIISのインストールが必要
親サーバーにはIIS(Internet Information Service)がインストールされている必要があります。IISをインストールせずにSQL Serverをインストールしようとすると、警告がでます。(この警告を無視してインストールすると、どのような現象が発生するかまでは詳しく調べていません)
ちなみに、Windows Server 2003にSQL Server 2005 Workgroup Editionをインストールしようとしたときは、IISのインストールに関してインストーラのデフォルト設定だけでは足らず、フルインストールすることで警告は発生しなくなりました。
子サーバーの設定について
子サーバー(サブスクライバ)の設定は、親サーバー(パブリッシャー)でも子サーバーでも可能です。
パブリッシャからサブスクライバがみられない場合
パブリッシャからサブスクライバがみられない場合、あるいはその逆の場合、SQL Serverのセキュリティ構成とファイアウォールの設定をみなおす必要があります。詳しくは、以下のサイトを参照してください。
(リモート接続が許可されるように SQL Server 2005 を構成する方法 http://support.microsoft.com/kb/914277/ja)
「Agent Xpsが無効」となってしまう
レプリケーションの設定時に「Agent Xpsが無効」となってしまう場合、SQL Serverエージェントが起動されていません。SQL Serverエージェント(のサービス)が起動されている必要があります。
レプリケーションとエディションの構成について
親サーバーのデータを子サーバーに一方的に反映する場合
レプリケーション スナップショットもしくはトランザクション
サブスクリプション プッシュ
親サーバーのエディション Workgroup以上
子サーバーのエディション Express以上

子サーバーのデータを親サーバーに反映する場合で、かつ同期するタイミングを親サーバーが設定する場合
レプリケーション マージ
サブスクリプション プッシュ
親サーバーのエディション Workgroup以上
子サーバーのエディション Express以上

子サーバーのデータを親サーバーに反映する場合で、かつ同期するタイミングを各子サーバーが設定する場合
レプリケーション マージ
サブスクリプション プル
親サーバーのエディション Workgroup以上
子サーバーのエディション Workgroup以上
SQL Server 2005のインストール要件
(ハードウェアとソフトウェアの必要条件 http://msdn.microsoft.com/ja-jp/library/ms143506(v=sql.90).aspx)
WINDOWS SERVER 2003をVMWAREにインストールした場合、初期設定ではメモリが384MBになっていますが、これだとSQL SERVER 2005 WORKGROUP EDITIONのインストール要件を満たしていません。メモリを512MB以上に増設する必要があります。
レプリケーションの状態を確認する場合
パブリケーションからサブスクライバがみられるかどうかなどを確認する場合や、同期を手動でとる場合は、レプリケーションモニタから行います。レプリケーションモニタは、Management Studioにてレプリケーション名を右クリックして「レプリケーションモニタの起動」を選択します。

照合順序について

SQL Serverの照合順序
CI 大文字、小文字を区別しない
CS 大文字、小文字を区別する
AI アクセント、濁音、破裂音を区別しない
AS アクセント、濁音、破裂音を区別する
KS ひらがなとカタカナを区別する
WS 全角、半角を区別する
BIN すべて区別する
SELECTクエリで照合順序を変える方法
以下のように記述します。
SELECT
  field_name COLLATE Japanese_CS_AS_KS_WS
FROM
  table_name
WHERE
  field_name COLLATE Japanese_CS_AS_KS_WS LIKE 'あいうえおアイウエオ%'
        

field_name...フィールド名
table_name...テーブル名

などです。
ただし、SQL Serverの互換性レベルによっては、COLLATE構文を認識できずにエラーとなります。
SQL Serverの互換性レベルは、古いバージョンのSQL Serverデータベースをバージョンアップさせた場合、古いままとなっています。
そのため、SQL Serverのバージョンに限らず、互換性レベルが低いデータベースでは、互換性レベルをバージョンアップする必要があります。
互換性レベルをバージョンアップするためのサンプルを掲載します。
/* 互換性を変更するためのSQL */
DECLARE @dbname VARCHAR(40);
SET @dbname = 'NG01'; -- データベース名

DECLARE @oldlvl tinyint;
SELECT @oldlvl = cmptlevel from master.dbo.sysdatabases WHERE name = @dbname;

DECLARE @newlvl tinyint;
SET @newlvl = 70; -- 互換性変更後のレベルを指定

IF (@oldlvl = 60) -- 現在の互換性レベルが60に満たない場合
BEGIN
  exec master.dbo.sp_dbcmptlevel @dbname, @newlvl;
  SELECT @ret;
END;
          



フリープログラミング団体 いかちソフトウェア
自由で楽しいプログラミングを追及する任意団体。
デスクトップサポート
Microsoft社のWindowsOSやOffice製品に関するデスクトップサポートページ。
WSH共通モジュール保管庫
Microsoft社のWindowsOSで動作するWSH(VBScript)の共通モジュールの紹介など。
もしもDS無料ツール
「もしもドロップシッピング」のための無料ツールやテンプレートの紹介。
トップ SQLリファレンス SQLツール SQL書籍 SQL技術文書
Copyright 2011- IKACHI All rights reserved.