파일 IO API를 사용하여 FileTable 액세스

FileTable에서 파일 시스템 I/O가 작동하는 방식에 대해 설명합니다.

항목 내용

수행할 작업…

  • FileTable에서 파일 I/O API 사용 시작

  • FileTable에서 파일 및 디렉터리 만들기

  • FileTable에서 파일 및 디렉터리 읽기

  • FileTable에서 파일 및 디렉터리 업데이트

  • FileTable에서 파일 및 디렉터리 삭제

자세한 정보

  • 지원되는 파일 시스템 작업

  • FileTable에 대한 파일 I/O 액세스 시 추가 고려 사항

    • AlwaysOn 가용성 그룹에 VNN(가상 네트워크 이름) 사용

    • 부분 업데이트

    • 트랜잭션 의미 체계

    • 동시성 제어

    • 트리거

  • FileTable에서 지원되는 파일 시스템 기능

FileTable에서 파일 I/O API 사용 시작

FileTable은 대개 Windows 파일 시스템 및 파일 I/O API를 통해 사용합니다. FileTable은 다양한 사용 가능한 파일 I/O API를 통한 비트랜잭션 액세스를 지원합니다.

  1. 파일 I/O API 액세스는 일반적으로 파일 또는 디렉터리에 대한 논리 UNC 경로를 가져오는 것으로 시작됩니다. 응용 프로그램에서는 GetFileNamespacePath(Transact-SQL) 함수와 함께 Transact-SQL 문을 사용하여 디렉터리 또는 파일에 대한 논리 경로를 가져올 수 있습니다. 자세한 내용은 FileTable에서 디렉터리 및 경로 작업을 참조하십시오.

  2. 그러면 응용 프로그램에서는 이 논리 경로를 사용하여 파일 또는 디렉터리에 대한 핸들을 가져오고 개체에 대해 일부 작업을 수행합니다. 경로를 CreateFile() 또는 CreateDirectory()와 같은 지원되는 파일 시스템 API 함수에 전달하여 파일을 만들거나 열고 핸들을 가져올 수 있습니다. 그런 다음 핸들을 사용하여 데이터 스트리밍, 디렉터리 열거 또는 구성, 파일 특성 가져오기 또는 설정, 파일 또는 디렉터리 삭제 등과 같은 작업을 수행할 수 있습니다.

[맨 위]

FileTable에 파일 및 디렉터리 만들기

CreateFile 또는 CreateDirectory 같은 파일 I/O API를 호출하여 FileTable에서 파일 또는 디렉터리를 만들 수 있습니다.

  • 모든 CREATION_DISPOSITION 플래그, 공유 모드 및 액세스 모드가 지원됩니다. 여기에는 파일 만들기, 삭제 및 현재 위치 수정이 포함됩니다. 또한 FileNamespace 업데이트, 즉 디렉터리 만들기/삭제, 이름 바꾸기 및 이동 작업도 지원됩니다.

  • 새 파일 또는 디렉터리를 만드는 것은 기본 FileTable에 새 행을 만드는 것에 해당합니다.

  • 파일의 경우 스트림 데이터는 file_stream 열에 저장되는 반면 디렉터리의 경우에는 이 열이 null입니다.

  • 파일의 경우 is_directory 열에 false가 포함되어 있고, 디렉터리의 경우 이 열에 true가 포함되어 있습니다.

  • 액세스 공유 및 동시성은 여러 동시 파일 I/O 작업 또는 Transact-SQL 작업이 계층 구조 내의 동일한 파일 또는 디렉터리에 영향을 주는 경우에 적용됩니다.

[맨 위]

FileTable의 파일 및 디렉터리 읽기

커밋된 읽기 격리 의미 체계는 SQL Server에서 스트림 및 특성 데이터에 대한 모든 파일 I/O 액세스 작업에 적용됩니다.

[맨 위]

FileTable의 파일 및 디렉터리 쓰기와 업데이트

  • FileTable에 대한 모든 파일 I/O 쓰기 또는 업데이트 작업은 비트랜잭션 방식으로 수행됩니다. 즉, 이러한 작업에는 SQL Server 트랜잭션이 바인딩되지 않고, ACID가 보장되지 않습니다.

  • FileTable에 대한 모든 파일 I/O 스트리밍/현재 위치 업데이트는 지원됩니다.

  • 파일 I/O API를 사용하는 모든 FILESTREAM 데이터 또는 특성에 대한 업데이트는 FileTable에서 해당 file_stream 및 파일 특성 열을 업데이트합니다.

[맨 위]

FileTable의 파일 및 디렉터리 삭제

모든 Windows 파일 I/O API 의미 체계는 파일 또는 디렉터리를 삭제하면 적용됩니다.

  • 디렉터리에 파일 하위 디렉터리가 있는 경우 디렉터리가 삭제되지 않습니다.

  • 파일 또는 디렉터리를 삭제하면 FileTable에서 해당 행이 제거됩니다. 이 작업은 Transact-SQL 작업을 통해 해당 행을 삭제하는 것과 같습니다.

[맨 위]

지원되는 파일 시스템 작업

FileTable은 다음 파일 시스템 작업과 관련된 파일 시스템 API를 지원합니다.

  • 디렉터리 관리

  • 파일 관리

FileTable은 다음 작업을 지원하지 않습니다.

  • 디스크 관리

  • 볼륨 관리

  • 트랜잭션 NTFS

