다른 SQL Server 기능과 함께 FILESTREAM 사용

FILESTREAM 데이터는 파일 시스템에 있으므로 이 항목에서는 SQL Server의 다음 기능과 함께 FILESTREAM을 사용할 경우 몇 가지 고려 사항, 지침 및 제한 사항에 대해 설명합니다.

  • SSIS(SQL Server Integration Services)

  • 분산 쿼리 및 연결된 서버

  • 데이터베이스 스냅숏

  • 복제

  • 로그 전달

  • 데이터베이스 미러링

  • 전체 텍스트

  • 장애 조치(Failover) 클러스터링

  • SQL Server Express

SSIS(SQL Server Integration Services)

SSIS(SQL Server Integration Services)는 DT_IMAGE SSIS 데이터 형식을 사용하여 다른 BLOB 데이터와 마찬가지로 데이터 흐름의 FILESTREAM 데이터를 처리합니다.

열 가져오기 변환을 사용하여 파일 시스템에서 FILESTREAM 열로 파일을 로드할 수 있습니다. 열 내보내기 변환을 사용하여 FILESTREAM 열에서 파일 시스템의 다른 위치로 파일을 추출할 수도 있습니다.

분산 쿼리 및 연결된 서버

FILESTREAM 데이터를 varbinary(max) 데이터로 처리하여 분산 쿼리와 연결된 서버를 통해 FILESTREAM 데이터 작업을 할 수 있습니다. 이름이 로컬 서버를 참조하는 경우에도 네 부분으로 된 이름을 사용하는 분산 쿼리에서 FILESTREAM PathName() 함수를 사용할 수 없습니다. 하지만 **OPENQUERY()**를 사용하는 통과 쿼리의 내부 쿼리에서 **PathName()**을 사용할 수 있습니다.

데이터베이스 스냅숏

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 특성을 사용하거나 사용하지 않고 구독자로 복제할 수 있습니다. 열을 어떻게 복제할지 지정하려면 아티클 속성 - <Article> 대화 상자를 사용하거나 sp_addarticle 또는 sp_addmergearticle@schema_option 매개 변수를 사용합니다. 스키마 옵션 설정 방법은 방법: 스키마 옵션 지정(SQL Server Management Studio)방법: 스키마 옵션 지정(복제 Transact-SQL 프로그래밍)을 참조하십시오. FILESTREAM 특성이 없는 varbinary(max) 열에 복제된 데이터는 해당 데이터 형식에 대해 2GB 제한을 초과할 수 없습니다. 초과할 경우 런타임 오류가 발생합니다. SQL Server 2005로 데이터를 복제하는 경우가 아니라면 FILESTREAM 특성을 복제하는 것이 좋습니다. FILESTREAM 열이 있는 테이블은 지정된 스키마 옵션에 상관없이 SQL Server 2000 구독자로 복제할 수 없습니다. 이전 버전의 SQL Server에 데이터를 복제하는 방법은 복제 토폴로지에 SQL Server의 여러 버전 사용을 참조하십시오.

[!참고]

SQL Server 2008에서 SQL Server 2005 구독자로 대형 데이터 값을 복제하면 최대 256MB 데이터 값으로 제한됩니다. 자세한 내용은 SQL Server 2005의 최대 용량 사양을 참조하십시오.

트랜잭션 복제에 대한 고려 사항

트랜잭션 복제를 위해 게시된 테이블의 FILESTREAM 열을 사용할 경우 다음 사항을 고려하십시오.

  • FILESTREAM 특성이 있는 열이 포함된 테이블이 있으면 sp_addpublication@sync_method 속성에 database snapshot 또는 database snapshot character 값을 사용할 수 없습니다.

  • max text repl size 옵션은 복제를 위해 게시된 열에 삽입할 수 있는 데이터의 최대 크기를 지정합니다. 이 옵션을 사용하여 복제되는 FILESTREAM 데이터의 크기를 제어할 수 있습니다. 자세한 내용은 max text repl size 옵션을 참조하십시오.

  • 스키마 옵션을 지정하여 FILESTREAM 특성을 복제할 때 FILESTREAM에 필요한 uniqueidentifier 열을 필터링하거나 해당 열에 대한 UNIQUE 제약 조건을 복제하지 않도록 지정하면 복제가 FILESTREAM 특성을 복제하지 않습니다. 열은 varbinary(max) 열로만 복제됩니다.

