SET TRANSACTION ISOLATION LEVEL(Transact-SQL)SET TRANSACTION ISOLATION LEVEL (Transact-SQL)

적용 대상: 예SQL Server 예Azure SQL Database 예Azure Synapse Analytics(SQL DW) 예병렬 데이터 웨어하우스 APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

Transact-SQLTransact-SQL에 연결하여 실행되는 SQL ServerSQL Server 문의 잠금 및 행 버전 관리 기능을 제어합니다.Controls the locking and row versioning behavior of Transact-SQLTransact-SQL statements issued by a connection to SQL ServerSQL Server.

항목 링크 아이콘 Transact-SQL 구문 규칙Topic link icon Transact-SQL Syntax Conventions

구문Syntax

-- Syntax for SQL Server and Azure SQL Database
  
SET TRANSACTION ISOLATION LEVEL
    { READ UNCOMMITTED
    | READ COMMITTED
    | REPEATABLE READ
    | SNAPSHOT
    | SERIALIZABLE
    }
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse
  
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

인수Arguments

READ UNCOMMITTEDREAD UNCOMMITTED
다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 행을 문이 읽을 수 있도록 지정합니다.Specifies that statements can read rows that have been modified by other transactions but not yet committed.

READ UNCOMMITTED 수준에서 실행 중인 트랜잭션은 현재 트랜잭션에서 읽은 데이터를 다른 트랜잭션에서 수정하지 못하도록 하는 공유 잠금을 실행하지 않습니다.Transactions running at the READ UNCOMMITTED level do not issue shared locks to prevent other transactions from modifying data read by the current transaction. 또한 READ UNCOMMITTED 트랜잭션은 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 행을 현재 트랜잭션이 읽지 못하도록 하는 배타적 잠금에 의해 차단되지도 않습니다.READ UNCOMMITTED transactions are also not blocked by exclusive locks that would prevent the current transaction from reading rows that have been modified but not committed by other transactions. 이 옵션을 설정하면 커밋되지 않은 수정 내용을 읽을 수 있습니다. 이런 경우를 더티 읽기라고 합니다.When this option is set, it is possible to read uncommitted modifications, which are called dirty reads. 트랜잭션이 종료되기 전에 데이터의 값을 변경하고 데이터 집합에 행을 표시하거나 표시하지 않을 수 있습니다.Values in the data can be changed and rows can appear or disappear in the data set before the end of the transaction. 이 옵션은 트랜잭션에서 모든 SELECT 문의 모든 테이블에 NOLOCK을 설정하는 것과 같습니다.This option has the same effect as setting NOLOCK on all tables in all SELECT statements in a transaction. 또한 격리 수준 중에서 제한이 가장 적습니다.This is the least restrictive of the isolation levels.

SQL ServerSQL Server에서는 다음 중 하나를 사용하여 트랜잭션에서 커밋되지 않은 데이터 수정 내용에 대해 더티 읽기를 수행할 수 없도록 하여 잠금 경합을 최소화할 수도 있습니다.In SQL ServerSQL Server, you can also minimize locking contention while protecting transactions from dirty reads of uncommitted data modifications using either:

  • READ_COMMITTED_SNAPSHOT 데이터베이스 옵션이 ON으로 설정된 READ COMMITTED 격리 수준The READ COMMITTED isolation level with the READ_COMMITTED_SNAPSHOT database option set to ON.

  • SNAPSHOT 격리 수준The SNAPSHOT isolation level. 스냅샷 격리에 대한 자세한 내용은 SQL Server에서의 스냅샷 격리를 참조하세요.For more information about snapshot isolation, see Snapshot Isolation in SQL Server.

