FILESTREAM(SQL Server)FILESTREAM (SQL Server)

이 항목 적용 대상: 예SQL Server없습니다Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

이 항목은 다음에 적용됩니다.예SQL Server(Windows 전용)아니요Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: yesSQL Server (Windows only)noAzure SQL DatabasenoAzure SQL Data WarehousenoParallel Data Warehouse

FILESTREAM을 사용하면 SQL ServerSQL Server 기반 응용 프로그램에서 문서 및 이미지와 같은 구조화되지 않은 데이터를 파일 시스템에 저장할 수 있습니다.FILESTREAM enables SQL ServerSQL Server-based applications to store unstructured data, such as documents and images, on the file system. 응용 프로그램은 풍부한 스트리밍 API 및 파일 시스템의 성능을 활용할 수 있고 동시에 구조화되지 않은 데이터와 해당되는 구조화된 데이터 간에 트랜잭션 일관성을 유지할 수 있습니다.Applications can leverage the rich streaming APIs and performance of the file system and at the same time maintain transactional consistency between the unstructured data and corresponding structured data.

FILESTREAM은 SQL Server 데이터베이스 엔진SQL Server Database Engine varbinary(max) BLOB(Binary Large Object) 데이터를 파일 시스템의 파일로 저장하여 을 NTFS 및 ReFS 파일 시스템과 통합합니다.FILESTREAM integrates the SQL Server 데이터베이스 엔진SQL Server Database Engine with an NTFS or ReFS file systems by storing varbinary(max) binary large object (BLOB) data as files on the file system. Transact-SQLTransact-SQL 문은 FILESTREAM 데이터를 삽입, 업데이트, 쿼리, 검색 및 백업할 수 있습니다. statements can insert, update, query, search, and back up FILESTREAM data. Win32 파일 시스템 인터페이스에서는 데이터에 대한 스트리밍 액세스를 제공합니다.Win32 file system interfaces provide streaming access to the data.

FILESTREAM은 파일 데이터를 캐시하기 위해 NT 시스템 캐시를 사용합니다.FILESTREAM uses the NT system cache for caching file data. 이를 통해 FILESTREAM 데이터가 데이터베이스 엔진Database Engine 성능에 미치는 영향을 줄일 수 있습니다.This helps reduce any effect that FILESTREAM data might have on 데이터베이스 엔진Database Engine performance. SQL ServerSQL Server 버퍼 풀이 사용되지 않으므로 이 메모리는 쿼리 처리용으로 사용할 수 있습니다.The SQL ServerSQL Server buffer pool is not used; therefore, this memory is available for query processing.

SQL ServerSQL Server를 설치하거나 업그레이드할 때 FILESTREAM이 자동으로 사용하도록 설정되지는 않습니다.FILESTREAM is not automatically enabled when you install or upgrade SQL ServerSQL Server. SQL Server 구성 관리자 및 SQL Server Management StudioSQL Server Management Studio를 사용하여 FILESTREAM을 사용하도록 설정해야 합니다.You must enable FILESTREAM by using SQL Server Configuration Manager and SQL Server Management StudioSQL Server Management Studio. FILESTREAM을 사용하려면 특수 파일 그룹 유형을 포함하도록 데이터베이스를 만들거나 수정해야 합니다.To use FILESTREAM, you must create or modify a database to contain a special type of filegroup. 그런 다음 FILESTREAM 특성이 있는 varbinary(max) 열을 포함하도록 테이블을 만들거나 수정합니다.Then, create or modify a table so that it contains a varbinary(max) column with the FILESTREAM attribute. 이러한 태스크를 완료한 후에는 Transact-SQLTransact-SQL 및 Win32를 사용하여 FILESTREAM 데이터를 관리할 수 있습니다.After you complete these tasks, you can use Transact-SQLTransact-SQL and Win32 to manage the FILESTREAM data.

FILESTREAM을 사용하는 경우When to Use FILESTREAM

