次期 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 を有効にしてみます。
- [SQL Server 構成マネージャー] を実行します。
- [SQL Server のサービス] → FILESTREAM を有効にするインスタンスを右クリック → [プロパティ] をクリックします。
- [FILESTREAM] タブの
[Transact-SQL アクセスに対して FILESTREAM を有効にする]
[ファイル I/O アクセスに対して FILESTREAM を有効にする]
を有効にして、[OK] をクリックします。 - [SQL Server Management Studio] を実行します。
- 対象のインスタンスを右クリック → [プロパティ] をクリックします。
- [詳細設定] の [FILESTREAM アクセス レベル] を [有効なフル アクセス] に設定して、[OK] をクリックします。
以上でサーバーとして、FILESTREAM を使用するための設定は完了です。
次にデータベースで FILESTREAM を使用できるようにします。
データベースで FILESTREAM を使用できるようにするためには以下の設定をします。
# 今回はデータベースを作成し終わった状態から設定をしていますが、データベースを作成するときに設定も可能です。
- 対象のデータベースを右クリック → [プロパティ] をクリックします。
- [ファイル グループ] から [FILESTREAM] 用のファイルグループを追加します。
- [ファイル] から [データの種類] が [FILESTREAM データ] のデータファイルを追加し [OK] をクリックします。
ファイルグループは作成した FILESTREAM 用のファイルグループを指定し、[パス] には FileTable で保存するファイルを格納するフォルダを指定します。
# SQL Server のサービスアカウントがアクセスできるフォルダの必要があります。
以上で FILESTREAM の設定は完了です。
今回は SSMS で GUI を使用して操作をしましたがこれらの操作はクエリでも可能です。
クエリで実行する場合は MVP の松本さんがまとめてくださっている 以下の情報がとてもわかりやすいです。
SQL Server 2008 からの新機能 その26
■FileTable を設定
FileTable を使用するためには追加の設定が必要となります。
Denali CTP3 のデータベースのプロパティの [オプション] には FILESTREAM の設定として、[FAILESTR
EAM ディレクトリ名] と [FILESTREAM 非トランザクション アクセス] の 2 種類の項目が追加されています。
FileTable を使用する場合にはこれらを設定しておく必要があります。
[FILESTREAM ディレクトリ名] はファイルシステムとして FIleTable にアクセスをする際に使用するパスに設定がされます。
[FILESTREAM 非トランザクション アクセス] はファイルシステムとして直接 FileTable にアクセスする時のような非トランザクションアクセスで操作する際にの動作の制御になります。
Off | アクセスできない |
ReadOnly | 読み取り専用で利用可 |
Full | 制限なし |
というような動作になるようです。
設定を変更する際には以下のダイアログが表示されますので [OK] をクリックします。
# 接続がすべて閉じられるので、データベースを使用している可能性のある場合は注意が必要ですね。
以下のクエリでも設定することが可能です。
USE [master] |
以上で、FileTable を使用するための準備は完了です。
続いて FileTable を使用したテーブルを作成してみたいと思います。
FileTable を右クリックして、[新しい FileTable] をクリックします。
FileTable ですが、Denali CTP3 のSSMS では GUI で操作をしても、クエリで作成する必要があります。
以下のクエリで FileTable を作成してみます。
CREATE TABLE FileTable1 AS FILETABLE |
■ファイルシステムから FIleTable にアクセスをしてみる
それではファイルシステムとして FIleTable にアクセスをしてみたいと思います。
[FILESTREAM 非トランザクション アクセス] を [RadOnly] または [Full] にしている場合は SSMS で FIleTable を右クリックすると、[FileTable ディレクトリの探索] をクリックすることができます。
# [Off] の場合はグレーアウトしています。
これが FileTable をファイルシステムとして開いた状態になります。
# ファイルシステムとして直接アクセスする場合には SQL Server のサービスが起動している必要があります。
この時のディレクトリですが [\[サーバー名][ファイル I/O アクセスに対して FILESTREAM を有効にするの共有名][FILESTREAM ディレクトリ名][FileTable ディレクトリ名] となります。
ここで今まで設定をしてきたディレクトリ名が使用されてきます。
この状態で FIleTable に対して SELECT を実行してみます。
SELECT |
ファイルシステムに対しての変更がテーブルにも反映されているのが確認できますね。
ファイルの格納には FILESTREAM と同等の動きをするようで実際には FILESTREAM のデータファイルとして設定したディレクトリにフラットに格納がされているようなのですが、FILESTREAM の共有フォルダ経由でアクセスした場合は、階層構造が認識された状態で使用することが可能です。
クエリで FileTable のレコードを操作することでファイル名変更や削除をトランザクションをかけて実行するといったことも可能です。
これが FileTable の動作になります。
テーブル構造を考えなくても標準機能でファイルを階層として認識し、クエリで操作できるのは面白いですね。
SCVMM のライブラリのフォルダで利用できたりするとこれも面白そうですね。
軽く使ってみただけですがいろいろと調べてみたいことが満載です。