병합 복제에 대한 고려 사항

병합 복제를 위해 게시된 테이블에서 FILESTREAM 열을 사용할 경우 다음 사항을 고려하십시오.

  • 병합 복제 및 FILESTREAM은 테이블의 각 행을 식별하는 데 uniqueidentifier 데이터 형식의 열을 필요로 합니다. 병합 복제 시 테이블에 이러한 열이 없으면 자동으로 열이 추가됩니다. 병합 복제를 수행하려면 열에는 ROWGUIDCOL 속성 집합과 NEWID() 또는 NEWSEQUENTIALID()의 기본값이 있어야 합니다. 또한 FILESTREAM의 경우에는 열에 대해 UNIQUE 제약 조건이 정의되어야 합니다. 결과적으로 다음과 같은 작업이 필요합니다.

    • 병합 복제를 위해 이미 게시된 테이블에 FILESTREAM 열을 추가할 경우 uniqueidentifier 열에 UNIQUE 제약 조건이 있는지 확인합니다. UNIQUE 제약 조건이 없을 경우 게시 데이터베이스의 테이블에 명명된 제약 조건을 추가합니다. 기본적으로 병합 복제에서는 이러한 스키마 변경을 게시하고 각 구독 데이터베이스에 적용합니다. 스키마 변경에 대한 자세한 내용은 게시 데이터베이스의 스키마 변경을 참조하십시오.

      설명한 대로 UNIQUE 제약 조건을 수동으로 추가하고 병합 복제를 제거하려면 먼저 UNIQUE 제약 조건부터 제거해야 합니다. 그렇지 않으면 복제 제거가 실패합니다.

    • NEWSEQUENTIALID()가 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 이상 버전을 실행해야 하고 FILESTREAM이 설정되어 있어야 합니다.

데이터베이스 미러링

데이터베이스 미러링은 FILESTREAM을 지원하지 않습니다. 주 서버에서 FILESTREAM 파일 그룹을 만들 수 없습니다. FILESTREAM 파일 그룹이 포함된 데이터베이스에 대해 데이터베이스 미러링을 구성할 수 없습니다.

전체 텍스트 인덱싱

전체 텍스트 인덱싱은 varbinary(max) 열과 함께 작동하는 것과 동일한 방식으로 FILESTREAM 열과 함께 작동합니다. FILESTREAM 테이블에는 각 FILESTREAM BLOB에 대한 파일 이름 확장명을 포함하는 열이 있어야 합니다. 자세한 내용은 varbinary(max) 및 xml 열 쿼리(전체 텍스트 검색), 전체 텍스트 검색 필터,전체 텍스트 인덱싱 및 쿼리 프로세스sys.fulltext_document_types(Transact-SQL)를 참조하십시오.

전체 텍스트 엔진은 FILESTREAM BLOB의 내용을 인덱싱합니다. 이미지와 같은 인덱싱 파일은 유용하지 않을 수도 있습니다. FILESTREAM BLOB가 업데이트되면 인덱스가 다시 작성됩니다.

장애 조치(Failover) 클러스터링

장애 조치(failover) 클러스터링의 경우 FILESTREAM 파일 그룹이 공유 디스크에 있어야 합니다. FILESTREAM은 FILESTREAM 인스턴스를 호스팅할 클러스터의 각 노드에 설정되어 있어야 합니다. 자세한 내용은 방법: 장애 조치(Failover) 클러스터에서 FILESTREAM 설정을 참조하십시오.

SQL Server Express

SQL Server Express에서는 FILESTREAM을 지원합니다. 4GB의 데이터베이스 크기 제한에는 FILESTREAM 데이터 컨테이너가 포함되지 않습니다.

참고 항목

관련 자료