SQL ServerSQL Server에서 BLOB은 테이블에 데이터를 저장하는 표준 varbinary(max) 데이터 또는 파일 시스템에 데이터를 저장하는 FILESTREAM varbinary(max) 개체가 될 수 있습니다.In SQL ServerSQL Server, BLOBs can be standard varbinary(max) data that stores the data in tables, or FILESTREAM varbinary(max) objects that store the data in the file system. 데이터베이스 저장소를 사용해야 할지 또는 파일 시스템 저장소를 사용해야 할지 여부는 데이터의 크기와 사용으로 결정됩니다.The size and use of the data determines whether you should use database storage or file system storage. 다음 조건에 해당될 경우 FILESTREAM을 사용해야 합니다.If the following conditions are true, you should consider using FILESTREAM:

  • 저장되는 개체가 평균적으로 1MB를 초과할 경우Objects that are being stored are, on average, larger than 1 MB.
  • 신속한 읽기 액세스가 중요할 경우Fast read access is important.
  • 중간 계층 응용 프로그램 논리를 사용하는 응용 프로그램을 개발할 경우You are developing applications that use a middle tier for application logic.

크기가 작은 개체의 경우 데이터베이스에 varbinary(max) BLOB을 저장하면 스트리밍 성능이 더 좋아집니다.For smaller objects, storing varbinary(max) BLOBs in the database often provides better streaming performance.

FILESTREAM 저장소FILESTREAM Storage

FILESTREAM 저장소는 데이터가 파일 시스템에 BLOB으로 저장된 varbinary(max) 열로 구현됩니다.FILESTREAM storage is implemented as a varbinary(max) column in which the data is stored as BLOBs in the file system. BLOB의 크기는 파일 시스템의 볼륨 크기로만 제한됩니다.The sizes of the BLOBs are limited only by the volume size of the file system. 표준 varbinary(max) 제한은 2GB의 파일 크기로 파일 시스템에 저장된 BLOB에 적용되지 않습니다.The standard varbinary(max) limitation of 2-GB file sizes does not apply to BLOBs that are stored in the file system.

파일 시스템에 열의 데이터를 저장하도록 지정하려면 varbinary(max) 열에 FILESTREAM 특성을 지정합니다.To specify that a column should store data on the file system, specify the FILESTREAM attribute on a varbinary(max) column. 이렇게 하면 데이터베이스 엔진Database Engine 에서 해당 열의 모든 데이터를 데이터베이스 파일이 아닌 파일 시스템에 저장하게 됩니다.This causes the 데이터베이스 엔진Database Engine to store all data for that column on the file system, but not in the database file.

FILESTREAM 데이터는 FILESTREAM 파일 그룹에 저장되어야 합니다.FILESTREAM data must be stored in FILESTREAM filegroups. FILESTREAM 파일 그룹은 파일 자체가 아닌 파일 시스템 디렉터리를 포함하는 특수한 파일 그룹입니다.A FILESTREAM filegroup is a special filegroup that contains file system directories instead of the files themselves. 이러한 파일 시스템 디렉터리를 데이터 컨테이너라고 합니다.These file system directories are called data containers. 데이터 컨테이너는 데이터베이스 엔진Database Engine 저장소와 파일 시스템 저장소 사이의 인터페이스입니다.Data containers are the interface between 데이터베이스 엔진Database Engine storage and file system storage.

FILESTREAM 저장소를 사용할 때 다음 사항을 고려하십시오.When you use FILESTREAM storage, consider the following:

  • 테이블에 FILESTREAM 열이 있을 경우 각 행에는 Null이 아닌 고유한 행 ID가 있어야 합니다.When a table contains a FILESTREAM column, each row must have a nonnull unique row ID.
  • FILESTREAM 파일 그룹에는 여러 개의 데이터 컨테이너를 추가할 수 있습니다.Multiple data containers can be added to a FILESTREAM filegroup.
  • FILESTREAM 데이터 컨테이너는 중첩될 수 없습니다.FILESTREAM data containers cannot be nested.
  • 장애 조치(failover) 클러스터링을 사용할 경우 FILESTREAM 파일 그룹이 공유 디스크 리소스에 있어야 합니다.When you are using failover clustering, the FILESTREAM filegroups must be on shared disk resources.
  • FILESTREAM 파일 그룹은 압축된 볼륨에 있을 수 있습니다.FILESTREAM filegroups can be on compressed volumes.

통합 관리Integrated Management

