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에 저장된 파일 또는 디렉터리의 전체 경로는 다음 요소로 시작됩니다.
SQL Server 인스턴스 수준에서 FILESTREAM 파일 I/O 액세스에 사용할 수 있는 공유입니다.
데이터베이스 수준에서 지정된
DIRECTORY_NAME
.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 데이터를 포함하는 데이터베이스가 가용성 그룹에 속할 때:
FILESTREAM 및 FileTable 함수가 컴퓨터 이름 대신 VNN(가상 네트워크 이름)을 사용하거나 반환합니다. 이러한 함수에 대한 자세한 내용은 Filestream 및 FileTable 함수(Transact-SQL)를 참조해 주세요.
파일 시스템 API를 통해서 FILESTREAM 또는 FileTable 데이터에 대한 모든 액세스에는 컴퓨터 이름 대신에 VNN을 사용해야만 합니다. 자세한 냉용은 Always On 가용성 그룹의 FILESTREAM 및 FileTable(SQL Server)을 참조하세요.