ファイル I/O API を使用した FileTable へのアクセスAccess FileTables with File Input-Output APIs

適用対象: はいSQL Server いいえAzure SQL Database いいえAzure Synapse Analytics (SQL DW) いいえParallel Data Warehouse APPLIES TO: YesSQL Server NoAzure SQL Database NoAzure Synapse Analytics (SQL DW) NoParallel Data Warehouse

FileTable でファイル システム I/O が動作するしくみについて説明します。Describes how file system I/O works on a FileTable.

FileTable でのファイル I/O API の使用Get Started Using File I/O APIs with FileTables

FileTable を使用する際、多くの場合は Windows ファイル システムとファイル I/O API が利用されます。The primary usage of FileTables is expected to be through the Windows file system and file I/O APIs. FileTable は、さまざまなファイル I/O API を利用した非トランザクション アクセスをサポートしています。FileTables support non-transactional access through the rich set of available file I/O APIs.

  1. 一般的に、ファイル I/O API は、ファイルまたはディレクトリの論理 UNC パスを取得することによって起動されます。File I/O API access typically begins by acquiring a logical UNC path for the file or directory. アプリケーションは、GetFileNamespacePath (Transact-SQL) 関数を含む Transact-SQLTransact-SQL ステートメントを使用して、ファイルまたはディレクトリの論理パスを取得できます。Applications can use a Transact-SQLTransact-SQL statement with the GetFileNamespacePath (Transact-SQL) function to obtain the logical path for the file or directory. 詳しくは、「 Work with Directories and Paths in FileTables」をご覧ください。For more information, see Work with Directories and Paths in FileTables.

  2. 次に、この論理パスを使用して、ファイルまたはディレクトリに対するハンドルを取得し、オブジェクトを操作します。Then the application uses this logical path to obtain a handle to the file or directory and do something with the object. CreateFile()、CreateDirectory() など、サポート対象のファイル システム API 関数にパスを渡して、ファイルを作成したり、開いたり、ハンドルを取得したりできます。The path can be passed to any supported file system API function, such as CreateFile() or CreateDirectory(), to create or open a file and obtain a handle. そのハンドルを使用することで、データのストリーミング、ディレクトリの列挙と編成、ファイル属性の取得と設定、ファイルまたはディレクトリの削除などの操作を実行できます。The handle can then be used to stream data, to enumerate or organize directories, to get or set file attributes, to delete files or directories, and so forth.

FileTable でのファイルおよびディレクトリの作成Creating Files and Directories in a FileTable

ファイル I/O API (CreateFile、CreateDirectory など) を呼び出すことで、FileTable にファイルまたはディレクトリを作成できます。A file or directory can be created in a FileTable by calling file I/O APIs such as CreateFile or CreateDirectory.

  • すべての CREATION_DISPOSITION フラグ、共有モード、およびアクセス モードがサポートされています。All creation disposition flags, share modes, and access modes are supported. これには、ファイルの作成、削除、およびインプレース変更が含まれます。This includes file creation, deletion and in-place modification. さらに、ディレクトリの作成と削除、名前の変更、移動の操作など、ファイル名前空間の更新もサポートされています。Also supported are File Namespace updates i.e. directory creation/deletion, rename and move operations.

  • 新しいファイルまたはディレクトリの作成は、基になる FileTable 内での新しい行の作成に対応します。The creation of a new file or directory corresponds to the creation of a new row in the underlying FileTable.

  • ファイルの場合、ストリーム データが file_stream 列に格納されます。ディレクトリの場合、この列は null になります。For files, the stream data is stored in the file_stream column; for directories, this column is null.

  • ファイルの場合、 is_directory 列に falseが格納されます。For files, the is_directory column contains false. ディレクトリの場合、この列に trueが格納されます。For directories, this column contains true.

  • 複数のファイル I/O 操作または Transact-SQLTransact-SQL 操作が同時に行われ、その影響が階層内の同じファイルまたはディレクトリに及ぶ場合、アクセスの共有とコンカレンシーが適用されます。Sharing and concurrency of access are enforced when multiple concurrent file I/O operations or Transact-SQLTransact-SQL operations affect the same file or directory in the hierarchy.

FileTable 内のファイルおよびディレクトリの読み取りReading Files and Directories in a FileTable

ストリームおよび属性データに対するすべてのファイル I/O アクセス操作に、 SQL ServerSQL Server の Read Committed 分離セマンティクスが適用されます。Read Committed isolation semantics are enforced in SQL ServerSQL Server for all file I/O access operations on stream and attribute data.