FILESTREAM이 varbinary(max) 열로 구현되어 데이터베이스 엔진Database Engine으로 바로 통합되었으므로 대부분의 SQL ServerSQL Server 관리 도구 및 기능이 FILESTREAM 데이터를 수정하지 않고 수행됩니다.Because FILESTREAM is implemented as a varbinary(max) column and integrated directly into the 데이터베이스 엔진Database Engine, most SQL ServerSQL Server management tools and functions work without modification for FILESTREAM data. 예를 들어 FILESTREAM 데이터로 모든 백업 및 복구 모델을 사용할 수 있고 FILESTREAM 데이터는 구조화된 데이터와 함께 데이터베이스에 백업됩니다.For example, you can use all backup and recovery models with FILESTREAM data, and the FILESTREAM data is backed up with the structured data in the database. FILESTREAM 데이터를 관계형 데이터와 함께 백업하지 않으려면 부분 백업을 사용하여 FILESTREAM 파일 그룹을 제외할 수 있습니다.If you do not want to back up FILESTREAM data with relational data, you can use a partial backup to exclude FILESTREAM filegroups.

Integrated SecurityIntegrated Security

SQL ServerSQL Server에서 FILESTREAM 데이터는 다른 데이터와 마찬가지로 테이블 또는 열 수준에서 사용 권한을 부여하여 보안이 설정됩니다.In SQL ServerSQL Server, FILESTREAM data is secured just like other data is secured: by granting permissions at the table or column levels. 사용자가 테이블의 FILESTREAM 열에 대한 사용 권한이 있을 경우 이 사용자는 관련 파일을 열 수 있습니다.If a user has permission to the FILESTREAM column in a table, the user can open the associated files.

참고

암호화는 FILESTREAM 데이터에서 지원되지 않습니다.Encryption is not supported on FILESTREAM data.

SQL ServerSQL Server 서비스 계정을 실행하는 계정에만 FILESTREAM 컨테이너에 대한 사용 권한이 부여됩니다.Only the account under which the SQL ServerSQL Server service account runs is granted permissions to the FILESTREAM container. 다른 계정에는 데이터 컨테이너에 대한 사용 권한을 부여하지 않는 것이 좋습니다.We recommend that no other account be granted permissions on the data container.

참고

SQL 로그인은 FILESTREAM 컨테이너에서 작동하지 않습니다.SQL logins will not work with FILESTREAM containers. NTFS 또는 ReFS 인증만 FILESTREAM 컨테이너에서 작동합니다.Only NTFS or ReFS authentication will work with FILESTREAM containers.

TRANSACT-SQL 및 파일 시스템 스트리밍 액세스를 사용하여 BLOB 데이터 액세스Accessing BLOB Data with Transact-SQL and File System Streaming Access

FILESTREAM 열에 데이터를 저장한 후 Transact-SQLTransact-SQL 트랜잭션 또는 Win32 API를 사용하여 해당 파일에 액세스할 수 있습니다.After you store data in a FILESTREAM column, you can access the files by using Transact-SQLTransact-SQL transactions or by using Win32 APIs.

Transact-SQL 액세스Transact-SQL Access

Transact-SQLTransact-SQL을 사용하여 FILESTREAM 데이터를 삽입, 업데이트 및 삭제할 수 있습니다.By using Transact-SQLTransact-SQL, you can insert, update, and delete FILESTREAM data:

  • 삽입 작업을 통해 FILESTREAM 필드를 Null 값, 비어 있는 값 또는 상대적으로 짧은 인라인 데이터로 미리 채울 수 있습니다.You can use an insert operation to prepopulate a FILESTREAM field with a null value, empty value, or relatively short inline data. 그러나 크기가 큰 데이터는 Win32 인터페이스를 사용하는 파일로 좀 더 효율적으로 스트리밍됩니다.However, a large amount of data is more efficiently streamed into a file that uses Win32 interfaces.
  • FILESTREAM 필드를 업데이트할 때 파일 시스템의 기본 BLOB 데이터를 수정합니다.When you update a FILESTREAM field, you modify the underlying BLOB data in the file system. FILESTREAM 필드를 NULL로 설정하면 이 필드와 연결된 BLOB 데이터가 삭제됩니다.When a FILESTREAM field is set to NULL, the BLOB data associated with the field is deleted. 데이터의 부분 업데이트를 수행하기 위해 UPDATE Transact-SQLTransact-SQL .Write()로 구현된청크 업데이트를 사용할 수 없습니다.You cannot use a Transact-SQLTransact-SQL chunked update, implemented as UPDATE.Write(), to perform partial updates to the data.
  • 행을 삭제하거나 FILESTREAM 데이터가 들어 있는 테이블을 삭제하거나 잘라내면 파일 시스템의 기본 BLOB 데이터가 삭제됩니다.When you delete a row or delete or truncate a table that contains FILESTREAM data, you delete the underlying BLOB data in the file system.

