FileTable에서 디렉터리 및 경로 작업Work with Directories and Paths in FileTables

파일이 FileTable에 저장되는 디렉터리 구조에 대해 설명합니다.Describes the directory structure in which the files are stored in FileTables.

방법: FileTable에서 디렉터리 및 경로 작업 How To: Work with Directories and Paths in FileTables

다음 세 개의 함수를 사용하여 Transact-SQLTransact-SQL에서 FileTable 디렉터리 작업을 수행할 수 있습니다.You can use the following 3 functions to work with FileTable directories in Transact-SQLTransact-SQL:

원하는 결과To get this result 사용할 함수Use this function
특정 FileTable 또는 현재 데이터베이스에 대한 루트 수준 UNC 경로를 가져옵니다.Get the root-level UNC path for a specific FileTable or for the current database. FileTableRootPath(Transact-SQL)FileTableRootPath (Transact-SQL)
FileTable의 파일이나 디렉터리에 대한 절대 또는 상대 UNC 경로를 가져옵니다.Get an absolute or relative UNC path for a file or directory in a FileTable. GetFileNamespacePath(Transact-SQL)GetFileNamespacePath (Transact-SQL)
경로를 제공하여 FileTable의 지정된 파일 또는 디렉터리에 대한 경로 로케이터 ID 값을 가져옵니다.Get the path locator ID value for the specified file or directory in a FileTable, by providing the path. GetPathLocator(Transact-SQL)GetPathLocator (Transact-SQL)

방법: 이식 가능한 코드에 상대 경로 사용 How to: Use Relative Paths for Portable Code

코드와 응용 프로그램을 현재 컴퓨터 및 데이터베이스 외에서도 사용할 수 있도록 하려면 코드를 작성할 때 절대 파일 경로를 사용하지 않는 것이 좋습니다.To keep code and applications independent of the current computer and database, avoid writing code that relies on absolute file paths. 대신 다음 예와 같이 FileTableRootPath(Transact-SQL)GetFileNamespacePath(Transact-SQL)함수를 함께 사용하여 런타임에 파일의 전체 경로를 가져옵니다.Instead, get the complete path for a file at run time by using the FileTableRootPath (Transact-SQL) and GetFileNamespacePath (Transact-SQL)) functions together, as shown in the following example. 기본적으로 GetFileNamespacePath 함수는 데이터베이스의 루트 경로 아래에 있는 파일의 상대 경로를 반환합니다.By default, the GetFileNamespacePath function returns the relative path of the file under the root path for the database.

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 restrictions

중첩 수준 Nesting level

중요!!IMPORTANT!! 15개 수준을 초과하는 하위 디렉터리를 FileTable 디렉터리에 저장할 수 없습니다.You cannot store more than 15 levels of subdirectories in the FileTable directory. 15개 수준의 하위 디렉터리를 저장할 경우 최하위 수준에는 파일이 포함될 수 없습니다. 최하위 수준에 파일이 있으면 수준이 초과됩니다.When you store 15 levels of subdirectories, then the lowest level cannot contain files, since these files would represent an additional level.

전체 경로 이름의 길이 Length of full path name

중요!!IMPORTANT!! NTFS 파일 시스템은 Windows 셸 및 대부분의 Windows API의 260자 제한보다 긴 경로 이름을 지원합니다.The NTFS file system supports path names that are much longer than the 260-character limit of the Windows shell and most Windows APIs. 따라서 전체 경로 이름이 260자를 초과할 수 있기 때문에 Windows 탐색기 또는 다른 많은 Windows 응용 프로그램으로 보거나 열 수 없는 Transact-SQL을 사용하여 FileTable의 파일 계층에 파일을 만들 수 있습니다.Therefore it is possible to create files in the file hierarchy of a FileTable by using Transact-SQL that you cannot view or open with Windows Explorer or many other Windows applications, because the full path name exceeds 260 characters. 그러나 Transact-SQL을 사용해서도 이러한 파일에 계속 액세스할 수 있습니다.However you can continue to access these files by using Transact-SQL.

FileTable에 저장된 항목의 전체 경로 The full path to an item stored in a FileTable

