다음을 통해 공유


트랜잭션 격리 수준 조정

격리성 속성은 트랜잭션의 ACID(원자성, 일관성, 격리성 및 내구성)라는 4가지 속성 중 하나입니다. 이러한 ACID 속성을 보이는 논리 단위의 작업만이 트랜잭션으로 간주됩니다. 격리성 속성은 다른 동시 트랜잭션에서 수행하는 업데이트의 영향을 받지 않도록 트랜잭션을 보호합니다. 각 트랜잭션에 대해 격리 수준을 실제로 사용자 지정할 수 있습니다.

SQL Server 데이터베이스 엔진에서는 SQL-92에 정의된 트랜잭션 격리 수준이 지원됩니다. 트랜잭션 격리 수준을 설정하면 무결성 문제가 발생할 가능성이 높아지지만 데이터에 대한 동시 액세스를 더 많이 지원할 수 있습니다. 트랜잭션 격리 수준은 다음과 같습니다.

  • READ UNCOMMITTED

  • READ COMMITTED

  • REPEATABLE READ

  • SNAPSHOT

  • SERIALIZABLE

각 격리 수준은 보다 오랫동안 더 많은 제한적인 잠금을 보유하여 이전 수준보다 향상된 격리성을 제공합니다. 여기에는 두 가지 예외가 있습니다. READ_COMMITTED_SNAPSHOT을 ON으로 설정할 경우 SNAPSHOT과 READ COMMITTED가 그 예외입니다. 이 두 격리 수준은 읽기 작업 동안 데이터 행에 대한 공유 잠금을 획득하지 않습니다. 테이블 수준에서 SCH-S 잠금만 보유합니다.

트랜잭션 격리 수준은 Transact-SQL이나 데이터베이스 API를 통해 설정할 수 있습니다.

  • Transact-SQL
    Transact-SQL 스크립트는 SET TRANSACTION ISOLATION LEVEL 문을 사용합니다.

  • ADO
    ADO 응용 프로그램은 Connection 개체의 IsolationLevel 속성을 adXactReadUncommitted, adXactReadCommitted, adXactRepeatableRead 또는 adXactReadSerializable로 설정합니다.

  • ADO.NET
    System.Data.SqlClient 관리 네임스페이스를 사용하는 ADO.NET 응용 프로그램은 SqlConnection.BeginTransaction 메서드를 호출하고 IsolationLevel 옵션을 Unspecified, Chaos, ReadUncommitted, ReadCommitted, RepeatableRead, Serializable 및 Snapshot으로 설정할 수 있습니다.

  • OLE DB
    OLE DB를 사용하는 응용 프로그램은 트랜잭션을 시작할 때 isoLevel을 ISOLATIONLEVEL_READUNCOMMITTED, ISOLATIONLEVEL_READCOMMITTED, ISOLATIONLEVEL_REPEATABLEREAD, ISOLATIONLEVEL_SNAPSHOT 또는 ISOLATIONLEVEL_SERIALIZABLE로 설정하고 ITransactionLocal::StartTransaction을 호출합니다.

    OLE DB 응용 프로그램은 자동 커밋 모드로 트랜잭션 격리 수준을 지정할 때 DBPROPSET_SESSION 속성인 DBPROP_SESS_AUTOCOMMITISOLEVELS를 DBPROPVAL_TI_CHAOS, DBPROPVAL_TI_READUNCOMMITTED, DBPROPVAL_TI_BROWSE, DBPROPVAL_TI_CURSORSTABILITY, DBPROPVAL_TI_READCOMMITTED, DBPROPVAL_TI_REPEATABLEREAD, DBPROPVAL_TI_SERIALIZABLE, DBPROPVAL_TI_ISOLATED 또는 DBPROPVAL_TI_SNAPSHOT으로 설정할 수 있습니다.

  • ODBC
    ODBC 응용 프로그램은 Attribute를 SQL_ATTR_TXN_ISOLATION으로 설정하고 ValuePtr을 SQL_TXN_READ_UNCOMMITTED, SQL_TXN_READ_COMMITTED, SQL_TXN_REPEATABLE_READ 또는 SQL_TXN_SERIALIZABLE로 설정하고 SQLSetConnectAttr을 호출합니다.

    스냅숏 트랜잭션의 경우 응용 프로그램은 Attribute를 SQL_COPT_SS_TXN_ISOLATION으로, ValuePtr을 SQL_TXN_SS_SNAPSHOT으로 설정하고 SQLSetConnectAttr를 호출합니다. SQL_COPT_SS_TXN_ISOLATION이나 SQL_ATTR_TXN_ISOLATION을 사용하여 스냅숏 트랜잭션을 검색할 수 있습니다.