READ COMMITTEDREAD COMMITTED
다른 트랜잭션에 의해 수정되었지만 커밋되지 않은 데이터를 문이 읽을 수 없도록 지정합니다.Specifies that statements cannot read data that has been modified but not committed by other transactions. 이렇게 하면 더티 읽기를 방지할 수 있습니다.This prevents dirty reads. 현재 트랜잭션 내에 있는 개별 문 간에 다른 트랜잭션에서 데이터를 변경하면 반복할 수 없는 읽기가 발생하거나 가상 데이터가 될 수 있습니다.Data can be changed by other transactions between individual statements within the current transaction, resulting in nonrepeatable reads or phantom data. 이 옵션은 SQL ServerSQL Server 기본값입니다.This option is the SQL ServerSQL Server default.

READ COMMITTED의 동작은 다음과 같이 READ_COMMITTED_SNAPSHOT 데이터베이스 옵션 설정에 따라 달라집니다.The behavior of READ COMMITTED depends on the setting of the READ_COMMITTED_SNAPSHOT database option:

  • READ_COMMITTED_SNAPSHOT이 OFF(SQL Server의 기본값)로 설정되어 있으면 데이터베이스 엔진Database Engine은 공유 잠금을 사용하여 현재 트랜잭션이 읽기 작업을 실행하는 동안 다른 트랜잭션이 행을 수정하지 못하도록 합니다.If READ_COMMITTED_SNAPSHOT is set to OFF (the default on SQL Server), the 데이터베이스 엔진Database Engine uses shared locks to prevent other transactions from modifying rows while the current transaction is running a read operation. 또한 공유 잠금은 다른 트랜잭션이 완료될 때까지 해당 트랜잭션이 수정한 행을 문이 읽을 수 없도록 합니다.The shared locks also block the statement from reading rows modified by other transactions until the other transaction is completed. 공유 잠금의 해제 시기는 공유 잠금 유형에 의해 결정됩니다.The shared lock type determines when it will be released. 행 잠금은 다음 행이 처리되기 전에 해제되고,Row locks are released before the next row is processed. 페이지 잠금은 다음 페이지를 읽을 때 해제되고 테이블 잠금은 명령문이 끝나면 해제됩니다.Page locks are released when the next page is read, and table locks are released when the statement finishes.

  • READ_COMMITTED_SNAPSHOT이 ON(SQL Azure Database의 기본값)으로 설정되어 있으면 데이터베이스 엔진Database Engine은 행 버전 관리를 사용하여 명령문 시작 시와 트랜잭션별로 데이터의 일관성이 유지된 스냅샷을 각 명령문에 제공합니다.If READ_COMMITTED_SNAPSHOT is set to ON (the default on SQL Azure Database), the 데이터베이스 엔진Database Engine uses row versioning to present each statement with a transactionally consistent snapshot of the data as it existed at the start of the statement. 다른 트랜잭션에 의한 데이터 업데이트 차단을 위해 잠금이 사용되지는 않습니다.Locks are not used to protect the data from updates by other transactions.

중요

트랜잭션 격리 수준을 선택해도 데이터 수정 내용을 보호하기 위해 획득된 잠금에는 영향을 주지 않습니다.Choosing a transaction isolation level does not affect the locks acquired to protect data modifications. 설정된 격리 수준에 관계없이 트랜잭션은 항상 수정하는 데이터에 대해 배타적 잠금을 얻고 해당 트랜잭션이 완료될 때까지 이 잠금을 보유합니다.A transaction always gets an exclusive lock on any data it modifies, and holds that lock until the transaction completes, regardless of the isolation level set for that transaction. 또한 READ_COMMITTED 격리 수준에서 이루어진 업데이트는 선택된 데이터 행에 대한 업데이트 잠금을 사용하지만, SNAPSHOT 격리 수준에서 이루어진 업데이트는 행 버전을 사용하여 업데이트할 행을 선택합니다.Additionally, an update made at the READ_COMMITTED isolation level uses update locks on the data rows selected, whereas an update made at the SNAPSHOT isolation level uses row versions to select rows to update. 읽기 작업의 경우 트랜잭션 격리 수준은 대개 다른 트랜잭션에서 수정한 내용의 영향을 받지 않도록 보호 수준을 정의합니다.For read operations, transaction isolation levels primarily define the level of protection from the effects of modifications made by other transactions. 자세한 내용은 트랜잭션 잠금 및 행 버전 관리 지침을 참조하세요.See the Transaction Locking and Row Versioning Guide for more information.