FileTable 内のファイルおよびディレクトリへの書き込みおよび更新Writing and Updating Files and Directories in a FileTable

  • FileTable に対するファイル I/O 書き込み操作または更新操作は、すべて非トランザクションです。All file I/O write or update operations on a FileTable are non-transactional. つまり、これらの操作にバインドされている SQL ServerSQL Server トランザクションは存在せず、ACID 保証はありません。That is, no SQL ServerSQL Server transaction is bound to these operations, and no ACID guarantees are provided.

  • FileTable に対するすべてのファイル I/O ストリーミング/インプレース更新がサポートされます。All file I/O streaming/in-place updates are supported for the FileTable.

  • ファイル I/O API を介して FILESTREAM のデータまたは属性を更新すると、FileTable 内の対応する file_stream および対応するファイル属性列が更新されます。Updates to the FILESTREAM data or attributes through file I/O APIs result in updates of the corresponding file_stream and file attribute columns in the FileTable.

FileTable 内のファイルおよびディレクトリの削除Deleting Files and Directories in a FileTable

ファイルまたはディレクトリを削除すると、Windows ファイル I/O API のすべてのセマンティクスが適用されます。All Windows file I/O API semantics are enforced when you delete a file or directory.

  • ディレクトリにファイルまたはサブディレクトリが含まれる場合、そのディレクトリの削除は失敗します。Deleting a directory fails if the directory contains any files or subdirectories.

  • ファイルまたはディレクトリを削除すると、対応する行が FileTable から削除されます。Deleting a file or directory removes the corresponding row from the FileTable. これは、 Transact-SQLTransact-SQL 操作を介して行を削除することと同じです。This is equivalent to deleting the row through a Transact-SQLTransact-SQL operation.

サポートされているファイル システム操作Supported File System Operations

FileTable は、以下のファイル システム操作に関連するファイル システム API をサポートしています。FileTables support the file system APIs related to the following file system operations:

  • ディレクトリ管理Directory Management

  • ファイル管理File Management

FileTable は、以下の操作をサポートしていません。FileTables do not support the following operations:

  • ディスク管理Disk Management

  • ボリューム管理Volume Management

  • トランザクション NTFSTransactional NTFS

FileTable へのファイル I/O アクセスに関するその他の注意点Additional Considerations for File I/O Access to FileTables

Always On 可用性グループでの仮想ネットワーク名 (VNN) の使用Using Virtual Network Names (VNNs) with Always On Availability Groups

FILESTREAM データまたは FileTable データを格納するデータベースが Always On 可用性グループに属する場合、ファイル システム API を介した FILESTREAM データまたは FileTable データへのすべてのアクセスではコンピューター名ではなく仮想ネットワーク名 (VNN) を使用する必要があります。When the database that contains FILESTREAM or FileTable data belongs to an Always On availability group, then all access to FILESTREAM or FileTable data through the file system APIs should use VNNs instead of computer names. 詳細については、「FILESTREAM および FileTable と AlwaysOn 可用性グループ (SQL Server)」を参照してください。For more information, see FILESTREAM and FileTable with Always On Availability Groups (SQL Server).

部分更新Partial Updates

FileTable 内の FILESTREAM データ用に GetFileNamespacePath (Transact-SQL) 関数を使用して取得された書き込み可能なハンドルは、FILESTREAM コンテンツのインプレース部分更新を実行するために使用できます。A writable handle obtained for FILESTREAM data in a FileTable by using the GetFileNamespacePath (Transact-SQL) function can be used to make in-place, partial updates to the FILESTREAM content. この操作は、トランザクション FILESTREAM アクセスとは異なります。トランザクション FILESTREAM アクセスでは、 OpenSQLFILESTREAM() を呼び出して明示的なトランザクション コンテキストを渡すことによって取得されたハンドルが使用されます。This behavior is different from the transacted FILESTREAM access through a handle obtained by calling OpenSQLFILESTREAM() and passing an explicit transaction context.

トランザクション セマンティクスTransactional Semantics

ファイル I/O API を使用して FileTable 内のファイルにアクセスする場合、このような操作はユーザー トランザクションと関連付けされず、次のような特徴を持ちます。When you access the files in a FileTable by using file I/O APIs, these operations are not associated with any user transactions, and have the following additional characteristics:

  • FileTable 内の FILESTREAM データの非トランザクション アクセスは、いずれのトランザクションにも関連付けられていないため、特定の分離セマンティクスがありません。Since non-transacted access to FILESTREAM data in a FileTable is not associated with any transaction, it does not have any specific isolation semantics. ただし、SQL ServerSQL Server では内部トランザクションを使用して、FileTable データに対してロックまたはコンカレンシーのセマンティクスを適用することができます。However SQL ServerSQL Server may use internal transactions to enforce locking or concurrency semantics on the FileTable data. このタイプの内部トランザクションは、すべて READ COMMITTED 分離によって実行されます。Any internal transactions of this type are done with read-committed isolation.

  • FILESTREAM データの非トランザクション操作に対する ACID 保証はありません。There are no ACID guarantees for these non-transacted operations on FILESTREAM data. 一貫性の保証は、ファイル システム内のアプリケーションで行われるファイル更新の場合と類似します。The consistency guarantees are similar to those for file updates made by applications in the file system.

  • このような変更はロールバックできません。These changes cannot be rolled back.

