Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

SQL Server開発の利便性を向上させるFileTable/シーケンスオブジェクト/ページング機能

進化したSQL Server 2012の新機能紹介(4)

  • LINEで送る
  • このエントリーをはてなブックマークに追加

 本稿では、SQL Server 2012より追加された、バイナリファイルの取り扱いが容易になるFileTable、自動採番の幅が広がるシーケンスオブジェクト、ページング機能について解説していきます。

目次

はじめに

 SQL Server 2012には、開発効率を向上させるための機能が追加されています。例えば、バイナリファイルの管理・使用が容易になるFileTable機能です。以前のバージョンで提供されていたFileStreamをベースにしており、より使いやすくなっています。列の属性でしか提供されていなかった採番機能が、テーブルから独立したシーケンスオブジェクトが提供されることで、ストアドプロシージャからの利用できるようになり、自動採番機能の使用範囲が広がります。また、アプリケーション側で実装してきたページング機能が、データベース機能として提供されるようになりました。

 今回はこれらの便利な新機能について、詳しく紹介していきます。

対象読者

  • SQL Serverを使用するアプリケーション設計、開発者
  • SQL Serverデータベース管理者
  • SQL Server 2012の新機能に興味のある方

バイナリデータの管理がエクスプローラでできる - FileTable -

 SQL Server 2012では、画像やパワーポイント、エクセルなどのバイナリファイルをデータベース上で効率良く管理するために、新たにFileTable機能が追加されました。SQL Server 2008から提供されているFileStreamという機能をベースにしています。

FileTable機能が追加された背景

 FileStreamは、バイナリファイル管理の問題点を解消するために提供された機能でした。FileStreamが提供されるまでのバイナリファイルの管理方法には、ファイルパスを格納する方法とバイナリファイル自体を格納する方法がありました(図1)。

図1:FileStreamが実装される前のバイナリファイル管理方法
図1:FileStreamが実装される前のバイナリファイル管理方法

 ファイルパスを管理する方法は、SQL Serverからバイナリファイルを管理できません。そのため、バイナリファイルが削除されたり、移動されたりすると、管理しているファイルパスと矛盾することがあります。また、バイナリファイル自体を格納する方法は、参照/更新性能が低かったり、ストリーミングなど一部機能が使用できないという問題がありました。

 FileStreamは、SQL ServerとWindowsのファイルシステムを結合し、Windowsのファイルを直接SQL Serverへ格納できるようになりました(図2)。SQL Serverのプロセス管理下にありつつ、SQL Serverのデータベースファイル内では無く、Windowsファイルストレージに直接格納します。T-SQLでバイナリデータの挿入、更新、検索もでき、Win32ファイルシステムインターフェイスでもデータアクセスができます。

図2:FileStreamの概念図
図2:FileStreamの概念図

 SQL Server 2012で追加されたFileTableは、FileStreamの使用しづらかった点を改善した機能です。FileStreamにファイルを登録するには、Win32 APIを使用するか、T-SQLを発行する必要がありました。しかし、FileTableでは、Windowsファイル名前空間をサポートすることで、Windowsアプリケーションとの互換性が向上しています。Windowsファイル名前空間をサポートされたことで、エクスプローラからファイルのツリー階層を確認したり、アプリケーションからファイルパスを指定してファイルにアクセスできるようになります。ファイルのアクセスパスは、T-SQLを発行して取得できます。

FileTableを使用するための手順

 FileTableを使用するには、FileStreamを有効化し、FileTable用の設定を有効化します。FileStreamを有効化するには、インスタンスレベルでの有効化とデータベースレベルでの有効化が必要です(注1)。

注1

 SQL Server 2012のインストール時に、ウィザード内でインスタンスレベルのFileStreamを有効にできます。インストール時に有効化している場合は、インスタンスレベルの有効化作業は必要ありません。

 1)インスタンスレベルでFileStreamを有効化する

 [スタート]-[すべてのプログラム]-[Microsoft SQL Server 2012]-[構成ツール]からSQL Server構成マネージャを起動します。左側のメニューツリーから[SQL Serverのサービス]を選択します。サービス一覧から有効化したいインスタンスをダブルクリックしてプロパティウィンドウを開きます。プロパティウィンドウの[FileStream]タブを選択します。[Transact-SQLアクセスに対してFILESTREAMを有効にする][ファイルI/Oアクセスに対してFILESTREAMを有効にする]にチェックを入れます(図3)。