파일 시스템 스트리밍 액세스File System Streaming Access

Win32 스트리밍은 SQL ServerSQL Server 트랜잭션 컨텍스트의 작업을 지원합니다.The Win32 streaming support works in the context of a SQL ServerSQL Server transaction. 트랜잭션 내에서 FILESTREAM 기능을 사용하여 파일의 논리 UNC 파일 시스템 경로를 얻을 수 있습니다.Within a transaction, you can use FILESTREAM functions to obtain a logical UNC file system path of a file. 그런 다음 OpenSqlFilestream API를 사용하여 파일 핸들을 얻습니다.You then use the OpenSqlFilestream API to obtain a file handle. 이 핸들은 파일 시스템의 방식에 따라 파일에 액세스하여 업데이트하기 위해 ReadFile() 및 WriteFile() 같은 Win32 파일 스트리밍 인터페이스에서 사용될 수 있습니다.This handle can then be used by Win32 file streaming interfaces, such as ReadFile() and WriteFile(), to access and update the file by way of the file system.

파일 작업이 트랜잭션이므로 파일 시스템을 통해 FILESTREAM 파일을 삭제하거나 이 파일의 이름을 바꿀 수 없습니다.Because file operations are transactional, you cannot delete or rename FILESTREAM files through the file system.

문 모델Statement Model

FILESTREAM 파일 시스템 액세스는 파일 열기 및 닫기를 통해 Transact-SQLTransact-SQL 문을 모델로 합니다.The FILESTREAM file system access models a Transact-SQLTransact-SQL statement by using file open and close. 파일 핸들이 열릴 때 문이 시작되고 파일 핸들이 닫힐 때 문이 종료됩니다.The statement starts when a file handle is opened and ends when the handle is closed. 예를 들어 쓰기 핸들이 닫히면 UPDATE 문이 완료된 경우와 같이 테이블에 등록된 가능한 모든 AFTER 트리거가 실행됩니다.For example, when a write handle is closed, any possible AFTER trigger that is registered on the table fires as if an UPDATE statement is completed.

저장소 네임스페이스Storage Namespace

FILESTREAM에서 데이터베이스 엔진Database Engine 은 BLOB 물리적 파일 시스템 네임스페이스를 제어합니다.In FILESTREAM, the 데이터베이스 엔진Database Engine controls the BLOB physical file system namespace. 새 내장 함수인 PathName에서는 테이블의 각 FILESTREAM 셀에 해당하는 BLOB의 논리 UNC 경로를 제공합니다.A new intrinsic function, PathName, provides the logical UNC path of the BLOB that corresponds to each FILESTREAM cell in the table. 응용 프로그램에서는 이 논리 경로를 사용하여 Win32 핸들을 얻고 일반적인 Win32 파일 시스템 인터페이스를 사용하여 BLOB 데이터에 대한 작업을 수행합니다.The application uses this logical path to obtain the Win32 handle and operate on the BLOB data by using regular Win32 file system interfaces. FILESTREAM 열의 값이 NULL인 경우 함수는 NULL을 반환합니다.The function returns NULL if the value of the FILESTREAM column is NULL.

트랜잭션된 파일 시스템 액세스Transacted File System Access

새 내장 함수인 GET_FILESTREAM_TRANSACTION_CONTEXT()에서는 세션에 연결된 현재 트랜잭션을 나타내는 토큰을 제공합니다.A new intrinsic function, GET_FILESTREAM_TRANSACTION_CONTEXT(), provides the token that represents the current transaction that the session is associated with. 트랜잭션이 시작되었지만 아직 중단되거나 커밋되지 않았습니다.The transaction must have been started and not yet aborted or committed. 토큰을 가져와서 응용 프로그램은 FILESTREAM 파일 시스템 스트리밍 작업을 시작된 트랜잭션과 바인딩합니다.By obtaining a token, the application binds the FILESTREAM file system streaming operations with a started transaction. 명시적으로 시작된 트랜잭션이 없을 경우에는 함수는 NULL을 반환합니다.The function returns NULL in case of no explicitly started transaction.

