FILESTREAM과 기타 SQL Server 기능 간 호환성FILESTREAM Compatibility with Other SQL Server Features

FILESTREAM 데이터는 파일 시스템에 있으므로 이 항목에서는 SQL ServerSQL Server의 다음 기능과 함께 FILESTREAM을 사용할 경우 몇 가지 고려 사항, 지침 및 제한 사항에 대해 설명합니다.Because FILESTREAM data is in the file system, this topic provides some considerations, guidelines, and limitations for using FILESTREAM with the following features in SQL ServerSQL Server:

SSIS(SQL Server Integration Services) SQL Server Integration Services (SSIS)

SSIS(SQL Server Integration Services)는 DT_IMAGE SSIS 데이터 형식을 사용하여 다른 BLOB 데이터와 마찬가지로 데이터 흐름의 FILESTREAM 데이터를 처리합니다.SQL Server Integration Services (SSIS) handles FILESTREAM data in the data flow like any other BLOB data by using the DT_IMAGE SSIS data type.

열 가져오기 변환을 사용하여 파일 시스템에서 FILESTREAM 열로 파일을 로드할 수 있습니다.You can use the Import Column transformation to load files from the file system into a FILESTREAM column. 열 내보내기 변환을 사용하여 FILESTREAM 열에서 파일 시스템의 다른 위치로 파일을 추출할 수도 있습니다.You can also use the Export Column transformation to extract files from a FILESTREAM column to another location in the file system.

분산 쿼리 및 연결된 서버 Distributed Queries and Linked Servers

FILESTREAM 데이터를 varbinary(max) 데이터로 처리하여 분산 쿼리 및 연결된 서버를 통해 사용할 수 있습니다.You can work with FILESTREAM data through distributed queries and linked servers by treating it as varbinary(max) data. 네 부분으로 된 이름을 사용하는 분산 쿼리에는 FILESTREAM PathName() 함수를 사용할 수 없습니다. 해당 이름이 로컬 서버를 참조하는 경우에도 마찬가지입니다.You cannot use the FILESTREAM PathName() function in distributed queries that use a four-part name, even when the name refers to the local server. 그러나 OPENQUERY() 를 사용하는 통과 쿼리의 내부 쿼리에는 PathName()을 사용할 수 있습니다.However you can use PathName() in the inner query of a pass-through query that uses OPENQUERY().

암호화 Encryption

투명한 데이터 암호화를 사용하는 경우에도 FILESTREAM 데이터는 암호화되지 않습니다.FILESTREAM data is not encrypted even when transparent data encryption is enabled.

데이터베이스 스냅숏 Database Snapshots

SQL ServerSQL Server 에서는 FILESTREAM 파일 그룹에 대해 [데이터베이스 스냅숏](../../relational-databases/databases/database-snapshots-sql-server.md) 을 지원하지 않습니다.(../../relational-databases/databases/database-snapshots-sql-server.md) for FILESTREAM filegroups. FILESTREAM 파일 그룹이 CREATE DATABASE ON 절에 들어 있으면 이 문이 실패하고 오류가 발생합니다.If a FILESTREAM filegroup is included in a CREATE DATABASE ON clause, the statement will fail and an error will be raised.

FILESTREAM을 사용할 경우 FILESTREAM이 아닌 표준 파일 그룹의 데이터베이스 스냅숏을 만들 수 있습니다.When you are using FILESTREAM, you can create database snapshots of standard (non-FILESTREAM) filegroups. FILESTREAM 파일 그룹은 이러한 데이터베이스 스냅숏에 대해 오프라인으로 표시됩니다.The FILESTREAM filegroups are marked as offline for those database snapshots.

데이터베이스 스냅숏의 FILESTREAM 테이블에서 실행되는 SELECT 문에는 FILESTREAM 열이 포함되지 않아야 합니다. 이 열이 포함되면 다음 오류 메시지가 반환됩니다.A SELECT statement that is executed on a FILESTREAM table in a database snapshot must not include a FILESTREAM column; otherwise, the following error message will be returned:

Could not continue scan with NOLOCK due to data movement.

복제 Replication