참고

스냅샷 격리는 FILESTREAM 데이터를 지원합니다.Snapshot isolation supports FILESTREAM data. 스냅샷 격리 모드에서는 트랜잭션의 문이 읽은 FILESTREAM 데이터가 트랜잭션 시작 시와 트랜잭션별로 데이터 버전의 일관성이 유지되도록 지정합니다.Under snapshot isolation mode, FILESTREAM data read by any statement in a transaction will be the transactionally consistent version of the data that existed at the start of the transaction.

READ_COMMITTED_SNAPSHOT 데이터베이스 옵션이 ON인 경우 READCOMMITTEDLOCK 테이블 힌트를 사용하여 READ_COMMITTED 격리 수준에서 실행 중인 트랜잭션의 개별 문에 대해 행 버전 관리 대신 공유 잠금을 요청할 수 있습니다.When the READ_COMMITTED_SNAPSHOT database option is ON, you can use the READCOMMITTEDLOCK table hint to request shared locking instead of row versioning for individual statements in transactions running at the READ COMMITTED isolation level.

참고

READ_COMMITTED_SNAPSHOT 옵션을 설정할 때는 ALTER DATABASE 명령을 실행하는 연결만 데이터베이스에서 허용됩니다.When you set the READ_COMMITTED_SNAPSHOT option, only the connection executing the ALTER DATABASE command is allowed in the database. ALTER DATABASE 명령 실행이 완료될 때까지 데이터베이스에서 다른 열린 연결이 없어야 합니다.There must be no other open connection in the database until ALTER DATABASE is complete. 데이터베이스가 단일 사용자 모드에 있을 필요는 없습니다.The database does not have to be in single-user mode.

REPEATABLE READREPEATABLE READ
다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 문이 읽을 수 없도록 지정하고 현재 트랜잭션이 완료될 때까지 현재 트랜잭션이 읽은 데이터를 다른 트랜잭션이 수정할 수 없도록 지정합니다.Specifies that statements cannot read data that has been modified but not yet committed by other transactions and that no other transactions can modify data that has been read by the current transaction until the current transaction completes.

공유 잠금은 트랜잭션의 각 문이 읽은 모든 데이터에 적용되며 트랜잭션이 완료될 때까지 유지됩니다.Shared locks are placed on all data read by each statement in the transaction and are held until the transaction completes. 따라서 다른 트랜잭션은 현재 트랜잭션이 읽은 행을 수정할 수 없습니다.This prevents other transactions from modifying any rows that have been read by the current transaction. 다른 트랜잭션은 현재 트랜잭션이 실행한 문의 검색 조건과 일치하는 새 행을 삽입할 수 있습니다.Other transactions can insert new rows that match the search conditions of statements issued by the current transaction. 그런 다음 현재 트랜잭션이 문을 다시 시도하면 새 행이 검색되고 가상 읽기가 수행됩니다.If the current transaction then retries the statement it will retrieve the new rows, which results in phantom reads. 공유 잠금은 각 문이 끝날 때 해제되지 않고 트랜잭션이 끝날 때까지 유지되므로 동시성이 기본 READ COMMITTED 격리 수준보다 낮습니다.Because shared locks are held to the end of a transaction instead of being released at the end of each statement, concurrency is lower than the default READ COMMITTED isolation level. 이 옵션은 필요한 경우에만 사용하세요.Use this option only when necessary.