트랜잭션이 커밋되거나 중단되기 전에는 모든 파일 핸들이 닫혀 있어야 합니다.All file handles must be closed before the transaction commits or aborts. 핸들이 트랜잭션 범위 이상으로 열려 있으면 핸들에 대한 추가 읽기가 실패하고 이 핸들에 대한 추가 쓰기는 성공하지만 실제 데이터가 디스크에 작성되지 않습니다.If a handle is left open beyond the transaction scope, additional reads against the handle will cause a failure; additional writes against the handle will succeed, but the actual data will not be written to disk. 비슷하게 데이터베이스 엔진Database Engine 의 데이터베이스나 인스턴스가 종료되면 열려 있는 모든 핸들이 무효화됩니다.Similarly, if the database or instance of the 데이터베이스 엔진Database Engine shuts down, all open handles are invalidated.

트랜잭션 내구성Transactional Durability

트랜잭션 커밋에 FILESTREAM을 사용하면 데이터베이스 엔진Database Engine 에서는 파일 시스템 스트리밍 액세스에서 수정된 FILESTREAM BLOB 데이터에 트랜잭션 유지 기능을 사용할 수 있습니다.With FILESTREAM, upon transaction commit, the 데이터베이스 엔진Database Engine ensures transaction durability for FILESTREAM BLOB data that is modified from the file system streaming access.

격리 의미 체계Isolation Semantics

격리 의미 체계는 데이터베이스 엔진Database Engine 트랜잭션 격리 수준에 따라 결정됩니다.The isolation semantics are governed by 데이터베이스 엔진Database Engine transaction isolation levels. Transact-SQLTransact-SQL 및 파일 시스템 액세스에는 커밋된 읽기 격리 수준이 지원됩니다.Read-committed isolation level is supported for Transact-SQLTransact-SQL and file system access. 반복 읽기 작업과 직렬화 가능 및 스냅숏 격리도 지원됩니다.Repeatable read operations, and also serializable and snapshot isolations, are supported. 커밋되지 않은 읽기는 지원되지 않습니다.Dirty read is not supported.

파일 시스템 액세스 열기 작업은 잠금을 기다리지 않습니다.The file system access open operations do not wait for any locks. 대신 트랜잭션 격리로 인해 데이터에 액세스할 수 없을 경우 즉시 열기 작업에 실패합니다.Instead, the open operations fail immediately if they cannot access the data because of transaction isolation. 격리 위반으로 인해 열기 작업을 계속 진행할 수 없을 경우 ERROR_SHARING_VIOLATION이 발생하며 스트리밍 API 호출에 실패합니다.The streaming API calls fail with ERROR_SHARING_VIOLATION if the open operation cannot continue because of isolation violation.

부분 업데이트가 수행되도록 허용하려면 응용 프로그램이 장치 FS 컨트롤(FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT)을 실행하여 이전 내용을 열려 있는 핸들이 참조하는 파일로 인출할 수 있습니다.To allow for partial updates to be made, the application can issue a device FS control (FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT) to fetch the old content into the file that the opened handle references. 이 작업으로 인해 서버 쪽의 오래된 내용 복사가 트리거됩니다.This will trigger a server-side old content copy. 응용 프로그램 성능을 더 향상시키고 큰 파일로 작업 시 제한 시간이 초과되는 것을 방지하려면 비동기 I/O를 사용하는 것이 좋습니다.For better application performance and to avoid running into potential time-outs when you are working with very large files, we recommend that you use asynchronous I/O.

핸들이 작성된 후 FSCTL이 실행되면 마지막 쓰기 작업이 유지되고 핸들에 기록된 이전의 쓰기 작업은 손실됩니다.If the FSCTL is issued after the handle has been written to, the last write operation will persist, and prior writes that were made to the handle are lost.

파일 시스템 API 및 지원되는 격리 수준File System APIs and Supported Isolation Levels

