파일 입/출력 API를 사용하여 FileTable 액세스Access FileTables with File Input-Output APIs

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

CreateFile 또는 CreateDirectory 같은 파일 I/O API를 호출하여 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. 또한 FileNamespace 업데이트, 즉 디렉터리 만들기/삭제, 이름 바꾸기 및 이동 작업도 지원됩니다.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

커밋된 읽기 격리 의미 체계는 SQL ServerSQL Server 에서 스트림 및 특성 데이터에 대한 모든 파일 I/O 액세스 작업에 적용됩니다.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 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. 자세한 내용은 Always On 가용성 그룹의 FILESTREAM 및 FileTable(SQL Server)을 참조하세요.For more information, see FILESTREAM and FileTable with Always On Availability Groups (SQL Server).

부분 업데이트 Partial Updates

GetFileNamespacePath(Transact-SQL) 함수를 사용하여 FileTable에서 FILESTREAM용으로 가져온 쓰기 가능한 핸들은 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 액세스에는 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. 이러한 유형의 내부 트랜잭션은 커밋된 읽기 격리 수준으로 수행됩니다.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.

    그러나 OpenSqlFileStream()을 호출하여 트랜잭션 FILESTREAM 액세스를 통해 FileTable의 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 에서는 파일 시스템 응용 프로그램과 Transact-SQLTransact-SQL 응용 프로그램 간에는 물론 파일 시스템 응용 프로그램 간에도 FileTable 액세스에 동시성 제어를 적용합니다. 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
암호화Encryptiion 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