FileTable 관리

적용 대상:SQL Server

FileTable을 관리하기 위한 일반적인 관리 작업에 대해 설명합니다.

방법: FileTable 및 관련 개체 목록 가져오기

FileTable 목록을 얻으려면 다음 카탈로그 뷰 중 하나를 쿼리합니다.

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

연결된 FileTable을 만들 때 생성된 시스템 정의 개체 목록을 얻으려면 카탈로그 뷰 sys.filetable_system_defined_objects(Transact-SQL)를 쿼리합니다.

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

데이터베이스 수준에서 비 트랜잭션 액세스 사용 안 함 및 다시 사용

특정 관리 태스크에 필요한 단독 액세스 권한을 획득하려면 비트랜잭션 액세스를 일시적으로 사용하지 않도록 설정해야 할 수 있습니다.

트랜잭션이 아닌 액세스 수준을 변경할 때 ALTER DATABASE 문의 동작

  • 트랜잭션이 아닌 액세스를 READ_ONLY 또는 OFF로 설정하면 요청된 작업과 충돌하는 열린 파일 핸들이 있는 한 ALTER DATABASE 명령은 사용자에게 제어권을 반환하지 않습니다. 이 작업과 충돌하는 파일 핸들은 다음과 같습니다.

    • 액세스를 NONE으로 설정하는 경우 모든 열려 있는 파일 핸들

    • READ_ONLY 대한 액세스를 설정하는 경우 쓰기 액세스를 위해 모든 파일 핸들이 열립니다.

    열려 있는 파일 핸들을 죽이는 방법에 대한 자세한 내용은 이 항목의 FileTable과 연결된 열린 파일 핸들을 죽이는 것을 참조하세요.

    ALTER DATABASE 명령이 취소되거나 시간 제한으로 끝나는 경우 트랜잭션 액세스 수준은 변경되지 않습니다.

  • WITH <종료> 절을 사용하여 ALTER DATABASE 문을 호출하는 경우(ROLLBACK AFTER 정수 [ SECONDS ] | 즉시 롤백 | NO_WAIT)이면 열려 있는 모든 비 트랜잭션 파일 핸들이 종료됩니다.

경고

열려 있는 파일 핸들이 없으면 저장되지 않은 데이터가 손실될 수 있습니다. 이 동작은 파일 시스템 자체의 동작과 일치합니다.

비트랜잭션 액세스를 사용하지 않도록 설정의 영향

데이터베이스 수준에서 트랜잭션이 아닌 액세스 수준을 변경하면 데이터베이스 수준 디렉터리의 FileTable 디렉터리에 다음과 같은 영향을 줍니다.

  • NONE대한 액세스를 설정하면 모든 FileTable 디렉터리와 해당 콘텐츠가 더 이상 액세스하거나 표시되지 않습니다.

  • READ_ONLY 대한 액세스를 설정하면 모든 FileTable 디렉터리와 해당 콘텐츠도 읽기 전용입니다.

인스턴스 수준에서 FILESTREAM을 사용하지 않도록 설정하면 해당 인스턴스의 데이터베이스 수준 디렉터리와 그 아래의 FileTable 디렉터리에 다음과 같은 영향이 있습니다.

  • 인스턴스 수준에서 FILESTREAM을 사용하지 않도록 설정한 경우 인스턴스에 대한 데이터베이스 수준 디렉터리가 표시되지 않습니다.

방법: 데이터베이스 수준에서 비트랜잭션 액세스 사용 해제 및 다시 설정

자세한 내용은 ALTER DATABASE SET 옵션(Transact-SQL)을 참조하세요.

전체 비트랜잭션 액세스를 사용하지 않도록 설정하려면
ALTER DATABASE 문을 호출하고 NON_TRANSACTED_ACCESS 값을 READ_ONLY 또는 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  

전체 비트랜잭션 액세스를 다시 사용하도록 설정하려면
ALTER DATABASE 문을 호출하고 NON_TRANSACTED_ACCESS 값을 FULL설정합니다.

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

방법: 데이터베이스에서 FileTable의 가시성 보장

데이터베이스 수준 디렉터리와 그 아래에 있는 FileTable 디렉터리가 모두 충족되면 표시됩니다.

  1. FILESTREAM은 인스턴스 수준에서 사용하도록 설정됩니다.

  2. 데이터베이스 수준에서 비트랜잭션 액세스를 사용하도록 설정한 경우

  3. 데이터베이스 수준에서 유효한 디렉터리를 지정한 경우