[맨 위]

FileTable에 대한 파일 I/O 액세스 시 추가 고려 사항

AlwaysOn 가용성 그룹에 VNN(가상 네트워크 이름) 사용

FILESTREAM 또는 FileTable 데이터가 포함된 데이터베이스가 AlwaysOn 가용성 그룹에 속하는 경우 파일 시스템 API를 통한 FILESTREAM 또는 FileTable 데이터에 대한 모든 액세스에는 컴퓨터 이름 대신 VNN이 사용됩니다. 자세한 내용은 AlwaysOn 가용성 그룹의 FILESTREAM 및 FileTable(SQL Server)을 참조하십시오.

부분 업데이트

GetFileNamespacePath(Transact-SQL) 함수를 사용하여 FileTable에서 FILESTREAM용으로 가져온 쓰기 가능한 핸들은 FILESTREAM 내용을 현재 위치에서 부분적으로 업데이트하는 데 사용할 수 있습니다. 이와 달리 트랜잭션된 FILESTREAM 액세스에는 **OpenSQLFILESTREAM()**을 호출하고 명시적 트랜잭션 컨텍스트를 전달하여 가져온 핸들이 사용됩니다.

[맨 위]

트랜잭션 의미 체계

파일 I/O API를 사용하여 FileTable의 파일에 액세스할 경우 이러한 작업은 어떤 사용자 트랜잭션과도 연관되지 않으며 다음과 같은 특징도 있습니다.

  • FileTable의 FILESTREAM 데이터에 대한 비트랜잭션 액세스는 어떤 트랜잭션과도 연관되지 않으므로 특정 격리 의미 체계가 없습니다. 그러나 SQL Server에서는 내부 트랜잭션을 사용하여 FileTable 데이터에 대해 잠금/동시성 의미 체계를 적용할 수 있습니다. 이러한 유형의 내부 트랜잭션은 커밋된 읽기 격리 수준으로 수행됩니다.

  • 이와 같이 FILESTREAM 데이터에 대한 비트랜잭션 작업에는 ACID가 보장되지 않습니다. 일관성은 파일 시스템에서 파일이 자동으로 업데이트될 때와 유사하게 보장됩니다.

  • 이러한 변경은 롤백할 수 없습니다.

그러나 **OpenSqlFileStream()**을 호출하여 트랜잭션 FILESTREAM 액세스를 통해 FileTable의 FILESTREAM 열에 액세스할 수도 있습니다. 이러한 종류의 액세스는 완전한 트랜잭션이 될 수 있으며 현재 지원되는 모든 트랜잭션 일관성 수준을 유지합니다.

[맨 위]

동시성 제어

SQL Server에서는 파일 시스템 응용 프로그램과 Transact-SQL 응용 프로그램 간에는 물론 파일 시스템 응용 프로그램 간에도 FileTable 액세스에 동시성 제어를 적용합니다. 이 동시성 제어는 FileTable 행에 대해 적절한 잠금을 얻음으로써 수행됩니다.

[맨 위]

트리거

파일 시스템을 통해 파일, 디렉터리 또는 해당 특성 만들기, 수정, 삭제 작업을 수행하면 FileTable에서는 해당되는 삽입, 업데이트 또는 삭제 작업이 수행됩니다. 또한 연결된 모든 Transact-SQL DML 트리거가 이러한 작업의 일부로 실행됩니다.

[맨 위]

FileTable에서 지원되는 파일 시스템 기능

기능

지원됨

설명

Oplock

수준 2, 수준 1, 일괄 처리 및 필터 oplock을 지원합니다.

확장 특성

아니요

구문 재분석 지점

아니요

영구 ACL

아니요

명명된 스트림

아니요

스파스 파일

스파스는 파일에 대해서만 설정할 수 있으며 데이터 스트림 저장소에는 영향을 줍니다. FILESTREAM 데이터는 NTFS 볼륨에 저장되므로 FileTable 기능은 NTFS 파일 시스템에 대한 요청을 전달하여 스파스 파일을 지원합니다.

압축

암호화

TxF

아니요

파일 ID

아니요

개체 ID

아니요

심볼 링크

아니요

하드 링크

아니요

짧은 이름

아니요

디렉터리 변경 알림

아니요

바이트 범위 잠금

바이트 범위 잠금에 대한 요청은 NTFS 파일 시스템에 전달됩니다.

메모리 매핑된 파일

아니요

취소 I/O

보안

아니요

Windows 공유 수준 보안과 SQL Server의 테이블 및 열 수준 보안이 적용됩니다.

USN 저널

아니요

FileTable의 파일 및 디렉터리에 대한 메타데이터 변경은 SQL Server데이터베이스에 대한 DML 작업입니다. 따라서 변경 내용이 해당 데이터베이스 로그 파일에 기록됩니다. 그러나 크기를 변경한 경우를 제외하고 NTFS USN 저널에는 변경 내용이 기록되지 않습니다.

유사한 정보를 캡처하기 위해 SQL Server의 변경 내용 추적 기능을 사용할 수 있습니다.

[맨 위]

참고 항목

개념

FileTable로 파일 로드

FileTable에서 디렉터리 및 경로 작업

Transact-SQL을 사용하여 FileTable에 액세스

FileTable DDL, 함수, 저장 프로시저 및 뷰