FileTable 관리Manage FileTables

FileTable을 관리하는 데 사용되는 일반적인 관리 태스크에 대해 설명합니다.Describes common administrative tasks for managing FileTables.

FileTable 목록을 가져오려면 다음 카탈로그 뷰 중 하나를 쿼리합니다.To get a list of FileTables, query one of the following catalog views:

SELECT * FROM sys.filetables;  
GO  

SELECT * FROM sys.tables WHERE is_filetable = 1;  
GO  

연결된 FileTable을 만들 때 생성된 시스템 정의 개체 목록을 가져오려면 카탈로그 뷰 sys.filetable_system_defined_objects(Transact-SQL)를 쿼리합니다.To get a list of the system-defined objects that were created when the associated FileTables were created, query the catalog view sys.filetable_system_defined_objects (Transact-SQL).

SELECT object_id, OBJECT_NAME(object_id) AS 'Object Name'  
FROM sys.filetable_system_defined_objects;  
GO  

데이터베이스 수준에서 비트랜잭션 액세스 사용 해제 및 다시 설정 Disabling and Re-enabling Non-Transactional Access at the Database Level

특정 관리 태스크에 필요한 단독 액세스 권한을 획득하려면 비트랜잭션 액세스를 일시적으로 사용하지 않도록 설정해야 할 수 있습니다.To acquire the exclusive access that is required for certain administrative tasks, you may have to disable non-transactional access temporarily.

비트랜잭션 액세스 수준을 변경할 경우 ALTER DATABASE 문의 동작Behavior of the ALTER DATABASE statement when changing the level of non-transactional access

  • 비트랜잭션 액세스를 READ_ONLY 또는 OFF로 설정하면 ALTER DATABASE 명령은 요청한 작업과 충돌하는 열려 있는 파일 핸들이 있는 동안에는 사용자에게 제어를 반환하지 않습니다.When you set non-transactional access to READ_ONLY or OFF, the ALTER DATABASE command does not return control to the user as long as there are open file handles that conflict with the requested operation. 이 작업과 충돌하는 파일 핸들에는 다음과 같은 것이 있습니다.The file handles that conflict with this operation include the following:

    • 액세스를 NONE으로 설정하는 경우 모든 열려 있는 파일 핸들When you are setting access to NONE, all open file handles.

    • 액세스를 READ_ONLY로 설정하는 경우 쓰기 액세스를 위해 열린 모든 파일 핸들When you are setting access to READ_ONLY, all file handles opened for write access.

      열려 있는 파일 핸들을 중지하는 방법은 이 항목의 FileTable과 연결된 열려 있는 파일 핸들 중지 를 참조하세요.For information about killing open file handles, see Killing Open File Handles Associated with a FileTable in this topic.

      ALTER DATABASE 명령이 취소되거나 시간 초과로 종료된 경우에는 트랜잭션 액세스 수준이 변경되지 않습니다.If the ALTER DATABASE command is canceled or ends with a timeout, then the level of transactional access is not changed.

  • WITH <termination> 절(ROLLBACK AFTER integer [ SECONDS ] | ROLLBACK IMMEDIATE | NO_WAIT)이 포함된 ALTER DATABASE 문을 호출하면 열려 있는 모든 비트랜잭션 파일 핸들이 중지됩니다.If you call the ALTER DATABASE statement with a WITH <termination> clause (ROLLBACK AFTER integer [ SECONDS ] | ROLLBACK IMMEDIATE | NO_WAIT), then all open non-transactional file handles are killed.

경고

열려 있는 파일 핸들을 중지하면 저장하지 않은 데이터가 손실될 수 있습니다.Killing open file handles may cause users to lose unsaved data. 이 동작은 파일 시스템 자체의 동작과 일치합니다.This behavior is consistent with the behavior of the file system itself.

비트랜잭션 액세스를 사용하지 않도록 설정할 경우의 효과Effects of disabling non-transactional access