격리 위반으로 인해 파일 시스템 API에서 파일을 열 수 없는 경우 ERROR_SHARING_VIOLATION 예외가 반환됩니다.When a file system API cannot open a file because of an isolation violation, an ERROR_SHARING_VIOLATION exception is returned. 두 트랜잭션에서 동일한 파일에 액세스를 시도하면 이 격리 위반이 발생합니다.This isolation violation occurs when two transactions try to access the same file. 액세스 작업의 결과는 파일이 열릴 때의 모드와 트랜잭션이 실행되고 있는 SQL ServerSQL Server 의 버전에 따라 달라집니다.The outcome of the access operation depends on the mode the file was opened in and the version of SQL ServerSQL Server that the transaction is running on. 다음 표에서는 두 트랜잭션에서 동일한 파일에 액세스할 때 발생할 수 있는 결과를 간략하게 설명합니다.The following table outlines the possibly outcomes for two transactions that are accessing the same file.

트랜잭션 1Transaction 1 트랜잭션 2Transaction 2 SQL Server 2008에서의 결과Outcome on SQL Server 2008 SQL Server 2008 R2 이상에서의 결과Outcome on SQL Server 2008 R2 and later versions
읽기를 위해 열기Open for read. 읽기를 위해 열기Open for read. 모두 성공Both succeed. 모두 성공Both succeed.
읽기를 위해 열기Open for read. 쓰기를 위해 열기Open for write. 모두 성공Both succeed. 트랜잭션 2에서 수행되는 쓰기 작업이 트랜잭션 1에서 수행되는 읽기 작업에 영향을 주지 않습니다.Write operations under transaction 2 do not affect read operations performed in transaction 1. 모두 성공Both succeed. 트랜잭션 2에서 수행되는 쓰기 작업이 트랜잭션 1에서 수행되는 읽기 작업에 영향을 주지 않습니다.Write operations under transaction 2 do not affect read operations performed in transaction 1.
쓰기를 위해 열기Open for write. 읽기를 위해 열기Open for read. 트랜잭션 2의 열기 작업이 실패하고 ERROR_SHARING_VIOLATION 예외가 발생합니다.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception. 모두 성공Both succeed.
쓰기를 위해 열기Open for write. 쓰기를 위해 열기Open for write. 트랜잭션 2의 열기 작업이 실패하고 ERROR_SHARING_VIOLATION 예외가 발생합니다.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception. 트랜잭션 2의 열기 작업이 실패하고 ERROR_SHARING_VIOLATION 예외가 발생합니다.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception.
읽기를 위해 열기Open for read. 선택을 위해 열기Open for SELECT. 모두 성공Both succeed. 모두 성공Both succeed.
읽기를 위해 열기Open for read. 업데이트 또는 삭제를 위해 열기Open for UPDATE or DELETE. 모두 성공Both succeed. 트랜잭션 2에서 수행되는 쓰기 작업이 트랜잭션 1에서 수행되는 읽기 작업에 영향을 주지 않습니다.Write operations under transaction 2 do not affect read operations performed in transaction 1. 모두 성공Both succeed. 트랜잭션 2에서 수행되는 쓰기 작업이 트랜잭션 1에서 수행되는 읽기 작업에 영향을 주지 않습니다.Write operations under transaction 2 do not affect read operations performed in transaction 1.
쓰기를 위해 열기Open for write. 선택을 위해 열기open for SELECT. 트랜잭션 1이 트랜잭션을 커밋 또는 종료하거나 트랜잭션 잠금 시간이 초과될 때까지 트랜잭션 2가 차단됩니다.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out. 모두 성공Both succeed.
쓰기를 위해 열기Open for write. 업데이트 또는 삭제를 위해 열기Open for UPDATE or DELETE. 트랜잭션 1이 트랜잭션을 커밋 또는 종료하거나 트랜잭션 잠금 시간이 초과될 때까지 트랜잭션 2가 차단됩니다.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out. 트랜잭션 1이 트랜잭션을 커밋 또는 종료하거나 트랜잭션 잠금 시간이 초과될 때까지 트랜잭션 2가 차단됩니다.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out.
선택을 위해 열기Open for SELECT. 읽기를 위해 열기Open for read. 모두 성공Both succeed. 모두 성공Both succeed.
선택을 위해 열기Open for SELECT. 쓰기를 위해 열기Open for write. 모두 성공Both succeed. 트랜잭션 2의 쓰기 작업이 트랜잭션 1에 영향을 주지 않습니다.Write operations under transaction 2 do not affect transaction 1. 모두 성공Both succeed. 트랜잭션 2의 쓰기 작업이 트랜잭션 1에 영향을 주지 않습니다.Write operations under transaction 2 do not affect transaction 1.
업데이트 또는 삭제를 위해 열기Open for UPDATE or DELETE. 읽기를 위해 열기Open for read. 트랜잭션 2의 열기 작업이 실패하고 ERROR_SHARING_VIOLATION 예외가 발생합니다.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. 모두 성공Both succeed.
업데이트 또는 삭제를 위해 열기Open for UPDATE or DELETE. 쓰기를 위해 열기Open for write. 트랜잭션 2의 열기 작업이 실패하고 ERROR_SHARING_VIOLATION 예외가 발생합니다.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. 트랜잭션 2의 열기 작업이 실패하고 ERROR_SHARING_VIOLATION 예외가 발생합니다.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception.
선택을 위해 열기(반복 읽기 사용)Open for SELECT with repeatable read. 읽기를 위해 열기Open for read. 모두 성공Both succeed. 모두 성공Both succeed.
선택을 위해 열기(반복 읽기 사용)Open for SELECT with repeatable read. 쓰기를 위해 열기Open for write. 트랜잭션 2의 열기 작업이 실패하고 ERROR_SHARING_VIOLATION 예외가 발생합니다.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. 트랜잭션 2의 열기 작업이 실패하고 ERROR_SHARING_VIOLATION 예외가 발생합니다.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception.