図3:SQL Serverのプロパティ
図3:SQL Serverのプロパティ

 [スタート]-[すべてのプログラム]-[Microsoft SQL Server 2012]からSQL Server Management Studioを起動し、SQL Server構成マネージャでFileStreamを有効化したインスタンスに接続します。オブジェクトエクスプローラのインスタンスで右クリックをして、コンテキストメニューから[プロパティ]を選択すると、[サーバーのプロパティ]が表示されます。左側メニューから[詳細設定]を選択し、[FILESTREAMアクセスレベル]を[有効なフルアクセス]を選択します(図4)。

図4:サーバーのプロパティ
図4:サーバーのプロパティ

 2)FileStreamを有効にしたデータベースを作成する

 [スタート]-[すべてのプログラム]-[Microsoft SQL Server 2012]からSQL Server Management Studioを起動し、FileStreamをインスタンスレベルで有効化したSQL Serverインスタンスに接続し、オブジェクトエクスプローラの[データベース]で右クリックをして、コンテキストメニューから[新しいデータベース]を選択すると、[新しいデータベース]ウィンドウが表示されます。左側メニューから[ファイルグループ]を選択し、下側の[追加]ボタンをクリックします。名前に任意の文字列を入力します(図5)。

図5:FILESTREAMファイルグループの追加
図5:FILESTREAMファイルグループの追加

 左側メニューから[全般]を選択し、[追加]ボタンをクリックします。[ファイルの種類]から[FILESTREAM]を選択し、論理名に任意の文字を入力し(図6)、保存するファイルパスを設定します。

図6:データベースファイルの追加
図6:データベースファイルの追加

 SQL Server 2012では、FileTableを使用するために、FileStreamの設定[FAILESTREAM ディレクトリ名]と[FILESTREAM 非トランザクション アクセス]の2種類の項目が追加されています。左側メニューから[オプション]を選択し、[FILESTREAMディレクトリ名]に任意の文字列(本稿では、testを使用します)を入力、[FILESTREAM非トランザクションアクセス]をFullにして(図7)データベースを作成します。

図7:FIRESTREAMの設定
図7:FIRESTREAMの設定

 3)FileTableを作成する

 FileTableは、FILESTREAMデータやファイル、ディレクトリなどの情報を格納する固定スキーマを含んだ特殊なユーザーテーブルです。FileTableテーブルは固定された定義があるため、作成時に列を指定することはできません。

 FileTableを作成するために[リスト1]のクエリを実行します。FileTableを作成するには、1行目のように、「AS FILETABLE」オプションを付与します。

 2行目の「FILETABLE_DIRECTORY」は、FileTableのルートディレクトリのディレクトリ名です。ルートディレクトリ名はデータベース内のすべてのFileTableディレクトリ名の中で一意にしなければなりません。

 3行目の「FILETABLE_COLLATE_FILENAME」は、FileTableのName列の照合順序を指定します。FILETABLE_COLLATE_FILENAMEはオプション扱いになっており、指定しなかったり、database_defaultを設定したりするとデータベースの照合順序が適用されます。FileTableのName列は大文字と小文字を区別しない設定にしなければなりません。データベースの照合順序を大文字と小文字を区別する設定にしている場合は、FILETABLE_COLLATE_FILENAMEで区別しない照合順序を指定しないとエラーになります。「CI」がついている照合順序は大文字と小文字を区別せず、「CS」がついている照合順序は大文字と小文字を区別するため、「CI」がついている照合順序を選択します。

[リスト1]FileTableを作成するスクリプト
CREATE TABLE FileTable1 AS FILETABLE
  WITH 
  ( 
    FILETABLE_DIRECTORY = 'FileTable1',
    FILETABLE_COLLATE_FILENAME = database_default
  ) 
GO

 クエリを実行すると、FileTablesが作成されます(図8)。

図8:FileTablesツリー配下にオブジェクトが追加される
図8:FileTablesツリー配下にオブジェクトが追加される

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 大和屋 貴仁(ヤマトヤ タカヒト )

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2017年5月時点での登録メンバは52名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂き...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:進化したSQL Server 2012の新機能紹介
All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5