데이터베이스 수준에서 비트랜잭션 액세스 수준을 변경하면 데이터베이스 수준 디렉터리에 다음과 같은 영향을 줍니다.Changing the level of non-transactional access at the database level has the following effects on the FileTable directories under the database-level directory:

  • 액세스를 NONE으로 설정한 경우 모든 FileTable 디렉터리와 내용이 더 이상 액세스할 수 없거나 표시되지 않습니다.When you set access to NONE, then all the FileTable directories and their contents are no longer accessible or visible.

  • 액세스를 READ_ONLY로 설정한 경우 모든 FileTable 디렉터리와 내용도 읽기 전용이 됩니다.When you set access to READ_ONLY, then all the FileTable directories and their contents are also read-only.

    인스턴스 수준에서 FILESTREAM을 사용하지 않도록 설정하면 해당 인스턴스의 데이터베이스 수준 디렉터리와 이 디렉터리 아래의 FileTable 디렉터리에 다음과 같은 영향을 줍니다.Disabling FILESTREAM at the instance level has the following effects on the database-level directories on that instance, and the FileTable directories under them:

  • 인스턴스 수준에서 FILESTREAM을 사용하지 않도록 설정한 경우 인스턴스에 대한 데이터베이스 수준 디렉터리가 표시되지 않습니다.None of the database-level directories on the instance are visible if FILESTREAM is disabled at the instance level.

방법: 데이터베이스 수준에서 비트랜잭션 액세스 사용 해제 및 다시 설정 How To: Disable and Re-enable Non-Transactional Access at the Database Level

자세한 내용은 ALTER DATABASE SET 옵션(Transact-SQL)을 참조하세요.For more information, see ALTER DATABASE SET Options (Transact-SQL).

전체 비트랜잭션 액세스를 사용하지 않도록 설정하려면To disable full non-transactional access
ALTER DATABASE 문을 호출하고 NON_TRANSACTED_ACCESS 값을 READ_ONLY 또는 OFF로 설정합니다.Call the ALTER DATABASE statement and SET the value of NON_TRANSACTED_ACCESS to READ_ONLY or OFF.

-- Disable write access.  
ALTER DATABASE database_name  
SET FILESTREAM ( NON_TRANSACTED_ACCESS = READ_ONLY );  
GO  

-- Disable non-transactional access.  
ALTER DATABASE database_name  
SET FILESTREAM ( NON_TRANSACTED_ACCESS = OFF );  
GO  

전체 비트랜잭션 액세스를 다시 사용하도록 설정하려면To re-enable full non-transactional access
ALTER DATABASE 문을 호출하고 NON_TRANSACTED_ACCESS 값을 FULL로 설정합니다.Call the ALTER DATABASE statement and SET the value of NON_TRANSACTED_ACCESS to FULL.

ALTER DATABASE database_name  
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL );  
GO  

방법: 데이터베이스에서 FileTable의 가시성 보장 How to: Ensure the Visibility of the FileTables in a Database

다음 조건에 모두 해당하는 경우 데이터베이스 수준 디렉터리와 이 디렉터리 아래의 FileTable 디렉터리가 표시됩니다.A database-level directory and the FileTable directories under it are visible when all of these conditions are true:

  1. 인스턴스 수준에서 FILESTREAM을 사용하도록 설정한 경우FILESTREAM is enabled at the instance level.

  2. 데이터베이스 수준에서 비트랜잭션 액세스를 사용하도록 설정한 경우Non-transactional access is enabled at the database level.

  3. 데이터베이스 수준에서 유효한 디렉터리를 지정한 경우A valid directory has been specified at the database level.

테이블 수준에서 FileTable 네임스페이스 사용 해제 및 다시 설정 Disabling and Re-enabling the FileTable Namespace at the Table Level

FileTable 네임스페이스를 사용하지 않도록 설정하면 FileTable과 함께 만들어진 모든 시스템 정의 제약 조건 및 트리거도 사용하지 않도록 설정됩니다.Disabling the FileTable namespace disables all the system-defined constraints and triggers that were created with the FileTable. 이는 FileTable 의미 체계를 적용해야 하는 부담 없이 Transact-SQLTransact-SQL 작업을 사용하여 FileTable을 대규모로 다시 구성해야 하는 경우에 유용합니다.This is useful in cases where a FileTable has to be reorganized on a large scale by using Transact-SQLTransact-SQL operations without incurring the expense of enforcing FileTable semantics. 하지만 이러한 작업으로 인해 FileTable이 일관성 없는 상태가 되고 FILETABLE 네임스페이스를 다시 사용하도록 설정하는 작업을 수행하지 못하게 될 수 있습니다.However these operations can leave the FileTable in an inconsistent state, and can prevent the re-enabling of the FileTable namespace.