게시자에서 FILESTREAM 특성을 사용할 수 있는 varbinary(max) 열을 FILESTREAM 특성을 사용하거나 사용하지 않고 구독자로 복제할 수 있습니다.A varbinary(max) column that has the FILESTREAM attribute enabled at the Publisher can be replicated to a Subscriber with or without the FILESTREAM attribute. 열의 복제 방법을 지정하려면 아티클 속성 - <Article> 대화 상자를 사용하거나 sp_addarticle 또는 sp_addmergearticle의 @schema_option 매개 변수를 사용합니다.To specify the way in which the column is replicated, use the Article Properties - <Article> dialog box or the @schema_option parameter of sp_addarticle or sp_addmergearticle. FILESTREAM 특성이 없는 varbinary(max) 열에 복제된 데이터는 해당 데이터 형식에 대해 2GB 제한을 초과할 수 없습니다. 초과할 경우 런타임 오류가 발생합니다.Data that is replicated to a varbinary(max) column that does not have the FILESTREAM attribute must not exceed the 2-GB limit for that data type; otherwise, a run-time error is generated. 데이터를 SQL Server 2005SQL Server 2005에 복제하는 경우가 아니면 FILESTREAM 특성을 복제하는 것이 좋습니다.We recommend that you replicate the FILESTREAM attribute, unless you are replicating data to SQL Server 2005SQL Server 2005. FILESTREAM 열이 있는 테이블은 지정된 스키마 옵션에 상관없이 SQL Server 2000SQL Server 2000 구독자에 복제할 수 없습니다.Replicating tables that have FILESTREAM columns to SQL Server 2000SQL Server 2000 Subscribers is not supported, regardless of the schema option that is specified.

참고

SQL Server 2017SQL Server 2017 에서 SQL Server 2005SQL Server 2005 구독자로 대형 데이터 값을 복제하면 최대 256MB 데이터 값으로 제한됩니다.Replicating large data values from SQL Server 2017SQL Server 2017 to SQL Server 2005SQL Server 2005 Subscribers is limited to a maximum of 256 MB data values. 자세한 내용은 SQL Server 2005의 최대 용량 사양을 참조하십시오.For more information, see Maximum Capacity Specifications.

트랜잭션 복제에 대한 고려 사항Considerations for Transactional Replication

트랜잭션 복제를 위해 게시된 테이블의 FILESTREAM 열을 사용할 경우 다음 사항을 고려하십시오.If you use FILESTREAM columns in tables that are published for transactional replication, note the following considerations:

  • FILESTREAM 특성을 포함하는 열이 테이블에 있으면 sp_addpublication의 @sync_method 속성에 database snapshot 또는 database snapshot character 값을 사용할 수 없습니다.If any tables include columns that have the FILESTREAM attribute, you cannot use values of database snapshot or database snapshot character for the @sync_method property of sp_addpublication.

  • max text repl size 옵션은 복제를 위해 게시된 열에 삽입할 수 있는 데이터의 최대 크기를 지정합니다.The max text repl size option specifies the maximum amount of data that can be inserted into a column that is published for replication. 이 옵션을 사용하여 복제되는 FILESTREAM 데이터의 크기를 제어할 수 있습니다.This option can be used to control the size of FILESTREAM data that is replicated.

  • 스키마 옵션을 지정하여 FILESTREAM 특성을 복제할 때 FILESTREAM에 필요한 uniqueidentifier 열을 필터링하거나 해당 열에 대한 UNIQUE 제약 조건을 복제하지 않도록 지정하면 복제가 FILESTREAM 특성을 복제하지 않습니다.If you specify the schema option to replicate the FILESTREAM attribute, but you filter out the uniqueidentifier column that FILESTREAM requires or you specify not to replicate the UNIQUE constraint for the column, replication does not replicate the FILESTREAM attribute. 열은 varbinary(max) 열로만 복제됩니다.The column is replicated only as a varbinary(max) column.

병합 복제에 대한 고려 사항Considerations for Merge Replication

