SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Denali CTP3 で FileTable を使ってみる

leave a comment

次期 SQL Server では FIleTable というものが使用できるようになっています。

この機能を使用するとファイルシステム上のファイル/ フォルダをテーブルを操作する感覚で T-SQL で柔軟に操作することが可能となります。
また、ファイルシステムに直接変更した結果が、テーブルに反映されるため T-SQL を使用しなくても統合されたファイル管理を実施することが可能です。

今回はこの、FIleTable の設定方法についてみていきたいと思います。

FileTable に関しては以下の情報を参考にさせていただいています。。
SQL Server DenaliのFileTableは、SQLテーブルをフォルダに変える。
FileTable in SQL Server “Denali”–Dateizugriff auf SQL Server Filestream Daten von jeder Anwendung
SQL Server Denali FileTables Feature – The fruits of WinFS? (Think "A FileStream enabled table that you can access as a network file share and other standard File IO API’s" or "SQL Server File System in a Table")

 

■FILESTREAM を有効化


FileTable を使用するためには SQL Server 2008 から追加された [FILESTREAM] の機能を有効にする必要があります。

それでは、FILESTREAM を有効にしてみます。

  1. [SQL Server 構成マネージャー] を実行します。
    image
  2. [SQL Server のサービス] → FILESTREAM を有効にするインスタンスを右クリック → [プロパティ] をクリックします。
    image
  3. [FILESTREAM] タブの
    [Transact-SQL アクセスに対して FILESTREAM を有効にする]
    [ファイル I/O アクセスに対して FILESTREAM を有効にする]
    を有効にして、[OK] をクリックします。
    image
  4. [SQL Server Management Studio] を実行します。
    image
  5. 対象のインスタンスを右クリック → [プロパティ] をクリックします。
    image
  6. [詳細設定] の [FILESTREAM アクセス レベル] を [有効なフル アクセス] に設定して、[OK] をクリックします。
    image

以上でサーバーとして、FILESTREAM を使用するための設定は完了です。

次にデータベースで FILESTREAM を使用できるようにします。
データベースで FILESTREAM を使用できるようにするためには以下の設定をします。
# 今回はデータベースを作成し終わった状態から設定をしていますが、データベースを作成するときに設定も可能です。

  1. 対象のデータベースを右クリック → [プロパティ] をクリックします。
    image
  2. [ファイル グループ] から [FILESTREAM] 用のファイルグループを追加します。
    image
  3. [ファイル] から [データの種類] が [FILESTREAM データ] のデータファイルを追加し [OK] をクリックします。
    ファイルグループは作成した FILESTREAM 用のファイルグループを指定し、[パス] には FileTable で保存するファイルを格納するフォルダを指定します。
    # SQL Server のサービスアカウントがアクセスできるフォルダの必要があります。
    image

以上で FILESTREAM の設定は完了です。
今回は SSMS で GUI を使用して操作をしましたがこれらの操作はクエリでも可能です。
クエリで実行する場合は MVP の松本さんがまとめてくださっている 以下の情報がとてもわかりやすいです。
SQL Server 2008 からの新機能 その26

■FileTable を設定


FileTable を使用するためには追加の設定が必要となります。

Denali CTP3 のデータベースのプロパティの [オプション] には FILESTREAM の設定として、[FAILESTREAM ディレクトリ名] と [FILESTREAM 非トランザクション アクセス] の 2 種類の項目が追加されています。
image

FileTable を使用する場合にはこれらを設定しておく必要があります。

[FILESTREAM ディレクトリ名] はファイルシステムとして FIleTable にアクセスをする際に使用するパスに設定がされます。

[FILESTREAM 非トランザクション アクセス] はファイルシステムとして直接 FileTable にアクセスする時のような非トランザクションアクセスで操作する際にの動作の制御になります。

Off アクセスできない
ReadOnly 読み取り専用で利用可
Full 制限なし

というような動作になるようです。

今回は以下のように設定をしています。
image

設定を変更する際には以下のダイアログが表示されますので [OK] をクリックします。
# 接続がすべて閉じられるので、データベースを使用している可能性のある場合は注意が必要ですね。
image

以下のクエリでも設定することが可能です。

USE [master]
GO
ALTER DATABASE [FILESTREAMDB] SET FILESTREAM( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N’File_Dir’ ) WITH NO_WAIT
GO

以上で、FileTable を使用するための準備は完了です。

続いて FileTable を使用したテーブルを作成してみたいと思います。
FileTable を右クリックして、[新しい FileTable] をクリックします。
image

FileTable ですが、Denali CTP3 のSSMS では GUI で操作をしても、クエリで作成する必要があります。
image

以下のクエリで FileTable を作成してみます。

CREATE TABLE FileTable1 AS FILETABLE
  WITH
  (
    FILETABLE_DIRECTORY = ‘FileTable1’,
    FILETABLE_COLLATE_FILENAME = database_default
  )
GO

クエリを実行すると FileTable が作成されます。
image

■ファイルシステムから FIleTable にアクセスをしてみる


それではファイルシステムとして FIleTable にアクセスをしてみたいと思います。
[FILESTREAM 非トランザクション アクセス] を [RadOnly] または [Full] にしている場合は SSMS で FIleTable を右クリックすると、[FileTable ディレクトリの探索] をクリックすることができます。
# [Off] の場合はグレーアウトしています。
image

この項目をクリックすると共有フォルダが開かれます。
image

これが FileTable をファイルシステムとして開いた状態になります。
# ファイルシステムとして直接アクセスする場合には SQL Server のサービスが起動している必要があります。

この時のディレクトリですが [\[サーバー名][ファイル I/O アクセスに対して FILESTREAM を有効にするの共有名][FILESTREAM ディレクトリ名][FileTable ディレクトリ名] となります。

ここで今まで設定をしてきたディレクトリ名が使用されてきます。

それではこの共有ディレクトリにファイルを格納してみます。
image

この状態で FIleTable に対して SELECT を実行してみます。

SELECT
    file_stream.GetFileNamespacePath(),
    *
FROM
    dbo.FileTable1

image

ファイルシステムに対しての変更がテーブルにも反映されているのが確認できますね。

ディレクトリ階層などもこのように認識されます。
image

ファイルの格納には FILESTREAM と同等の動きをするようで実際には FILESTREAM のデータファイルとして設定したディレクトリにフラットに格納がされているようなのですが、FILESTREAM の共有フォルダ経由でアクセスした場合は、階層構造が認識された状態で使用することが可能です。
image

クエリで FileTable のレコードを操作することでファイル名変更や削除をトランザクションをかけて実行するといったことも可能です。

これが FileTable の動作になります。
テーブル構造を考えなくても標準機能でファイルを階層として認識し、クエリで操作できるのは面白いですね。

SCVMM のライブラリのフォルダで利用できたりするとこれも面白そうですね。

軽く使ってみただけですがいろいろと調べてみたいことが満載です。

Written by masayuki.ozawa

8月 3rd, 2011 at 8:52 pm

Posted in SQL Server

Tagged with , ,

Leave a Reply

*