ただし、FileTable 内の FILESTREAM 列は、 OpenSqlFileStream() の呼び出しによるトランザクション FILESTREAM アクセスによって、アクセスすることもできます。However, the FILESTREAM column in a FileTable can also be accessed with transactional FILESTREAM access by calling OpenSqlFileStream(). この種のアクセスは完全にトランザクション アクセスであり、現在サポートされている全レベルのトランザクション一貫性を保持します。This kind of access can be fully transactional and will honor all the levels of transactional consistently that are currently supported.

コンカレンシー制御Concurrency Control

SQL ServerSQL Server では、ファイル システム アプリケーション間の FileTable アクセス、およびファイル システム アプリケーションと Transact-SQLTransact-SQL アプリケーション間の FileTable アクセスに対して、コンカレンシー制御が適用されます。enforces concurrency control for FileTable access among file system applications, and between file system applications and Transact-SQLTransact-SQL applications. このコンカレンシー制御は、FileTable の行に適切なロックを設定することによって実現されます。This concurrency control is achieved by taking appropriate locks on the FileTable rows.

トリガーTriggers

ファイル システムを利用して、ファイルまたはディレクトリ、あるいはその属性の作成、変更、または削除を行うと、FileTable 内で対応する挿入操作、更新操作、または削除操作が実行されます。Creating, modifying, or deleting files or directories or their attributes through the file system results in corresponding insert, update, or delete operations in the FileTable. そのような操作の中で、関連する Transact-SQLTransact-SQL DML トリガーが起動されます。Any associated Transact-SQLTransact-SQL DML triggers are fired as part of these operations.

FileTable でサポートされているファイル システム機能File System Functionality Supported in FileTables

機能Capability サポートされていますSupported 説明Comments
oplockOplocks はいYes レベル 2、レベル 1、バッチ、およびフィルターの各 oplock がサポートされます。There is support for Level 2, Level 1, Batch and Filter oplocks.
拡張属性Extended Attributes いいえNo
再解析ポイントReparse Points いいえNo
永続的 ACLPersistent ACLs いいえNo
名前付きストリームNamed Streams いいえNo
スパース ファイルSparse Files はいYes スパースかどうかはファイルにのみ設定できます。この設定はデータ ストリームの記憶域に影響します。Sparseness can be set only on files, and affects the storage of the data stream. FILESTREAM データは NTFS ボリュームに格納されるため、FileTable 機能では NTFS ファイル システムに要求を転送することによってスパース ファイルをサポートします。Since FILESTREAM data is stored on NTFS volumes, the FileTable feature supports sparse files by forwarding the requests to the NTFS file system.
圧縮Compression はいYes
暗号化Encryption はいYes
TxFTxF いいえNo
ファイル IDFile Ids いいえNo
オブジェクト IDObject Ids いいえNo
シンボリック リンクSymbolic links いいえNo
ハード リンクHard links いいえNo
短い名前Short names いいえNo
ディレクトリ変更の通知Directory change notifications いいえNo
バイト範囲ロックByte range locking はいYes バイト範囲ロックの要求は、NTFS ファイル システムに渡されます。Requests for byte range locking are passed to the NTFS file system.
メモリ マップ ファイルMemory mapped files いいえNo
キャンセル I/OCancel I/O はいYes
セキュリティSecurity いいえNo Windows 共有レベルのセキュリティと SQL ServerSQL Server のテーブルおよび列レベルのセキュリティが適用されます。Windows share level security and SQL ServerSQL Server table and column level security are enforced.
USN ジャーナルUSN journal いいえNo FileTable 内のファイルおよびディレクトリに対するメタデータの変更は、 SQL ServerSQL Server データベースの DML 操作です。Metadata changes to files and directories in a FileTable are DML operations on a SQL ServerSQL Server database. したがって、これらの操作は対応するデータベース ログ ファイルに記録されます。Therefore they are logged in the corresponding database log file. ただし、(サイズの変更を除き) NTFS USN ジャーナルには記録されません。However they are not logged in the NTFS USN journal (except for changes in size).

SQL ServerSQL Server の変更の追跡機能を使用して、同様の情報をキャプチャします。change tracking capabilities can be used to capture similar information.

参照See Also

FileTable へのファイルの読み込み Load Files into FileTables
Work with Directories and Paths in FileTables Work with Directories and Paths in FileTables
Transact SQL を使用した FileTable へのアクセス Access FileTables with Transact-SQL
FileTable DDL、関数、ストアド プロシージャ、およびビューFileTable DDL, Functions, Stored Procedures, and Views