SNAPSHOTSNAPSHOT
트랜잭션의 문이 읽은 데이터가 트랜잭션별로 트랜잭션을 시작할 때 존재한 데이터 버전과 일관성이 유지되도록 지정합니다.Specifies that data read by any statement in a transaction will be the transactionally consistent version of the data that existed at the start of the transaction. 트랜잭션은 시작되기 전에 커밋된 데이터 수정 내용만 인식할 수 있습니다.The transaction can only recognize data modifications that were committed before the start of the transaction. 현재 트랜잭션이 시작된 후 다른 트랜잭션에서 수정한 데이터는 현재 트랜잭션에서 실행되는 문에 표시되지 않습니다.Data modifications made by other transactions after the start of the current transaction are not visible to statements executing in the current transaction. 따라서 트랜잭션의 문이 트랜잭션 시작 당시 커밋된 데이터의 스냅샷을 가져오는 것처럼 보입니다.The effect is as if the statements in a transaction get a snapshot of the committed data as it existed at the start of the transaction.

데이터베이스가 복구 중인 경우를 제외하면 SNAPSHOT 트랜잭션은 데이터를 읽는 동안 잠금을 요청하지 않습니다.Except when a database is being recovered, SNAPSHOT transactions do not request locks when reading data. 데이터를 읽는 SNAPSHOT 트랜잭션은 다른 트랜잭션의 데이터 쓰기를 차단하지 않으며SNAPSHOT transactions reading data do not block other transactions from writing data. 데이터를 쓰는 트랜잭션은 SNAPSHOT 트랜잭션의 데이터 읽기를 차단하지 않습니다.Transactions writing data do not block SNAPSHOT transactions from reading data.

데이터베이스 복구를 롤백하는 동안 SNAPSHOT 트랜잭션은 롤백 중인 다른 트랜잭션이 잠근 데이터를 읽으려는 시도가 있을 경우 잠금을 요청합니다.During the roll-back phase of a database recovery, SNAPSHOT transactions will request a lock if an attempt is made to read data that is locked by another transaction that is being rolled back. SNAPSHOT 트랜잭션은 해당 트랜잭션이 롤백될 때까지 차단됩니다.The SNAPSHOT transaction is blocked until that transaction has been rolled back. 잠금은 부여된 후 바로 해제됩니다.The lock is released immediately after it has been granted.

SNAPSHOT 격리 수준을 사용하는 트랜잭션을 시작하려면 먼저 ALLOW_SNAPSHOT_ISOLATION 데이터베이스 옵션을 ON으로 설정해야 합니다.The ALLOW_SNAPSHOT_ISOLATION database option must be set to ON before you can start a transaction that uses the SNAPSHOT isolation level. SNAPSHOT 격리 수준을 사용하는 트랜잭션이 여러 데이터베이스의 데이터에 액세스할 경우 각 데이터베이스에서 ALLOW_SNAPSHOT_ISOLATION을 ON으로 설정해야 합니다.If a transaction using the SNAPSHOT isolation level accesses data in multiple databases, ALLOW_SNAPSHOT_ISOLATION must be set to ON in each database.

트랜잭션은 시작된 격리 수준과 다른 SNAPSHOT 격리 수준으로 설정할 수 없습니다. 이렇게 설정하면 트랜잭션이 중단됩니다.A transaction cannot be set to SNAPSHOT isolation level that started with another isolation level; doing so will cause the transaction to abort. 트랜잭션이 SNAPSHOT 격리 수준에서 시작되면 다른 격리 수준으로 변경한 다음 다시 SNAPSHOT으로 변경할 수 있습니다.If a transaction starts in the SNAPSHOT isolation level, you can change it to another isolation level and then back to SNAPSHOT. 트랜잭션은 데이터에 처음 액세스할 때 시작됩니다.A transaction starts the first time it accesses data.

SNAPSHOT 격리 수준에서 실행 중인 트랜잭션은 해당 트랜잭션에서 변경한 내용을 볼 수 있습니다.A transaction running under SNAPSHOT isolation level can view changes made by that transaction. 예를 들어 트랜잭션이 테이블에서 UPDATE를 수행한 다음 동일한 테이블에 대해 SELECT 문을 실행하면 수정된 데이터가 결과 집합에 포함됩니다.For example, if the transaction performs an UPDATE on a table and then issues a SELECT statement against the same table, the modified data will be included in the result set.

참고