병합 복제를 위해 게시된 테이블에서 FILESTREAM 열을 사용할 경우 다음 사항을 고려하십시오.If you use FILESTREAM columns in tables that are published for merge replication, note the following considerations:

  • 병합 복제 및 FILESTREAM은 테이블의 각 행을 식별하는 데 uniqueidentifier 데이터 형식의 열을 필요로 합니다.Both merge replication and FILESTREAM require a column of data type uniqueidentifier to identify each row in a table. 병합 복제 시 테이블에 이러한 열이 없으면 자동으로 열이 추가됩니다.Merge replication automatically adds a column if the table does not have one. 병합 복제를 수행하려면 열에는 ROWGUIDCOL 속성 집합과 NEWID() 또는 NEWSEQUENTIALID()의 기본값이 있어야 합니다.Merge replication requires that the column have the ROWGUIDCOL property set and a default of NEWID() or NEWSEQUENTIALID(). 또한 FILESTREAM의 경우에는 열에 대해 UNIQUE 제약 조건이 정의되어야 합니다.In addition to these requirements, FILESTREAM requires that a UNIQUE constraint be defined for the column. 결과적으로 다음과 같은 작업이 필요합니다.These requirements have the following consequences:

    • 병합 복제를 위해 이미 게시된 테이블에 FILESTREAM 열을 추가할 경우 uniqueidentifier 열에 UNIQUE 제약 조건이 있는지 확인합니다.If you add a FILESTREAM column to a table that is already published for merge replication, make sure that the uniqueidentifier column has a UNIQUE constraint. UNIQUE 제약 조건이 없을 경우 게시 데이터베이스의 테이블에 명명된 제약 조건을 추가합니다.If it does not have a UNIQUE constraint, add a named constraint to the table in the publication database. 기본적으로 병합 복제에서는 이러한 스키마 변경을 게시하고 각 구독 데이터베이스에 적용합니다.By default, merge replication will publish this schema change, and it will be applied to each subscription database.

      설명한 대로 UNIQUE 제약 조건을 수동으로 추가하고 병합 복제를 제거하려면 먼저 UNIQUE 제약 조건부터 제거해야 합니다. 그렇지 않으면 복제 제거가 실패합니다.If you add a UNIQUE constraint manually as described and you want to remove merge replication, you must first remove the UNIQUE constraint; otherwise, replication removal will fail.

    • NEWSEQUENTIALID()가 NEWID()보다 성능이 더 좋으므로 병합 복제에서는 기본적으로 NEWSEQUENTIALID()를 사용합니다.By default, merge replication uses NEWSEQUENTIALID() because it can provide better performance than NEWID(). 병합 복제를 위해 게시될 테이블에 uniqueidentifier 열을 추가할 경우 NEWSEQUENTIALID()를 기본값으로 지정합니다.If you add a uniqueidentifier column to a table that will be published for merge replication, specify NEWSEQUENTIALID() as the default.

  • 병합 복제에는 큰 개체 유형을 위한 최적화가 포함됩니다.Merge replication includes an optimization for replicating large object types. 이 최적화 작업은 sp_addmergearticle의 @stream_blob_columns 매개 변수를 통해 제어됩니다.This optimization is controlled by the @stream_blob_columns parameter of sp_addmergearticle. FILESTREAM 특성을 복제하도록 스키마 옵션을 설정하면 @stream_blob_columns 매개 변수 값이 true로 설정됩니다.If you set the schema option to replicate the FILESTREAM attribute, the @stream_blob_columns parameter value is set to true. 이러한 최적화 작업은 sp_changemergearticle을 사용하여 덮어쓸 수 있습니다.This optimization can be overridden by using sp_changemergearticle. 다음 저장 프로시저를 통해 @stream_blob_columns를 false로 설정할 수 있습니다.This stored procedure enables you to set @stream_blob_columns to false. 병합 복제를 위해 이미 게시된 테이블에 FILESTREAM 열을 추가하는 경우 sp_changemergearticle을 사용하여 옵션을 true 로 설정하는 것이 좋습니다.If you add a FILESTREAM column to a table that is already published for merge replication, we recommend that you set the option to true by using sp_changemergearticle.

  • 아티클이 만들어진 후 FILESTREAM의 스키마 옵션을 사용하면 FILESTREAM 열의 데이터가 2GB가 넘고 복제 도중 충돌이 있을 경우 복제에 실패할 수 있습니다.Enabling the schema option for FILESTREAM after an article is created can cause replication to fail if the data in a FILESTREAM column exceeds 2 GB and there is a conflict during replication. 이러한 상황의 발생을 예상할 경우 만들 때 사용할 수 있는 적절한 FILESTREAM 스키마 옵션을 사용하여 테이블 아티클을 삭제하고 다시 만드는 것이 좋습니다.If you expect this situation to arise, it is recommended that you drop and re-create the table article with the appropriate FILESTREAM schema option enabled at creation time.

  • 병합 복제는 웹 동기화를 사용하여 HTTPS 연결을 통해 FILESTREAM 데이터를 동기화할 수 있습니다.Merge replication can synchronize FILESTREAM data over an HTTPS connection by using Web Synchronization. 이 데이터는 웹 동기화에 대해 50MB 제한을 초과할 수 없습니다. 초과할 경우 런타임 오류가 발생합니다.This data cannot exceed the 50 MB limit for Web Synchronization; otherwise, a run-time error is generated.

