FileTable에서 디렉터리 및 경로 작업
파일이 FileTable에 저장되는 디렉터리 구조에 대해 설명합니다.
항목 내용
수행할 작업…
FileTable에서 디렉터리 및 경로 작업
이식 가능한 코드에 상대 경로 사용
자세한 정보
중요 제한 사항
중첩 수준
전체 경로 이름의 길이
FileTable에 저장된 항목의 전체 경로
인스턴스, 데이터베이스 및 FileTable 수준에서 루트 디렉터리의 의미 체계
FileTable 스키마의 is_directory 열
AlwaysOn 가용성 그룹에 VNN(가상 네트워크 이름) 사용
방법: FileTable에서 디렉터리 및 경로 작업
다음 세 개의 함수를 사용하여 Transact-SQL에서 FileTable 디렉터리 작업을 수행할 수 있습니다.
원하는 결과 |
사용할 함수 |
---|---|
특정 FileTable 또는 현재 데이터베이스에 대한 루트 수준 UNC 경로를 가져옵니다. |
|
FileTable의 파일이나 디렉터리에 대한 절대 또는 상대 UNC 경로를 가져옵니다. |
|
경로를 제공하여 FileTable의 지정된 파일 또는 디렉터리에 대한 경로 로케이터 ID 값을 가져옵니다. |
[맨 위]
방법: 이식 가능한 코드에 상대 경로 사용
코드와 응용 프로그램을 현재 컴퓨터 및 데이터베이스 외에서도 사용할 수 있도록 하려면 코드를 작성할 때 절대 파일 경로를 사용하지 않는 것이 좋습니다. 대신 다음 예와 같이 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
[맨 위]
중요 제한 사항
중첩 수준
중요 |
---|
15개 수준을 초과하는 하위 디렉터리를 FileTable 디렉터리에 저장할 수 없습니다. 15개 수준의 하위 디렉터리를 저장할 경우 최하위 수준에는 파일이 포함될 수 없습니다. 최하위 수준에 파일이 있으면 수준이 초과됩니다. |
전체 경로 이름의 길이
중요 |
---|
NTFS 파일 시스템은 Windows 셸 및 대부분의 Windows API의 260자 제한보다 긴 경로 이름을 지원합니다. 따라서 전체 경로 이름이 260자를 초과할 수 있기 때문에 Windows 탐색기 또는 다른 많은 Windows 응용 프로그램으로 보거나 열 수 없는 Transact-SQL을 사용하여 FileTable의 파일 계층에 파일을 만들 수 있습니다. 그러나 Transact-SQL을 사용해서도 이러한 파일에 계속 액세스할 수 있습니다. |
FileTable에 저장된 항목의 전체 경로
FileTable에 저장된 파일 또는 디렉터리의 전체 경로는 다음 요소로 시작됩니다.
SQL Server 인스턴스 수준에서 파일 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을 만들 때 FILETABLE_DIRECTORY 이름을 CREATE TABLE 문의 일부로 제공합니다. ALTER TABLE 명령을 사용하여 이 이름을 변경할 수 있습니다.
파일 I/O 작업을 통해 이 루트 디렉터리의 이름을 바꿀 수 없습니다.
이러한 루트 디렉터리는 단독 파일 핸들로 열 수 있습니다.
[맨 위]
FileTable 스키마의 is_directory 열
다음 표에서는 is_directory 열과 FileTable의 FILESTREAM 데이터가 포함된 file_stream 열 간의 상호 작용에 대해 설명합니다.
is_directory 값 |
file_stream 값 |
동작 |
FALSE |
NULL |
이는 시스템 정의 제약 조건에 의해 catch되는 잘못된 조합입니다. |
FALSE |
<값> |
항목은 파일을 나타냅니다. |
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)을 참조하십시오.
[맨 위]