원격 클라이언트를 통한 쓰기Write-Through from Remote Clients

FILESTREAM 데이터에 대한 원격 파일 시스템 액세스는 SMB(서버 메시지 블록) 프로토콜을 통해 사용할 수 있습니다.Remote file system access to FILESTREAM data is enabled over the Server Message Block (SMB) protocol. 클라이언트가 원격일 경우 클라이언트 쪽에서 캐시하는 쓰기 작업이 없습니다.If the client is remote, no write operations are cached by the client side. 쓰기 작업은 항상 서버로 전송되고,The write operations will always be sent to the server. 데이터는 서버 쪽에서 캐시합니다.The data can be cached on the server side. 원격 클라이언트에서 실행 중인 응용 프로그램은 작은 쓰기 작업을 통합하여 더 큰 크기의 데이터를 사용하는 쓰기 작업이 적어집니다.We recommend that applications that are running on remote clients consolidate small write operations to make fewer write operations using larger data size.

FILESTREAM 핸들을 사용하여 메모리 매핑된 뷰(메모리 매핑된 I/O)를 만들 수는 없습니다.Creating memory mapped views (memory mapped I/O) by using a FILESTREAM handle is not supported. 메모리 매핑을 FILESTREAM 데이터에 사용할 경우 데이터베이스 엔진Database Engine 은 데이터의 일관성과 지속성 또는 데이터베이스의 무결성을 보장할 수 없습니다.If memory mapping is used for FILESTREAM data, the 데이터베이스 엔진Database Engine cannot guarantee consistency and durability of the data or the integrity of the database.

FILESTREAM 사용 및 구성Enable and Configure FILESTREAM
FILESTREAM 사용 데이터베이스 만들기Create a FILESTREAM-Enabled Database
FILESTREAM 데이터 저장용 테이블 만들기Create a Table for Storing FILESTREAM Data
Transact-SQL을 사용하여 FILESTREAM 데이터 액세스 FILESTREAM 데이터용 클라이언트 응용 프로그램 만들기Access FILESTREAM Data with Transact-SQL Create Client Applications for FILESTREAM Data
OpenSqlFilestream을 사용하여 FILESTREAM 데이터 액세스Access FILESTREAM Data with OpenSqlFilestream
FILESTREAM 데이터 부분 업데이트Make Partial Updates to FILESTREAM Data
FILESTREAM 응용 프로그램에서 데이터베이스 작업과의 충돌 방지Avoid Conflicts with Database Operations in FILESTREAM Applications
FILESTREAM 사용 데이터베이스 이동Move a FILESTREAM-Enabled Database
장애 조치(Failover) 클러스터에서 FILESTREAM 설정Set Up FILESTREAM on a Failover Cluster
FILESTREAM 액세스를 위한 방화벽 구성Configure a Firewall for FILESTREAM Access

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