스냅샷 격리 모드에서는 트랜잭션의 문이 읽은 FILESTREAM 데이터가 문 시작 시가 아니라 트랜잭션 시작 시와 트랜잭션별로 데이터 버전의 일관성이 유지되도록 지정합니다.Under snapshot isolation mode, FILESTREAM data read by any statement in a transaction will be the transactionally consistent version of the data that existed at the start of the transaction, not at the start of the statement.

SERIALIZABLESERIALIZABLE
다음을 지정합니다.Specifies the following:

  • 문은 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽을 수 없습니다.Statements cannot read data that has been modified but not yet committed by other transactions.

  • 현재 트랜잭션이 읽은 데이터는 현재 트랜잭션이 완료될 때까지 다른 트랜잭션에서 수정할 수 없습니다.No other transactions can modify data that has been read by the current transaction until the current transaction completes.

  • 다른 트랜잭션은 현재 트랜잭션이 완료된 다음에야 현재 트랜잭션의 문이 읽은 키 범위 내의 키 값을 가진 새 행을 삽입할 수 있습니다.Other transactions cannot insert new rows with key values that would fall in the range of keys read by any statements in the current transaction until the current transaction completes.

범위 잠금은 트랜잭션에서 실행된 각 문의 검색 조건과 일치하는 키 값의 범위에 적용됩니다.Range locks are placed in the range of key values that match the search conditions of each statement executed in a transaction. 따라서 다른 트랜잭션은 현재 트랜잭션에서 실행한 문에 한정되는 행을 업데이트하거나 삽입할 수 없습니다.This blocks other transactions from updating or inserting any rows that would qualify for any of the statements executed by the current transaction. 즉, 트랜잭션의 문이 다시 실행되면 동일한 행 집합을 읽게 됩니다.This means that if any of the statements in a transaction are executed a second time, they will read the same set of rows. 범위 잠금은 트랜잭션이 완료될 때까지 유지됩니다.The range locks are held until the transaction completes. 범위 잠금은 전체 키 범위를 잠그고 트랜잭션이 완료될 때까지 해당 잠금을 보유하므로 격리 수준 중에서 가장 제한적입니다.This is the most restrictive of the isolation levels because it locks entire ranges of keys and holds the locks until the transaction completes. 동시성이 더 낮기 때문에 필요할 때만 이 옵션을 사용하도록 하세요.Because concurrency is lower, use this option only when necessary. 이 옵션은 트랜잭션의 모든 SELECT 문의 모든 테이블에 HOLDLOCK을 설정하는 것과 같습니다.This option has the same effect as setting HOLDLOCK on all tables in all SELECT statements in a transaction.

RemarksRemarks

격리 수준 옵션은 한 번에 하나만 설정할 수 있으며 명시적으로 변경할 때까지는 해당 연결에 대한 설정이 그대로 유지됩니다.Only one of the isolation level options can be set at a time, and it remains set for that connection until it is explicitly changed. 문의 FROM 절에 있는 테이블 힌트가 테이블에 대해 다른 잠금 동작이나 버전 관리 동작을 지정하지 않는 한 트랜잭션 내에서 수행되는 모든 읽기 작업은 지정한 격리 수준의 규칙에 따라 수행됩니다.All read operations performed within the transaction operate under the rules for the specified isolation level unless a table hint in the FROM clause of a statement specifies different locking or versioning behavior for a table.