테이블 수준에서 FileTable 네임스페이스 사용 해제 및 다시 설정

FileTable 네임스페이스를 사용하지 않도록 설정하면 FileTable과 함께 만들어진 모든 시스템 정의 제약 조건 및 트리거도 사용하지 않도록 설정됩니다. 이는 FileTable 의미 체계를 적용하지 않고 Transact-SQL 작업을 사용하여 대규모로 FileTable을 다시 구성해야 하는 경우에 유용합니다. 하지만 이러한 작업으로 인해 FileTable이 일관성 없는 상태가 되고 FILETABLE 네임스페이스를 다시 사용하도록 설정하는 작업을 수행하지 못하게 될 수 있습니다.

FileTable 네임스페이스를 사용하지 않도록 설정하면 다음과 같은 결과가 발생합니다.

  • FileTable 열 및 데이터는 테이블에서 물리적으로 삭제되지 않습니다.

  • FileTable 디렉터리와 이 디렉터리에 포함된 파일 및 디렉터리가 파일 시스템에서 사라지고 파일 I/O 액세스 기능에 대해 사용할 수 없습니다.

  • 시스템 정의 FileTable 열을 삭제하고 다시 만들 수 없습니다. 그렇지 않으면 DML 작업의 일반 열처럼 동작합니다.

  • 열려 있는 파일 핸들이 있으면 FileTable 제약 조건을 사용하지 않도록 설정할 수 없습니다. 그렇게 하려면 테이블에 대한 스키마 잠금이 필요합니다.

  • 시스템 정의 제약 조건 및 트리거를 포함하여 모든 FileTable 의미 체계의 적용은 FileTable 네임스페이스를 사용하지 않도록 설정한 후에 중지됩니다.

FileTable 네임스페이스를 다시 사용하도록 설정하면 다음과 같은 결과가 발생합니다.

  • FileTable의 일관성이 검사됩니다. 불일치가 발견되면 오류가 발생하고 FileTable이 비활성화된 상태로 유지됩니다. 그렇지 않으면 FileTable이 다시 사용하도록 설정됩니다.

  • 시스템 정의 제약 조건 및 트리거를 포함하여 FileTable 의미 체계의 적용이 복원됩니다.

  • FileTable 디렉터리와 해당 디렉터리에 포함된 파일 및 디렉터리가 파일 시스템에 표시되고 파일 i/o 액세스에 사용할 수 있게 됩니다.

방법: 테이블 수준에서 FileTable 네임스페이스 사용 안 함 및 다시 사용

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

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

ALTER TABLE filetable_name  
DISABLE FILETABLE_NAMESPACE;  
GO  

FileTable 네임스페이스를 다시 사용하도록 설정하려면

ALTER TABLE filetable_name  
ENABLE FILETABLE_NAMESPACE;  
GO  

FileTable과 연결된 열린 파일 핸들 차단

FileTable에 저장된 파일에 대해 열려 있는 핸들이 있으면 특정 관리 태스크에 필요한 단독 액세스가 허용되지 않습니다. 긴급 작업을 사용하려면 하나 이상의 FileTable과 연결된 열린 파일 핸들을 종료해야 할 수 있습니다.

경고

열려 있는 파일 핸들이 없으면 저장되지 않은 데이터가 손실될 수 있습니다. 이 동작은 파일 시스템 자체의 동작과 일치합니다.

방법: FileTable과 연결된 열려 있는 파일 핸들 목록 가져오기

카탈로그 뷰 sys.dm_filestream_non_transacted_handles 쿼리(Transact-SQL).

SELECT * FROM sys.dm_filestream_non_transacted_handles;  
GO  

방법: FileTable과 연결된 열린 파일 핸들 종료

적절한 인수를 사용하여 저장 프로시저 sp_kill_filestream_non_transacted_handles(Transact-SQL) 를 호출하여 데이터베이스 또는 FileTable에서 열려 있는 모든 파일 핸들을 종료하거나 특정 핸들을 종료합니다.

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이 보유한 잠금 식별

FileTable에서 가져온 대부분의 잠금은 애플리케이션에서 연 파일에 해당합니다.