FileTable 네임스페이스를 사용하지 않도록 설정하면 다음과 같은 결과가 나타납니다.Disabling a FileTable namespace has the following results:

  • FileTable 열과 데이터는 테이블에서 실제로 삭제되지 않습니다.FileTable columns and data are not physically dropped from the table.

  • FileTable 디렉터리와 이 디렉터리에 포함된 파일 및 디렉터리가 파일 시스템에서 사라지고 파일 I/O 액세스 기능에 대해 사용할 수 없습니다.The FileTable directory and the files and directories that it contains disappear from the file system and are not available for file i/o access.

  • 시스템 정의 FileTable 열은 삭제하거나 다시 만들 수 없지만 DML 작업 시 일반 열과 동일하게 동작합니다.System-defined FileTable columns cannot be dropped and recreated; otherwise, however, they behave like ordinary columns for DML operations.

  • 열려 있는 파일 핸들이 있으면 FileTable 제약 조건을 사용하지 않도록 설정할 수 없습니다. 그렇게 하려면 테이블에 대한 스키마 잠금이 필요합니다.Open file handles prevent the FileTable constraints from being disabled, since this operation requires a schema lock on the table.

  • FileTable 네임스페이스를 사용하지 않도록 설정하면 시스템 정의 제약 조건 및 트리거를 포함한 모든 FileTable 의미 체계의 적용이 중지됩니다.Enforcement of all the FileTable semantics, including system-defined constraints and triggers, stops after the FileTable namespace is disabled.

    FileTable 네임스페이스를 다시 사용하도록 설정하면 다음과 같은 결과가 나타납니다.Re-enabling a FileTable namespace has the following results:

  • FileTable의 일관성이 검사됩니다.The FileTable is checked for consistency. 불일치가 발견되면 오류가 발생하고 FileTable이 사용되지 않는 상태로 유지되고, 그렇지 않으면 FileTable이 다시 사용하도록 설정됩니다.If inconsistencies are found, then an error is raised and the FileTable remains disabled; otherwise, the FileTable is re-enabled.

  • 시스템 정의 제약 조건 및 트리거를 포함하여 FileTable 의미 체계의 적용이 복원됩니다.The enforcement of FileTable semantics, including system-defined constraints and triggers, is restored.

  • FileTable 디렉터리와 이 디렉터리에 포함된 파일 및 디렉터리가 파일 시스템에 표시되고 파일 I/O 액세스 기능을 사용할 수 있습니다.The FileTable directory and the files and directories that it contains become visible in the file system and become available for file i/o access.

방법: 테이블 수준에서 FileTable 네임스페이스 사용 해제 및 다시 설정 How To: Disable and Re-enable the FileTable Namespace at the Table Level

{ ENABLE | DISABLE } FILETABLE_NAMESPACE 옵션을 사용하여 ALTER TABLE 문을 호출합니다.Call the ALTER TABLE statement with the { ENABLE | DISABLE } FILETABLE_NAMESPACE option.

FileTable 네임스페이스를 사용하지 않도록 설정하려면To disable the FileTable namespace

ALTER TABLE filetable_name  
DISABLE FILETABLE_NAMESPACE;  
GO  

FileTable 네임스페이스를 다시 사용하도록 설정하려면To re-enable the FileTable namespace

ALTER TABLE filetable_name  
ENABLE FILETABLE_NAMESPACE;  
GO  

FileTable과 연결된 열려 있는 파일 핸들 중지 Killing Open File Handles Associated with a FileTable

FileTable에 저장된 파일에 대해 열려 있는 핸들이 있으면 특정 관리 태스크에 필요한 단독 액세스가 허용되지 않습니다.Open handles to the files stored in a FileTable can prevent the exclusive access that is required for certain administrative tasks. 긴급 태스크를 수행할 수 있도록 하려면 하나 이상의 FileTable과 연결된 열려 있는 파일 핸들을 중지해야 할 수 있습니다.To enable urgent tasks, you may have to kill open file handles associated with one or more FileTables.

경고

열려 있는 파일 핸들을 중지하면 저장하지 않은 데이터가 손실될 수 있습니다.Killing open file handles may cause users to lose unsaved data. 이 동작은 파일 시스템 자체의 동작과 일치합니다.This behavior is consistent with the behavior of the file system itself.

방법: FileTable과 연결된 열려 있는 파일 핸들 목록 가져오기 How To: Get a List of Open File Handles Associated with a FileTable

카탈로그 뷰 sys.dm_filestream_non_transacted_handles(Transact-SQL)를 쿼리합니다.Query the catalog view sys.dm_filestream_non_transacted_handles (Transact-SQL).

SELECT * FROM sys.dm_filestream_non_transacted_handles;  
GO  

