파일 입출력 API를 사용하여 FileTable에 액세스
적용 대상: SQL Server
FileTable에서 파일 시스템 I/O가 작동하는 방식에 대해 설명합니다.
FileTable에서 파일 I/O API 사용 시작
FileTable의 기본 사용은 Windows 파일 시스템 및 파일 I/O API를 통해 사용해야 합니다. FileTable은 사용 가능한 다양한 파일 I/O API 집합을 통해 트랜잭션이 아닌 액세스를 지원합니다.
파일 I/O API 액세스는 일반적으로 파일 또는 디렉터리에 대한 논리적 UNC 경로를 획득하여 시작됩니다. 애플리케이션은 GetFileNamespacePath(Transact-SQL) 함수와 함께 Transact-SQL 문을 사용하여 파일 또는 디렉터리에 대한 논리 경로를 가져올 수 있습니다. 자세한 내용은 FileTable에서 디렉터리 및 경로 작업을 참조하십시오.
그러면 애플리케이션에서는 이 논리 경로를 사용하여 파일 또는 디렉터리에 대한 핸들을 가져오고 개체에 대해 일부 작업을 수행합니다. 경로를 CreateFile() 또는 CreateDirectory()와 같은 지원되는 파일 시스템 API 함수에 전달하여 파일을 만들거나 열고 핸들을 가져올 수 있습니다. 그런 다음 핸들을 사용하여 데이터를 스트리밍하고, 디렉터리를 열거하거나 구성하고, 파일 특성을 가져오거나 설정하고, 파일 또는 디렉터리를 삭제하는 등의 작업을 수행할 수 있습니다.
FileTable에 파일 및 디렉터리 만들기
CreateFile 또는 CreateDirectory와 같은 파일 I/O API를 호출하여 FileTable에서 파일 또는 디렉터리를 만들 수 있습니다.
모든 만들기 처리 플래그, 공유 모드 및 액세스 모드가 지원됩니다. 여기에는 파일 만들기, 삭제 및 현재 위치 수정이 포함됩니다. 파일 네임스페이스 업데이트(예: 디렉터리 만들기/삭제, 이름 바꾸기 및 이동 작업)도 지원됩니다.
새 파일 또는 디렉터리를 만드는 것은 기본 FileTable에서 새 행을 만드는 데 해당합니다.
파일의 경우 스트림 데이터는 file_stream 열에 저장되는 반면 디렉터리의 경우에는 이 열이 null입니다.
파일의 경우 is_directory 열에 false가 포함되어 있고, 디렉터리의 경우 이 열에 true가 포함되어 있습니다.
여러 동시 파일 I/O 작업 또는 Transact-SQL 작업이 계층의 동일한 파일 또는 디렉터리에 영향을 줄 때 액세스의 공유 및 동시성이 적용됩니다.
FileTable의 파일 및 디렉터리 읽기
읽기 커밋된 격리 의미 체계는 스트림 및 특성 데이터에 대한 모든 파일 I/O 액세스 작업에 대해 SQL Server에 적용됩니다.
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 액세스 시 추가 고려 사항
Always On 가용성 그룹에 VNN(가상 네트워크 이름) 사용
FILESTREAM 또는 FileTable 데이터가 포함된 데이터베이스가 Always On 가용성 그룹에 속하는 경우 파일 시스템 API를 통해 FILESTREAM 또는 FileTable 데이터에 대한 모든 액세스는 컴퓨터 이름 대신 VNN을 사용해야 합니다. 자세한 냉용은 Always On 가용성 그룹의 FILESTREAM 및 FileTable(SQL Server)을 참조하세요.
부분 업데이트
GetFileNamespacePath(Transact-SQL) 함수를 사용하여 FileTable의 FILESTREAM 데이터에 대해 가져온 쓰기 가능한 핸들을 사용하여 FILESTREAM 콘텐츠를 현재 위치 부분 업데이트할 수 있습니다. 이 동작은 OpenSQLFILESTREAM()을 호출하고 명시적 트랜잭션 컨텍스트를 전달하여 얻은 핸들을 통해 트랜잭션된 FILESTREAM 액세스와 다릅니다.
트랜잭션 의미 체계
파일 I/O API를 사용하여 FileTable의 파일에 액세스하는 경우 이러한 작업은 사용자 트랜잭션과 연결되지 않으며 다음과 같은 추가 특성이 있습니다.
FileTable의 FILESTREAM 데이터에 대한 트랜잭션되지 않은 액세스는 트랜잭션과 연결되지 않으므로 특정 격리 의미 체계가 없습니다. 그러나 SQL Server는 내부 트랜잭션을 사용하여 FileTable 데이터에 잠금 또는 동시성 의미 체계를 적용할 수 있습니다. 이러한 유형의 내부 트랜잭션은 커밋된 읽기 격리 수준으로 수행됩니다.
FILESTREAM 데이터에 대한 이러한 트랜잭션되지 않은 작업에 대한 ACID 보장은 없습니다. 일관성 보장은 파일 시스템의 애플리케이션에서 수행한 파일 업데이트와 유사합니다.
이러한 변경 내용은 롤백할 수 없습니다.
그러나 FileTable의 FILESTREAM 열은 OpenSqlFileStream()을 호출하여 트랜잭션 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, 함수, 저장 프로시저 및 뷰