열려 있는 파일 및 연결된 잠금을 식별하려면
동적 관리 뷰 sys.dm_tran_locks(Transact-SQL)의 request_owner_id 필드를 sys.dm_filestream_non_transacted_handles(Transact-SQL)fcb_id 필드와 조인합니다. 잠금이 열려 있는 하나의 열려 있는 파일 핸들에 해당하지 않는 경우도 있습니다.

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에 저장된 파일 및 디렉터리만 SQL Server 보안으로 보호됩니다. 테이블 및 열 기반 보안은 Transact-SQL 액세스뿐만 아니라 파일 시스템 액세스에도 적용됩니다. Windows 파일 시스템 보안 API 및 ACL 설정은 지원되지 않습니다.

파일 데이터가 FileTable의 FILESTREAM 열로 저장되므로 FILESTREAM 파일 그룹 및 컨테이너에 적용할 수 있는 보안 및 액세스 권한도 FileTable에 적용됩니다.

FileTable 보안 및 Transact-SQL 액세스
FileTables의 데이터에 대한 Transact-SQL 액세스는 다른 테이블과 동일한 방식으로 보호됩니다. 데이터에 액세스하거나 변경하는 모든 작업에 대해 적절한 테이블 및 열 수준 보안 검사가 수행됩니다.

FileTable 보안 및 파일 시스템 액세스
파일 시스템 API는 FileTable에 저장된 파일 또는 디렉터리에 대한 핸들을 열려면 FileTable의 전체 행(즉, 테이블 수준 권한)에 대한 적절한 SQL Server 권한이 필요합니다. 사용자에게 FileTable의 열에 대한 적절한 SQL Server 권한이 없는 경우 파일 시스템 액세스가 거부됩니다.

Backup 및 FileTable

SQL Server를 사용하여 FileTable을 백업하는 경우 FILESTREAM 데이터는 데이터베이스의 구조화된 데이터로 백업됩니다. 관계형 데이터로 FILESTREAM 데이터를 백업하지 않으려면 부분 백업을 사용하여 FILESTREAM 파일 그룹을 제외할 수 있습니다.

FileTable 백업의 트랜잭션 일관성

많은 관리 도구 및 작업(백업, 로그 백업 및 트랜잭션 복제 포함)은 트랜잭션 로그를 읽어 트랜잭션 일치 데이터를 읽습니다. 이때 트랜잭션의 일부로 업데이트된 모든 FILESTREAM 데이터를 읽습니다. 데이터베이스 수준에서 비트랜잭션 액세스를 사용하도록 설정하지 않은 경우 이러한 도구 및 작업은 전체 트랜잭션 일관성에서 작동합니다.

그러나 전체 비트랜잭션 액세스를 사용하도록 설정하면 도구 또는 프로세스가 트랜잭션 로그에서 읽는 트랜잭션보다 최근에 업데이트된 데이터(비 트랜잭션 업데이트를 통해)가 FileTable에 포함될 수 있습니다. 즉, 특정 트랜잭션에 대한 "지정 시간" 복원 작업에는 해당 트랜잭션보다 최근 FILESTREAM 데이터가 포함될 수 있습니다. FileTable에서 비 트랜잭션 업데이트가 허용되는 경우 예상되는 동작입니다.

SQL Server Profiler 및 FileTables

SQL Server Profiler는 FileTable에 저장된 파일에 대한 추적 출력에서 Windows 파일 열기 및 파일 닫기 작업을 캡처할 수 있습니다.

감사와 FileTable

FileTable은 다른 테이블과 마찬가지로 감사할 수 있습니다. 그러나 Win32 액세스 패턴은 기반 작업을 설정하지 않습니다. 파일 시스템의 단일 작업은 여러 Transact-SQL DML 작업으로 변환됩니다. 예를 들어 Microsoft Word에서 파일을 열면 여러 개의 열기/닫기/만들기/이름 바꾸기/삭제 작업 및 해당 Transact-SQL DML 작업으로 변환됩니다. 이로 인해 파일 시스템 동작 간의 레코드와 해당하는 Transact-SQL DML 감사 레코드 간의 상관 관계를 파악하기가 어려운 복잡한 감사 레코드가 만들어집니다.

DBCC 및 FileTable

DBCC CHECKCONSTRAINTS를 사용하여 시스템 정의 제약 조건을 포함하여 FileTable의 제약 조건의 유효성을 검사할 수 있습니다.

참고 항목

FileTable과 기타 SQL Server 기능 간 호환성
FileTable DDL, 함수, 저장 프로시저 및 뷰