FileTable에서 디렉터리 및 경로 작업
파일이 FileTable에 저장되는 디렉터리 구조에 대해 설명합니다.
방법: FileTable에서 디렉터리 및 경로 작업
다음 3개의 함수를 사용하여 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 수준에서 지정된 FILETABLE_DIRECTORY
해당 계층 구조는 다음과 같습니다.
\\<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되는 잘못된 조합입니다. |
AlwaysOn 가용성 그룹과 함께 VNN(가상 네트워크 이름) 사용
FILESTREAM 또는 FileTable 데이터가 포함된 데이터베이스가 AlwaysOn 가용성 그룹에 속하는 경우:
FILESTREAM 및 FileTable 함수가 컴퓨터 이름 대신 VNN(가상 네트워크 이름)을 사용하거나 반환합니다. 이러한 함수에 대한 자세한 내용은 Filestream 및 FileTable 함수(Transact-SQL)를 참조하세요.
파일 시스템 API를 통해서 FILESTREAM 또는 FileTable 데이터에 대한 모든 액세스에는 컴퓨터 이름 대신에 VNN을 사용해야만 합니다. 자세한 내용은 AlwaysOn 가용성 그룹을 사용한 FILESTREAM 및 FileTable(SQL Server)을 참조하세요.
참고 항목
FileTable의 필수 구성 요소 사용
FileTable 만들기, 변경 및 삭제
Transact-SQL을 사용하여 FileTable 액세스
파일 입출력 API를 사용하여 FileTable에 액세스