FILESTREAM과 기타 SQL Server 기능 간 호환성
적용 대상: SQL Server
FILESTREAM 데이터는 파일 시스템에 있으므로 이 항목에서는 SQL Server의 다음 기능과 함께 FILESTREAM을 사용할 경우 몇 가지 고려 사항, 지침 및 제한 사항에 대해 설명합니다.
SSIS(SQL Server Integration Services)
SSIS(SQL Server Integration Services)는 DT_IMAGE SSIS 데이터 형식을 사용하여 다른 BLOB 데이터와 마찬가지로 데이터 흐름의 FILESTREAM 데이터를 처리합니다.
가져오기 열 변환을 사용하면 파일 시스템에서 FILESTREAM 열로 파일을 로드할 수 있습니다. 열 내보내기 변환을 사용하여 FILESTREAM 열에서 파일 시스템의 다른 위치로 파일을 추출할 수도 있습니다.
분산 쿼리 및 연결된 서버
분산 쿼리 및 연결된 서버를 통해 FILESTREAM 데이터를 varbinary(max) 데이터로 처리하여 작업할 수 있습니다. 이름이 로컬 서버를 참조하는 경우에도 네 부분으로 구성된 이름을 사용하는 분산 쿼리에서는 FILESTREAM PathName() 함수를 사용할 수 없습니다. 그러나 OPENQUERY()를 사용하는 통과 쿼리의 내부 쿼리에서 PathName()을 사용할 수 있습니다.
암호화
투명한 데이터 암호화를 사용하는 경우에도 FILESTREAM 데이터는 암호화되지 않습니다.
데이터베이스 스냅샷
SQL Server는 FILESTREAM 파일 그룹에 대한 데이터베이스 스냅샷을 지원하지 않습니다. FILESTREAM 파일 그룹이 CREATE DATABASE ON 절에 들어 있으면 이 문이 실패하고 오류가 발생합니다.
FILESTREAM을 사용할 경우 FILESTREAM이 아닌 표준 파일 그룹의 데이터베이스 스냅샷을 만들 수 있습니다. FILESTREAM 파일 그룹은 해당 데이터베이스 스냅샷에 대해 오프라인으로 표시됩니다.
데이터베이스 스냅샷의 FILESTREAM 테이블에서 실행되는 SELECT 문은 FILESTREAM 열을 포함해서는 안 됩니다. 그렇지 않으면 다음과 같은 오류 메시지가 반환됩니다.
Could not continue scan with NOLOCK due to data movement.
복제
게시자에서 FILESTREAM 특성을 사용하도록 설정된 varbinary(max) 열은 FILESTREAM 특성이 있거나 없는 구독자에 복제할 수 있습니다. 열이 복제되는 방식을 지정하려면 문서 속성 - <문서> 대화 상자 또는 sp_addarticle 또는 sp_addmergearticle의 @schema_option매개 변수를 사용합니다. FILESTREAM 특성이 없는 varbinary(max) 열에 복제된 데이터는 해당 데이터 형식에 대해 2GB 제한을 초과할 수 없습니다. 초과할 경우 런타임 오류가 발생합니다. SQL Server 2005(9.x)에 데이터를 복제하지 않는 한 FILESTREAM 특성을 복제하는 것이 좋습니다. 지정된 스키마 옵션에 관계없이 FILESTREAM 열이 있는 테이블을 SQL Server 2000(8.x) 구독자에 복제하는 것은 지원되지 않습니다.
참고 항목
SQL Server에서 SQL Server 2005(9.x) 구독자로 대용량 데이터 값을 복제하는 경우 최대 256MB의 데이터 값으로 제한됩니다. 자세한 내용은 최대 용량 사양을 참조하세요.
트랜잭션 복제에 대한 고려 사항
트랜잭션 복제를 위해 게시된 테이블의 FILESTREAM 열을 사용할 경우 다음 사항을 고려하십시오.
FILESTREAM 특성이 있는 열이 테이블에 있는 경우 데이터베이스 스냅샷 또는 데이터베이스 스냅샷 문자 값을 sp_addpublication의 @sync_method 속성에 사용할 수 없습니다.
최대 텍스트 리플 크기 옵션은 복제를 위해 게시된 열에 삽입할 수 있는 최대 데이터 양을 지정합니다. 이 옵션을 사용하여 복제되는 FILESTREAM 데이터의 크기를 제어할 수 있습니다.
FILESTREAM 특성을 복제하는 스키마 옵션을 지정하지만 FILESTREAM에 필요한 uniqueidentifier 열을 필터링하거나 열에 대한 UNIQUE 제약 조건을 복제하지 않도록 지정하면 복제에서 FILESTREAM 특성을 복제하지 않습니다. 열은 varbinary(max) 열로만 복제됩니다.
병합 복제 고려 사항
병합 복제를 위해 게시된 테이블의 FILESTREAM 열을 사용할 경우 다음 사항을 고려하십시오.
병합 복제와 FILESTREAM 모두 테이블의 각 행을 식별하기 위해 uniqueidentifier 데이터 형식의 열이 필요합니다. 병합 복제는 테이블에 열이 없으면 열을 자동으로 추가합니다. 병합 복제를 사용하려면 열에 ROWGUIDCOL 속성 집합과 NEWID() 또는 NEWSEQUENTIALID()의 기본값이 있어야 합니다. FILESTREAM은 이러한 요구 사항 외에도 열에 대해 UNIQUE 제약 조건을 정의해야 합니다. 이러한 요구 사항은 다음과 같은 결과를 가져옵니다.
병합 복제를 위해 이미 게시된 테이블에 FILESTREAM 열을 추가하는 경우 uniqueidentifier 열에 UNIQUE 제약 조건이 있는지 확인합니다. UNIQUE 제약 조건이 없는 경우 게시 데이터베이스의 테이블에 명명된 제약 조건을 추가합니다. 기본적으로 병합 복제에서는 이러한 스키마 변경을 게시하고 각 구독 데이터베이스에 적용합니다.
설명된 대로 UNIQUE 제약 조건을 수동으로 추가하고 병합 복제를 제거하려면 먼저 UNIQUE 제약 조건을 제거해야 합니다. 그렇지 않으면 복제 제거가 실패합니다.
기본적으로 병합 복제는 NEWID()보다 더 나은 성능을 제공할 수 있으므로 NEWSEQUENTIALID()를 사용합니다. 병합 복제를 위해 게시할 테이블에 uniqueidentifier 열을 추가하는 경우 NEWSEQUENTIALID()를 기본값으로 지정합니다.
병합 복제에는 큰 개체 형식을 복제하기 위한 최적화가 포함됩니다. 이 최적화 작업은 sp_addmergearticle의 @stream_blob_columns 매개 변수를 통해 제어됩니다. FILESTREAM 특성을 복제하도록 스키마 옵션을 설정하면 @stream_blob_columns 매개 변수 값이 true로 설정됩니다. 이 최적화는 sp_changemergearticle을 사용하여 재정의할 수 있습니다. 다음 저장 프로시저를 통해 @stream_blob_columns를 false로 설정할 수 있습니다. 병합 복제를 위해 이미 게시된 테이블에 FILESTREAM 열을 추가하는 경우 sp_changemergearticle을 사용하여 옵션을 true 로 설정하는 것이 좋습니다.
아티클을 만든 후 FILESTREAM에 대한 스키마 옵션을 사용하도록 설정하면 FILESTREAM 열의 데이터가 2GB를 초과하고 복제 중에 충돌이 발생하는 경우 복제가 실패할 수 있습니다. 이러한 상황이 발생할 것으로 예상되는 경우 생성 시 적절한 FILESTREAM 스키마 옵션을 사용하도록 설정된 테이블 아티클을 삭제하고 다시 만드는 것이 좋습니다.
병합 복제는 웹 동기화를 사용하여 HTTPS 연결을 통해 FILESTREAM 데이터를 동기화할 수 있습니다. 이 데이터는 웹 동기화에 대한 50MB 제한을 초과할 수 없습니다. 그렇지 않으면 런타임 오류가 생성됩니다.
로그 전달
로그 전달은 FILESTREAM을 지원합니다. 주 서버와 보조 서버 모두 SQL Server 2008(10.0.x) 이상 버전을 실행하고 FILESTREAM을 사용하도록 설정해야 합니다.
데이터베이스 미러링
데이터베이스 미러링은 FILESTREAM을 지원하지 않습니다. 주 서버에서 FILESTREAM 파일 그룹을 만들 수 없습니다. FILESTREAM 파일 그룹이 포함된 데이터베이스에 대해 데이터베이스 미러링을 구성할 수 없습니다.
전체 텍스트 인덱싱
전체 텍스트 인덱싱은 varbinary(max) 열과 동일한 방식으로 FILESTREAM 열에서 작동합니다. FILESTREAM 테이블에는 각 FILESTREAM BLOB에 대한 파일 이름 확장명이 포함된 열이 있어야 합니다. 자세한 내용은 전체 텍스트 검색을 사용하여 쿼리, 검색용 필터 구성 및 관리 및 sys.fulltext_document_types(Transact-SQL)을 참조하세요.
전체 텍스트 엔진은 FILESTREAM BLOB의 내용을 인덱싱합니다. 이미지와 같은 파일을 인덱싱하는 것은 유용하지 않을 수 있습니다. FILESTREAM BLOB이 업데이트되면 다시 인덱싱됩니다.
장애 조치(Failover) 클러스터링
장애 조치(failover) 클러스터링의 경우 FILESTREAM 파일 그룹이 공유 디스크에 있어야 합니다. FILESTREAM 인스턴스를 호스트할 클러스터의 각 노드에서 FILESTREAM을 사용하도록 설정해야 합니다. 자세한 내용은 장애 조치(failover) 클러스터에서 FILESTREAM 설정을 참조하세요.
SQL Server Express
SQL Server Express는 FILESTREAM을 지원합니다. 10GB 데이터베이스 크기 제한에는 FILESTREAM 데이터 컨테이너가 포함되지 않습니다.
포함된 데이터베이스
FILESTREAM 기능을 사용하려면 데이터베이스 외부에서 일부 구성이 필요합니다. 따라서 FILESTREAM 또는 FileTable을 사용하는 데이터베이스는 완전히 포함되지 않습니다.
포함된 사용자와 같은 포함된 데이터베이스의 특정 기능을 사용하려는 경우 데이터베이스 포함을 PARTIAL으로 설정할 수 있습니다. 그러나 이 경우 일부 데이터베이스 설정은 데이터베이스에 포함되지 않으며 데이터베이스가 이동할 때 자동으로 이동되지 않는다는 점에 유의해야 합니다.