방법: FileTable과 연결된 열려 있는 파일 핸들 중지 How To: Kill Open File Handles Associated with a FileTable

적절한 인수로 저장 프로시저 sp_kill_filestream_non_transacted_handles(Transact-SQL)를 호출하여 데이터베이스 또는 FileTable에 열려 있는 모든 파일 핸들을 중지하거나 특정 핸들을 중지합니다.Call the stored procedure sp_kill_filestream_non_transacted_handles (Transact-SQL) with the appropriate arguments to kill all open file handles in the database or in the FileTable, or to kill a specific handle.

USE database_name;  

-- Kill all open handles in all the filetables in the database.  
EXEC sp_kill_filestream_non_transacted_handles;  
GO  

-- Kill all open handles in a single filetable.  
EXEC sp_kill_filestream_non_transacted_handles @table_name = 'filetable_name';  
GO  

-- Kill a single handle.  
EXEC sp_kill_filestream_non_transacted_handles @handle_id = integer_handle_id;  
GO  

방법: FileTable이 보유한 잠금 식별 How to: Identify the Locks Held by FileTables

FileTable이 보유한 대부분의 잠금은 응용 프로그램에서 연 파일에 해당합니다.Most locks taken by FileTables correspond to files opened by applications.

열려 있는 파일과 연결된 잠금을 식별하려면To identify open files and the associated locks
동적 관리 뷰 sys.dm_tran_locks(Transact-SQL)request_owner_id 필드와 sys.dm_filestream_non_transacted_handles(Transact-SQL)fcb_id 필드를 조인합니다.Join the request_owner_id field in the dynamic management view sys.dm_tran_locks (Transact-SQL) with the fcb_id field in sys.dm_filestream_non_transacted_handles (Transact-SQL). 잠금이 열려 있는 하나의 열려 있는 파일 핸들에 해당하지 않는 경우도 있습니다.In some cases, the lock does not correspond to a single open file handle.

SELECT opened_file_name  
FROM sys.dm_filestream_non_transacted_handles  
WHERE fcb_id IN  
    ( SELECT request_owner_id FROM sys.dm_tran_locks );  
GO  

FileTable 보안 FileTable Security

FileTable에 저장되는 파일과 디렉터리에는 SQL Server 보안만 적용됩니다.The files and directories stored in FileTables are secured by SQL Server security only. 테이블 및 열 기반 보안은 파일 시스템 액세스와 Transact-SQLTransact-SQL 액세스에도 적용됩니다.Table and column-based security is enforced for file system access as well as Transact-SQLTransact-SQL access. Windows 파일 시스템 보안 API 및 ACL 설정은 지원되지 않습니다.Windows file system security APIs and ACL settings are not supported.

파일 데이터는 FileTable에 FILESTREAM 열로 저장되므로 FILESTREAM 파일 그룹과 컨테이너에 적용 가능한 보안 및 액세스 권한이 FileTable에도 적용됩니다.The security and access permissions that are applicable to FILESTREAM filegroups and containers also apply to FileTables, since the file data is stored as a FILESTREAM column in the FileTable.

FileTable 보안 및 Transact-SQL 액세스FileTable Security and Transact-SQL Access
Transact-SQLTransact-SQL 액세스는 FileTable의 데이터에 대해 다른 테이블과 동일한 방식으로 보호됩니다. access to data in FileTables is secured in the same way as any other table. 데이터를 액세스하거나 변경하는 모든 작업에 대해 적절한 테이블 및 열 수준 보안 검사가 수행됩니다.Appropriate table and column-level security checks are done for every operation that accesses or changes the data.

FileTable 보안 및 파일 시스템 액세스FileTable Security and File System Access
파일 시스템 API를 통해 FileTable에 저장된 파일 또는 디렉터리에 대한 핸들을 열려면 FileTable의 전체 행에 대한 적절한 SQL ServerSQL Server 권한(테이블 수준 권한)이 있어야 합니다.File system APIs require appropriate SQL ServerSQL Server permissions on the entire row in the FileTable (that is, table-level permission) to open a handle to a file or directory stored in the FileTable. 사용자에게 FileTable의 모든 열에 대한 적절한 SQL ServerSQL Server 권한이 없으면 파일 시스템 액세스가 거부됩니다.If the user does not have the appropriate SQL ServerSQL Server permission on any column in the FileTable, then file system access is denied.

백업과 FileTable Backup and FileTables