트랜잭션 격리 수준은 읽기 작업 시 획득되는 잠금 유형을 정의합니다.The transaction isolation levels define the type of locks acquired on read operations. 일반적으로 READ COMMITTED 또는 REPEATABLE READ에 대해 획득된 공유 잠금은 행 잠금입니다. 그러나 읽기 작업에서 페이지나 테이블의 많은 행을 참조하는 경우 이 행 잠금은 페이지 또는 테이블 잠금으로 에스컬레이션될 수 있습니다.Shared locks acquired for READ COMMITTED or REPEATABLE READ are generally row locks, although the row locks can be escalated to page or table locks if a significant number of the rows in a page or table are referenced by the read. 트랜잭션에서 행을 읽은 후 수정하면 트랜잭션은 해당 행을 보호하기 위해 배타적 잠금을 획득합니다. 이러한 배타적 잠금은 트랜잭션이 완료될 때까지 유지됩니다.If a row is modified by the transaction after it has been read, the transaction acquires an exclusive lock to protect that row, and the exclusive lock is retained until the transaction completes. 예를 들어 REPEATABLE READ 트랜잭션이 행에 공유 잠금을 설정한 다음 해당 행을 수정하면 공유 행 잠금은 배타적 행 잠금으로 변환됩니다.For example, if a REPEATABLE READ transaction has a shared lock on a row, and the transaction then modifies the row, the shared row lock is converted to an exclusive row lock.

한 가지 경우를 제외하고 트랜잭션 중 언제든지 다른 격리 수준으로 전환할 수 있습니다.With one exception, you can switch from one isolation level to another at any time during a transaction. 이 예외는 임의의 격리 수준에서 SNAPSHOT 격리로 변경할 때 발생합니다.The exception occurs when changing from any isolation level to SNAPSHOT isolation. 이렇게 하면 트랜잭션이 실패하고 롤백됩니다.Doing this causes the transaction to fail and roll back. 그러나 SNAPSHOT 격리에서 시작된 트랜잭션을 다른 격리 수준으로 변경할 수는 있습니다.However, you can change a transaction started in SNAPSHOT isolation to any other isolation level.

트랜잭션의 격리 수준을 변경하는 경우 변경 후에 읽은 리소스는 새 수준의 규칙에 따라 보호됩니다.When you change a transaction from one isolation level to another, resources that are read after the change are protected according to the rules of the new level. 변경 전에 읽은 리소스는 이전 수준의 규칙에 따라 계속 보호됩니다.Resources that are read before the change continue to be protected according to the rules of the previous level. 예를 들어 트랜잭션이 READ COMMITTED에서 SERIALIZABLE로 변경된 경우 변경 후에 획득한 공유 잠금이 이제 트랜잭션 끝까지 유지됩니다.For example, if a transaction changed from READ COMMITTED to SERIALIZABLE, the shared locks acquired after the change are now held until the end of the transaction.

저장 프로시저 또는 트리거에서 SET TRANSACTION ISOLATION LEVEL을 실행할 때 개체가 컨트롤을 반환하면 격리 수준은 개체 호출 시 수준으로 다시 설정됩니다.If you issue SET TRANSACTION ISOLATION LEVEL in a stored procedure or trigger, when the object returns control the isolation level is reset to the level in effect when the object was invoked. 예를 들어 일괄 처리에서 REPEATABLE READ를 설정한 다음 격리 수준을 SERIALIZABLE로 설정하는 저장 프로시저를 호출한 경우 저장 프로시저가 컨트롤을 일괄 처리로 반환하면 격리 수준 설정이 REPEATABLE READ로 되돌아갑니다.For example, if you set REPEATABLE READ in a batch, and the batch then calls a stored procedure that sets the isolation level to SERIALIZABLE, the isolation level setting reverts to REPEATABLE READ when the stored procedure returns control to the batch.

참고

사용자 정의 함수와 CLR(공용 언어 런타임) 사용자 정의 유형은 SET TRANSACTION ISOLATION LEVEL을 실행할 수 없습니다.User-defined functions and common language runtime (CLR) user-defined types cannot execute SET TRANSACTION ISOLATION LEVEL. 그러나 테이블 힌트를 사용하여 격리 수준을 재정의할 수 있습니다.However, you can override the isolation level by using a table hint. 자세한 내용은 테이블 힌트(Transact-SQL)를 참조하세요.For more information, see Table Hints (Transact-SQL).

