트랜잭션 격리 수준 조정
격리성 속성은 트랜잭션의 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을 사용하여 스냅숏 트랜잭션을 검색할 수 있습니다.