SQL ServerSQL Server 를 사용하여 FileTable을 백업하면 FILESTREAM 데이터가 데이터베이스에 구조화된 데이터와 함께 백업됩니다.When you use SQL ServerSQL Server to back up a FileTable, the FILESTREAM data is backed up with the structured data in the database. FILESTREAM 데이터를 관계형 데이터와 함께 백업하지 않으려면 부분 백업을 사용하여 FILESTREAM 파일 그룹을 제외할 수 있습니다.If you do not want to back up FILESTREAM data with relational data, you can use a partial backup to exclude FILESTREAM filegroups.

FileTable 백업의 트랜잭션 일관성Transactional Consistency of FileTable Backups

백업, 로그 백업 및 트랜잭션 복제를 비롯한 많은 관리 도구와 작업에서는 트랜잭션 로그를 읽음으로써 트랜잭션 차원에서 일관된 데이터를 읽습니다.Many administrative tools and operations, (including backup, log backup, and transactional replication) read transactionally consistent data by reading the transaction logs. 이때 트랜잭션의 일부로 업데이트된 FILESTREAM 데이터를 읽게 됩니다.At this time, they read any FILESTREAM data updated as part of a transaction. 데이터베이스 수준에서 비트랜잭션 액세스가 사용하도록 설정되지 않은 경우 이러한 도구 및 작업은 전체 트랜잭션에 일관되게 작동합니다.When non-transactional access is not enabled at the database level, these tools and operations work with full transactional consistency.

그러나 전체 비트랜잭션 액세스가 사용하도록 설정되어 있으면 FileTable에는 도구 또는 프로세스가 트랜잭션 로그에서 읽고 있는 트랜잭션보다 더 최근에 비트랜잭션 업데이트를 통해 업데이트된 데이터가 포함될 수 있습니다.However, when full non-transactional access is enabled, then a FileTable could contain data that was updated more recently (through a non-transactional update) than the transaction that the tool or process is reading from the transaction log. 즉, 특정 트랜잭션에 대한 "지정 시간" 복원 작업에 해당 트랜잭션보다 최신 상태인 FILESTREAM 데이터가 포함될 수 있습니다.This means that a “point in time” restore operation to a specific transaction may contain FILESTREAM data that is more recent than that transaction. 이는 FileTable에 대한 비트랜잭션 업데이트가 허용될 때의 예상 동작입니다.This is the expected behavior when non-transactional updates are allowed on FileTables.

SQL Server Profiler와 FileTable SQL Server Profiler and FileTables

SQL ServerSQL Server Profiler는 FileTable에 저장되는 파일에 대한 추적 출력에서 Windows 파일 열기 및 파일 닫기 작업을 캡처할 수 있습니다. Profiler can capture the Windows File Open and File Close operations in trace output for files that are stored in a FileTable.

감사와 FileTable Auditing and FileTables

다른 테이블과 마찬가지로 FileTable을 감사할 수 있습니다.FileTable can be audited just like any other table. 그러나 Win32 액세스 패턴은 집합 기반 작업이 아닙니다.However, Win32 access patterns are not set based operations. 파일 시스템의 단일 동작은 여러 개의 Transact-SQL DML 작업으로 변환됩니다.A single action in the file system translates into multiple Transact-SQL DML operations. 예를 들어 Microsoft Word에서 파일을 여는 동작은 여러 개의 열기/닫기/만들기/이름 바꾸기/삭제 작업과 해당하는 Transact-SQL DML 작업으로 변환됩니다.For example, opening a file in Microsoft Word translates into multiple open/close/create/rename/delete operations and corresponding Transact-SQL DML activities. 이로 인해 파일 시스템 동작 간의 레코드와 해당하는 Transact-SQL DML 감사 레코드 간의 상관 관계를 파악하기가 어려운 복잡한 감사 레코드가 만들어집니다.This results in verbose audit records where it is hard to correlate records between file system actions and corresponding Transact-SQL DML audit records.

DBCC와 FileTable DBCC and FileTables

DBCC CHECKCONSTRAINTS를 사용하여 시스템 정의 제약 조건을 비롯한 FileTable의 제약 조건을 확인할 수 있습니다.You can use DBCC CHECKCONSTRAINTS to validate the constraints on a FileTable including system-defined constraints.

참고 항목See Also

FileTable과 기타 SQL Server 기능 간 호환성 FileTable Compatibility with Other SQL Server Features
FileTable DDL, 함수, 저장 프로시저 및 뷰FileTable DDL, Functions, Stored Procedures, and Views