FileTable에 저장된 파일 또는 디렉터리의 전체 경로는 다음 요소로 시작됩니다.The full path to a file or directory stored in a FileTable begins with the following elements:

  1. SQL ServerSQL Server 인스턴스 수준에서 파일 I/O 액세스를 위해 설정된 공유The share enabled for FILESTREAM file I/O access at the SQL ServerSQL Server instance level.

  2. 데이터베이스 수준에서 지정된 DIRECTORY_NAMEThe DIRECTORY_NAME specified at the database level.

  3. FileTable 수준에서 지정된 FILETABLE_DIRECTORYThe FILETABLE_DIRECTORY specified at the FileTable level.

    결과 계층 구조는 다음과 같습니다.The resulting hierarchy looks like this:

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

    이 디렉터리 계층 구조는 FileTable 파일 네임스페이스의 루트를 구성합니다.This directory hierarchy forms the root of the FileTable’s file namespace. 이 디렉터리 계층 구조 아래에 FileTable에 대한 FILESTREAM 데이터가 파일 및 하위 디렉터리로 저장되며, 이 하위 디렉터리도 파일과 하위 디렉터리를 포함할 수 있습니다.Under this directory hierarchy, the FILESTREAM data for the FileTable is stored as files, and as subdirectories which can also contain files and subdirectories.

    인스턴스 수준 FILESTREAM 공유에 만들어지는 디렉터리 계층 구조는 가상 디렉터리 계층 구조라는 것을 유념해야 합니다.It is important to keep in mind that the directory hierarchy created under the instance-level FILESTREAM share is a virtual directory hierarchy. 이 계층 구조는 SQL ServerSQL Server 데이터베이스에 저장되며 NTFS 파일 시스템에는 물리적으로 표시되지 않습니다.This hierarchy is stored in the SQL ServerSQL Server database and is not represented physically in the NTFS file system. 이 FILESTREAM 공유 및 여기에 포함된 FileTable에서 파일 및 디렉터리에 액세스하는 모든 작업은 파일 시스템에 포함된 SQL ServerSQL Server 구성 요소에서 가로채어 처리합니다.All operations that access files and directories under the FILESTREAM share and in the FileTables that it contains are intercepted and handled by a SQL ServerSQL Server component embedded in the file system.

인스턴스, 데이터베이스 및 FileTable 수준에서 루트 디렉터리의 의미 체계 The semantics of the root directories at the instance, database, and FileTable levels

이 디렉터리 계층 구조는 다음과 같은 의미 체계를 적용합니다.This directory hierarchy observes the following semantics:

  • 인스턴스 수준 FILESTREAM 공유는 관리자에 의해 구성되어 서버 속성으로 저장됩니다.The instance-level FILESTREAM share is configured by an administrator and stored as a property of the server. SQL ServerSQL Server 구성 관리자를 사용하여 이 공유의 이름을 바꿀 수 있습니다.You can rename this share by using SQL ServerSQL Server Configuration Manager. 이름 바꾸기 작업을 적용하려면 서버를 다시 시작해야 합니다.A renaming operation does not take effect until the server is restarted.

  • 새 데이터베이스를 만들 때 데이터베이스 수준 DIRECTORY_NAME 은 기본적으로 null입니다.The database-level DIRECTORY_NAME is null by default when you create a new database. 관리자는 ALTER DATABASE 문을 사용하여 이 이름을 설정하거나 변경할 수 있습니다.An administrator can set or change this name by using the ALTER DATABASE statement. 이름은 해당 인스턴스에서 고유해야 하며 대/소문자를 구분하지 않습니다.The name must be unique (in a case-insensitive comparison) in that instance.

  • 일반적으로 FileTable을 만들 때 FILETABLE_DIRECTORY 이름을 CREATE TABLE 문의 일부로 제공합니다.You typically provide the FILETABLE_DIRECTORY name as part of the CREATE TABLE statement when you create a FileTable. ALTER TABLE 명령을 사용하여 이 이름을 변경할 수 있습니다.You can change this name by using the ALTER TABLE command.

  • 파일 I/O 작업을 통해 이 루트 디렉터리의 이름을 바꿀 수 없습니다.You cannot rename these root directories through file I/O operations.

  • 이러한 루트 디렉터리는 단독 파일 핸들로 열 수 있습니다.You cannot open these root directories with exclusive file handles.

FileTable 스키마의 is_directory 열 The is_directory column in the FileTable schema

다음 표에서는 is_directory 열과 FileTable의 FILESTREAM 데이터가 포함된 file_stream 열 간의 상호 작용에 대해 설명합니다.The following table describes the interaction between the is_directory column and the file_stream column that contains the FILESTREAM data in a FileTable.

is_directory valueis_directory value file_stream valuefile_stream value 동작Behavior
FALSEFALSE NULLNULL 이는 시스템 정의 제약 조건에 의해 catch되는 잘못된 조합입니다.This is an invalid combination that will be caught by a system-defined constraint.
FALSEFALSE <값><value> 항목은 파일을 나타냅니다.The item represents a file.
TRUETRUE NULLNULL 항목은 디렉터리를 나타냅니다.The item represents a directory.
TRUETRUE <값><value> 이는 시스템 정의 제약 조건에 의해 catch되는 잘못된 조합입니다.This is an invalid combination that will be caught by a system-defined constraint.

AlwaysOn 가용성 그룹에 VNN(가상 네트워크 이름) 사용 Using Virtual Network Names (VNNs) with AlwaysOn Availability Groups

FILESTREAM 또는 FileTable 데이터가 포함된 데이터베이스가 AlwaysOn 가용성 그룹에 속하는 경우When the database that contains FILESTREAM or FileTable data belongs to an AlwaysOn availability group:

관련 항목:See Also

FileTable의 필수 구성 요소를 사용하도록 설정 Enable the Prerequisites for FileTable
FileTable 만들기, 변경 및 삭제 Create, Alter, and Drop FileTables
Transact-SQL을 사용하여 FileTable에 액세스 Access FileTables with Transact-SQL
파일 입/출력 API를 사용하여 FileTable 액세스 Access FileTables with File Input-Output APIs