로그 전달 Log Shipping

로그 전달 은 FILESTREAM을 지원합니다.Log shipping supports FILESTREAM. 주 서버 및 보조 서버는 모두 SQL Server 2008SQL Server 2008이상 버전을 실행해야 하고 FILESTREAM이 설정되어 있어야 합니다.Both the primary and secondary servers must be running SQL Server 2008SQL Server 2008, or a later version, and have FILESTREAM enabled.

데이터베이스 미러링 Database Mirroring

데이터베이스 미러링은 FILESTREAM을 지원하지 않습니다.Database mirroring does not support FILESTREAM. 주 서버에서 FILESTREAM 파일 그룹을 만들 수 없습니다.A FILESTREAM filegroup cannot be created on the principal server. FILESTREAM 파일 그룹이 포함된 데이터베이스에 대해 데이터베이스 미러링을 구성할 수 없습니다.Database mirroring cannot be configured for a database that contains FILESTREAM filegroups.

전체 텍스트 인덱싱 Full-Text Indexing

전체 텍스트 인덱싱varbinary(max) 열과 함께 작동하는 것과 동일한 방식으로 FILESTREAM 열과 함께 작동합니다.Full-text indexing works with a FILESTREAM column in the same way that it does with a varbinary(max) column. FILESTREAM 테이블에는 각 FILESTREAM BLOB에 대한 파일 이름 확장명을 포함하는 열이 있어야 합니다.The FILESTREAM table must have a column that contains the file name extension for each FILESTREAM BLOB. 자세한 내용은 전체 텍스트 검색을 사용한 쿼리, 검색 필터 구성 및 관리, sys.fulltext_document_types(Transact-SQL)를 참조하세요.For more information, see Query with Full-Text Search, Configure and Manage Filters for Search, and sys.fulltext_document_types (Transact-SQL).

전체 텍스트 엔진은 FILESTREAM BLOB의 내용을 인덱싱합니다.The full-text engine indexes the contents of the FILESTREAM BLOBs. 이미지와 같은 인덱싱 파일은 유용하지 않을 수도 있습니다.Indexing files such as images might not be useful. FILESTREAM BLOB이 업데이트되면 인덱스가 다시 작성됩니다.When a FILESTREAM BLOB is updated it is reindexed.

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

장애 조치(failover) 클러스터링의 경우 FILESTREAM 파일 그룹이 공유 디스크에 있어야 합니다.For failover clustering, FILESTREAM filegroups must be put on a shared disk. FILESTREAM은 FILESTREAM 인스턴스를 호스팅할 클러스터의 각 노드에 설정되어 있어야 합니다.FILESTREAM must be enabled on each node in the cluster that will host the FILESTREAM instance. 자세한 내용은 장애 조치(failover) 클러스터에서 FILESTREAM 설정을 참조하세요.For more information, see Set Up FILESTREAM on a Failover Cluster.

SQL Server Express SQL Server Express

SQL Server ExpressSQL Server Express 은 FILESTREAM을 지원합니다. supports FILESTREAM. 10GB의 데이터베이스 크기 제한에는 FILESTREAM 데이터 컨테이너가 포함되지 않습니다.The 10-GB database size limit does not include the FILESTREAM data container.

포함된 데이터베이스 Contained Databases

FILESTREAM 기능을 사용하려면 데이터베이스 외부에서의 몇 가지 구성이 필요합니다.The FILESTREAM feature requires some configuration outside of the database. 따라서 FILESTREAM 또는 FileTable을 사용하는 데이터베이스는 완전히 포함되지 않습니다.Therefore a database that uses FILESTREAM or FileTable is not fully contained.

포함된 사용자와 같은 포함된 데이터베이스의 특정 기능을 사용하려면 데이터베이스 포함 옵션을 PARTIAL로 설정하면 됩니다.You can set database containment to PARTIAL if you want to use certain features of contained databases, such as contained users. 그러나 이 경우 일부 데이터베이스 설정은 데이터베이스에 포함되지 않으며 데이터베이스를 이동할 때 자동으로 이동되지 않는다는 것을 알고 있어야 합니다.In this case, however, you must be aware that some of the database settings are not contained in the database and are not automatically moved when the database moves.

참고 항목See Also

Blob(Binary Large Object) 데이터(SQL Server)Binary Large Object (Blob) Data (SQL Server)