sp_bindsession을 사용하여 두 세션을 바인딩하는 경우 각 세션은 해당 격리 수준 설정을 유지합니다.When you use sp_bindsession to bind two sessions, each session retains its isolation level setting. SET TRANSACTION ISOLATION LEVEL을 사용하여 한 세션의 격리 수준 설정을 변경해도 해당 세션에 바인딩된 다른 세션의 설정에는 영향을 주지 않습니다.Using SET TRANSACTION ISOLATION LEVEL to change the isolation level setting of one session does not affect the setting of any other sessions bound to it.

SET TRANSACTION ISOLATION LEVEL은 실행 시나 런타임에 적용되며 구문 분석 시에는 적용되지 않습니다.SET TRANSACTION ISOLATION LEVEL takes effect at execute or run time, and not at parse time.

힙의 최적화된 대량 로드 작업은 다음 격리 수준에서 실행되는 쿼리를 차단합니다.Optimized bulk load operations on heaps block queries that are running under the following isolation levels:

  • SNAPSHOTSNAPSHOT

  • READ UNCOMMITTEDREAD UNCOMMITTED

  • 행 버전 관리를 사용하는 READ COMMITTEDREAD COMMITTED using row versioning

반대로 이러한 격리 수준에서 실행된 쿼리는 힙의 최적화된 대량 로드 작업을 차단합니다.Conversely, queries that run under these isolation levels block optimized bulk load operations on heaps. 대량 로드 작업에 대한 자세한 내용은 데이터 대량 가져오기 및 내보내기(SQL Server)를 참조하세요.For more information about bulk load operations, see Bulk Import and Export of Data (SQL Server).

FILESTREAM 사용 데이터베이스는 다음 트랜잭션 격리 수준을 지원합니다.FILESTREAM-enabled databases support the following transaction isolation levels.

격리 수준Isolation level Transact SQL 액세스Transact SQL access 파일 시스템 액세스File system access
커밋되지 않은 읽기Read uncommitted SQL Server 2019 (15.x)SQL Server 2019 (15.x) 지원되지 않음Unsupported
커밋된 읽기Read committed SQL Server 2019 (15.x)SQL Server 2019 (15.x) SQL Server 2019 (15.x)SQL Server 2019 (15.x)
반복 읽기Repeatable read SQL Server 2019 (15.x)SQL Server 2019 (15.x) 지원되지 않음Unsupported
직렬화 가능Serializable SQL Server 2019 (15.x)SQL Server 2019 (15.x) 지원되지 않음Unsupported
커밋된 스냅샷 읽기Read committed snapshot SQL Server 2019 (15.x)SQL Server 2019 (15.x) SQL Server 2019 (15.x)SQL Server 2019 (15.x)
스냅샷Snapshot SQL Server 2019 (15.x)SQL Server 2019 (15.x) SQL Server 2019 (15.x)SQL Server 2019 (15.x)

Examples

다음 예에서는 세션에 대한 TRANSACTION ISOLATION LEVEL을 설정합니다.The following example sets the TRANSACTION ISOLATION LEVEL for the session. 이어지는 각 Transact-SQLTransact-SQL 문에 대해 SQL ServerSQL Server에서는 트랜잭션이 종료될 때까지 모든 공유 잠금을 보유합니다.For each Transact-SQLTransact-SQL statement that follows, SQL ServerSQL Server holds all of the shared locks until the end of the transaction.

USE AdventureWorks2012;  
GO  
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;  
GO  
BEGIN TRANSACTION;  
GO  
SELECT *   
    FROM HumanResources.EmployeePayHistory;  
GO  
SELECT *   
    FROM HumanResources.Department;  
GO  
COMMIT TRANSACTION;  
GO  

참고 항목See Also

ALTER DATABASE (Transact-SQL ) ALTER DATABASE (Transact-SQL)
DBCC USEROPTIONS(Transact-SQL) DBCC USEROPTIONS (Transact-SQL)
SELECT(Transact-SQL) SELECT (Transact-SQL)
SET 문(Transact-SQL) SET Statements (Transact-SQL)
테이블 힌트(Transact-SQL)Table Hints (Transact-SQL)