다음을 통해 공유


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

적용 대상: SQL Server

파일이 FileTable에 저장되는 디렉터리 구조에 대해 설명합니다.

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

다음 세 가지 함수를 사용하여 Transact-SQL에서 FileTable 디렉터리를 사용할 수 있습니다.

이 결과를 얻으려면 사용할 함수
특정 FileTable 또는 현재 데이터베이스에 대한 루트 수준 UNC 경로를 가져옵니다. FileTableRootPath(Transact-SQL)
FileTable의 파일 또는 디렉터리에 대한 절대 또는 상대 UNC 경로를 가져옵니다. GetFileNamespacePath(Transact-SQL)
경로를 제공하여 FileTable에서 지정된 파일 또는 디렉터리에 대한 경로 로케이터 ID 값을 가져옵니다. GetPathLocator(Transact-SQL)

이식 가능한 코드에 상대 경로 사용

코드와 애플리케이션을 현재 컴퓨터 및 데이터베이스와 독립적으로 유지하려면 절대 파일 경로를 사용하는 코드를 작성하지 마세요. 대신 다음 예와 같이 FileTableRootPath(Transact-SQL)GetFileNamespacePath(Transact-SQL)함수를 함께 사용하여 런타임에 파일의 전체 경로를 가져옵니다. 기본적으로 GetFileNamespacePath 함수는 데이터베이스의 루트 경로 아래에 있는 파일의 상대 경로를 반환합니다.

USE database_name;

DECLARE @root NVARCHAR(100);
DECLARE @fullpath NVARCHAR(1000);

SELECT @root = FileTableRootPath();

SELECT @fullpath = @root + file_stream.GetFileNamespacePath()
FROM filetable_name
WHERE name = N'document_name';

PRINT @fullpath;
GO

제한 사항

중첩 수준

Important

FileTable 디렉터리에 15개 이상의 하위 디렉터리를 저장할 수 없습니다. 15개 수준의 하위 디렉터리를 저장할 경우 최하위 수준에는 파일이 포함될 수 없습니다. 최하위 수준에 파일이 있으면 수준이 초과됩니다.

전체 경로 이름의 길이

Important

NTFS 파일 시스템은 Windows 셸 및 대부분의 Windows API의 260자 제한보다 훨씬 긴 경로 이름을 지원합니다. 따라서 전체 경로 이름이 260자를 초과하기 때문에 Windows 탐색기 또는 다른 많은 Windows 응용 프로그램에서 보거나 열 수 없는 Transact-SQL을 사용하여 FileTable의 파일 계층 구조에 파일을 만들 수 있습니다. 그러나 Transact-SQL을 사용하여 이러한 파일에 계속 액세스할 수 있습니다.

FileTable에 저장된 항목의 전체 경로

FileTable에 저장된 파일 또는 디렉터리의 전체 경로는 다음 요소로 시작됩니다.

  1. SQL Server 인스턴스 수준에서 FILESTREAM 파일 I/O 액세스에 사용할 수 있는 공유입니다.

  2. 데이터베이스 수준에서 지정된 DIRECTORY_NAME.

  3. FILETABLE_DIRECTORY은 FileTable 수준에서 지정됩니다.

해당 계층 구조는 다음과 같습니다.

\\<machine>\<instance-level FILESTREAM share>\<database-level directory>\<FileTable directory>\

이 디렉터리 계층 구조는 FileTable 파일 네임스페이스의 루트를 형성합니다. 이 디렉터리 계층에서 FileTable의 FILESTREAM 데이터는 파일 및 하위 디렉터리를 포함할 수 있는 하위 디렉터리로 저장됩니다.

인스턴스 수준 FILESTREAM 공유에서 만든 디렉터리 계층 구조는 가상 디렉터리 계층 구조임을 명심해야 합니다. 이 계층 구조는 SQL Server 데이터베이스에 저장되며 NTFS 파일 시스템에는 물리적으로 표시되지 않습니다. FILESTREAM 공유 및 FileTable에서 파일 및 디렉터리에 액세스하는 모든 작업은 파일 시스템에 포함된 SQL Server 구성 요소에 의해 가로채고 처리됩니다.

인스턴스, 데이터베이스 및 FileTable 수준에서 루트 디렉터리의 의미 체계

이 디렉터리 계층 구조는 다음 의미 체계를 관찰합니다.

  • 인스턴스 수준 FILESTREAM 공유는 관리자가 구성하고 서버의 속성으로 저장됩니다. SQL Server 구성 관리자를 사용하여 이 공유의 이름을 바꿀 수 있습니다. 서버가 다시 시작될 때까지 이름 바꾸기 작업이 적용되지 않습니다.

  • 새 데이터베이스를 만들 때 데이터베이스 수준 DIRECTORY_NAME은 기본적으로 null입니다. 관리자는 ALTER DATABASE 문을 사용하여 이 이름을 설정하거나 변경할 수 있습니다. 이름은 해당 인스턴스에서 고유해야 합니다(대/소문자를 구분하지 않는 비교).

  • 일반적으로 FileTable을 만들 때 CREATE TABLE 문의 일부로 FILETABLE_DIRECTORY 이름을 제공합니다. ALTER TABLE 명령을 사용하여 이 이름을 변경할 수 있습니다.

  • 파일 I/O 작업을 통해 이러한 루트 디렉터리의 이름을 바꿀 수 없습니다.

  • 전용 파일 핸들을 사용하여 이러한 루트 디렉터리를 열 수 없습니다.

FileTable 스키마의 is_directory 열

다음 표에서는 FileTable의 FILESTREAM 데이터를 포함하는 is_directory 열과 file_stream 열 간의 상호 작용에 대해 설명합니다.

is_directory 값 file_stream value 동작
FALSE NULL 시스템 정의 제약 조건에 의해 catch되는 잘못된 조합입니다.
FALSE <value> 항목은 파일을 나타냅니다.
TRUE NULL 항목은 디렉터리를 나타냅니다.
TRUE <value> 시스템 정의 제약 조건에 의해 catch되는 잘못된 조합입니다.

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

FILESTREAM 또는 FileTable 데이터를 포함하는 데이터베이스가 가용성 그룹에 속할 때: