다른 SQL Server 기능과의 FileTable 호환성

적용 대상:SQL Server

FileTable이 SQL Server의 다른 기능과 작동하는 방법을 설명합니다.

Always On 가용성 그룹 및 FileTable

FILESTREAM 또는 FileTable 데이터를 포함하는 데이터베이스가 Always On 가용성 그룹에 속하는 경우:

  • FileTable 기능은 Always On 가용성 그룹에서 부분적으로 지원됩니다. 장애 조치(failover) 후에는 기본 복제본(replica) FileTable 데이터에 액세스할 수 있지만 읽기 가능한 보조 복제본(replica) FileTable 데이터에 액세스할 수 없습니다.

    참고 항목

    장애 조치(failover) 후 모든 FILESTREAM 기능이 지원됩니다. FILESTREAM 데이터는 읽을 수 있는 보조 복제본(replica) 및 새 주 데이터베이스 모두에서 액세스할 수 있습니다.

  • FILESTREAM 및 FileTable 함수가 컴퓨터 이름 대신 VNN(가상 네트워크 이름)을 사용하거나 반환합니다. 이러한 함수 에 대한 자세한 내용은 FILESTREAM 및 FileTable 함수(Transact-SQL)를 참조하세요.

  • 파일 시스템 API를 통한 FILESTREAM 또는 FileTable 데이터에 대한 모든 액세스에는 컴퓨터 이름 대신 VNN이 사용되어야 합니다. 자세한 내용은 Always On 가용성 그룹에서 FILESTREAM 및 FileTable 사용을 참조 하세요.

파티션 및 FileTable

FileTable에서는 분할이 지원되지 않습니다. 여러 FILESTREAM 파일 그룹을 지원하므로 대부분의 시나리오에서 분할에 의존하지 않고도 순수 확장 문제를 처리할 수 있습니다(SQL 2008 FILESTREAM과 달리).

복제 및 FileTable

복제 및 관련 기능(트랜잭션 복제본(replica), 병합 복제본(replica)tion, 변경 데이터 캡처 및 변경 내용 추적 포함)은 FileTable에서 지원되지 않습니다.

트랜잭션 의미 체계 및 FileTable

Windows 애플리케이션

Windows 애플리케이션은 데이터베이스 트랜잭션을 이해하지 못하므로 Windows 쓰기 작업은 데이터베이스 트랜잭션의 ACID 속성을 제공하지 않습니다. 따라서 Windows 업데이트 작업에서는 트랜잭션 롤백 및 복구를 수행할 수 없습니다.

Transact-SQL 애플리케이션

FileTable의 FILESTREAM(file_stream) 열에서 작업하는 Transact-SQL 애플리케이션의 경우 격리 의미 체계는 일반 사용자 테이블의 FILESTREAM 데이터 형식과 동일합니다.

쿼리 알림 및 FileTable

쿼리는 WHERE 절 또는 쿼리의 다른 부분에 있는 FileTable의 FILESTREAM 열에 대한 참조를 포함할 수 없습니다.

SELECT INTO 및 FileTables

FileTable의 SELECT INTO 문은 생성된 대상 테이블에 FileTable 의미 체계를 전파하지 않습니다(일반 테이블의 FILESTREAM 열처럼). 모든 대상 테이블 열은 일반 열처럼 동작합니다. FileTable 의미 체계는 연결되어 있지 않습니다.

트리거 및 FileTable

DDL(데이터 정의 언어) 트리거

DDL 트리거의 경우 FileTable과 관련하여 특별히 고려해야 할 사항이 없습니다. 일반 DDL 트리거는 FileTable에 대한 CREATE/ALTER TABLE 작업뿐만 아니라 데이터베이스 만들기/변경 작업에 대해 발생합니다. 트리거는 EVENTDATA() 함수를 호출하여 DDL 명령 텍스트 및 기타 정보를 포함하는 실제 이벤트 데이터를 검색할 수 있습니다. 기존 Eventdata 스키마에는 새 이벤트 또는 변경 내용이 없습니다.

DML(데이터 조작 언어) 트리거

이러한 제한은 트리거를 만들기 위해 DDL 작업 중에 적용됩니다.

  • FileTable은 DML 작업에 대한 INSTEAD OF 트리거를 지원하지 않습니다 . 이는 FILESTREAM 열이 포함된 모든 테이블에 적용되던 기존 제한 사항입니다.

  • FileTables는 DML 작업에 대한 AFTER 트리거를 지원합니다.

  • FileTable에 정의된 트리거는 FileTable(부모 FileTable 포함)을 업데이트할 수 없습니다. 이 제한은 트리거가 동일한 트랜잭션에서 파일 시스템 액세스에 의해 보유된 잠금과 충돌하는 것을 방지하기 위해 기본 존재합니다.

비트랜잭션 액세스 및 트리거에 미치는 영향

  • 데이터베이스에서 트랜잭션이 아닌 업데이트 액세스가 허용되는 경우 해당 데이터베이스의 FileTable을 포함하여 모든 테이블의 FILESTREAM 데이터를 현재 위치로 업데이트할 수 있습니다. 이 가능성으로 인해 FILESTREAM 콘텐츠의 이전 이미지를 트리거에서 사용할 수 없을 수 있습니다.

  • 파일 시스템을 통한 비 트랜잭션 업데이트 작업의 경우 SQL Server는 CloseHandle 작업을 캡처하는 내부 트랜잭션을 만들고 정의된 DML 트리거는 해당 트랜잭션의 일부로 발생할 수 있습니다. 트리거 본문 내에서 이러한 트랜잭션을 롤백하는 것은 방지되지 않지만 FILESTREAM에 수행된 변경 내용을 롤백하지 않습니다. 이러한 롤백은 FILESTREAM 콘텐츠가 변경된 경우에도 업데이트 트리거가 발생하지 않도록 할 수 있습니다.

  • 이러한 영향 외에도 FileTable의 트리거는 몇 가지 추가 동작을 처리해야 합니다.

    • 파일 시스템을 통해 FileTable에서 트랜잭션이 아닌 업데이트 작업을 사용하면 FILESTREAM 콘텐츠가 다른 Win32 작업에 의해 단독으로 잠글 수 있으며 트리거 본문을 통해 읽기/쓰기에 액세스할 수 없을 수 있습니다. 이러한 경우 트리거 본문 내의 FILESTREAM 콘텐츠에 액세스하려고 하면 "공유 위반" 오류가 발생할 수 있습니다. 트리거는 이러한 오류를 적절하게 처리하도록 설계되어야 합니다.

    • FILESTREAM의 AFTER 이미지는 파일 시스템 액세스에서 허용되는 공유 모드로 인해 다른 비 트랜잭션 업데이트에서 동시에 적극적으로 작성될 수 있으므로 안정적이지 않을 수 있습니다.

  • 관리자 또는 데이터베이스 크래시에 의한 Win32 핸들의 명시적 종료와 같은 Win32 핸들의 비정상적인 종료는 FILESTREAM 콘텐츠가 비정상적으로 종료된 Win32 애플리케이션에 의해 변경되었을 수 있더라도 복구 작업 중에 사용자 트리거를 실행하지 않습니다.

보기 및 FileTable

보기

다른 테이블과 마찬가지로 FileTable에서 보기를 만들 수 있습니다. 그러나 FileTable에서 만든 보기에는 다음 고려 사항이 적용됩니다.

  • 보기에는 FileTable 의미 체계가 있을 수 없습니다. 즉, 뷰의 열(파일 특성 열 포함)은 특별한 의미 체계가 없는 일반 보기 열처럼 동작하며 파일/디렉터리를 나타내는 행도 마찬가지입니다.

  • 뷰는 "업데이트 가능한 보기" 의미 체계에 따라 업데이트할 수 있지만 기본 테이블 제약 조건은 테이블과 마찬가지로 업데이트를 거부할 수 있습니다.

  • 파일의 파일 경로는 뷰에서 명시적 열로 추가하여 뷰에서 시각화할 수 있습니다. 예시:

    CREATE VIEW MP3FILES AS SELECT column1, column2, ..., GetFileNamespacePath() AS PATH, column3,... FROM Documents

인덱싱된 뷰

현재 인덱싱된 뷰에는 FILESTREAM 열 또는 FILESTREAM 열에 의존하는 계산/지속형 계산 열이 포함될 수 없습니다. 이 동작은 FileTable에 정의된 뷰와 함께 변경되지 기본.

스냅샷 격리 및 FileTable

RCSI(커밋된 스냅샷 격리) 및 SI(스냅샷 격리)는 데이터에서 업데이트 작업이 수행되는 경우에도 판독기에서 사용할 수 있는 데이터의 스냅샷 갖는 기능을 사용합니다. 그러나 FileTable을 사용하면 Filestream 데이터에 대한 비트랜잭션 쓰기 액세스가 허용됩니다. 따라서 FileTable이 포함된 데이터베이스의 이러한 기능에는 다음과 같은 제한 사항이 적용됩니다.

  • FileTable이 포함된 데이터베이스를 변경하여 RCSI/SI를 사용하도록 설정할 수 있습니다.

  • 데이터베이스에 대해 비트랜잭션 액세스가 FULL로 설정된 경우 트랜잭션이 RCSI에서 실행되거나 SI가 다음과 같이 동작합니다.

    • FileTable file_stream 열의 Transact-SQL 읽기가 실패합니다. file_stream 열에서 읽지 않는 한 열에 대한 INSERT 및 UPDATE는 여전히 성공합니다.

    • Transact-SQL 문에서 READCOMMITTEDLOCK 테이블 힌트를 지정하면 행 버전 관리 대신 읽기가 성공하고 행에 대한 잠금이 수행됩니다.

    • 트랜잭션된 Win32 FileStream 열기 요청도 실패합니다.

    • 트랜잭션되지 않은 FileTable Win32 액세스가 성공합니다. FileTable에서 수행한 모든 내부 쿼리는 영향을 받지 않습니다.

    • 전체 텍스트 인덱싱은 데이터베이스 옵션(READ_COMMITTED_SNAPSHOT 또는 ALLOW_SNAPSHOT_ISOLATION)에 관계없이 항상 성공합니다.

읽기 가능한 보조 데이터베이스

이전 섹션인 스냅샷 격리 및 FileTable에 설명된 대로 스냅샷 읽을 수 있는 보조 데이터베이스에도 동일한 고려 사항이 적용됩니다.

포함된 데이터베이스 및 FileTable

FileTable 기능이 종속되는 FILESTREAM 기능을 사용하려면 데이터베이스 외부에서의 몇 가지 구성이 필요합니다. 따라서 FILESTREAM 또는 FileTable을 사용하는 데이터베이스는 완전히 포함되지 않습니다.

포함된 사용자와 같은 포함된 데이터베이스의 특정 기능을 사용하려는 경우 데이터베이스 포함을 PARTIAL으로 설정할 수 있습니다. 그러나 이 경우 일부 데이터베이스 설정은 데이터베이스에 포함되지 않으며 데이터베이스가 이동할 때 자동으로 이동되지 않습니다.