Поделиться через


Уровень изоляции транзакций

Microsoft По умолчанию SQL Server 2005 Compact Edition (SQL Server Compact Edition) выполняется на уровне изоляции чтения зафиксированных данных. Однако может возникнуть необходимость выполнения приложения на другом уровне изоляции. Для использования в приложениях других уровней изоляции можно настроить блокировку для всего сеанса, установив уровень изоляции сеанса инструкцией SET TRANSACTION ISOLATION LEVEL.

Важно!
Хотя по умолчанию в SQL Server Compact Edition установлен уровень изоляции чтения зафиксированных данных, его использование не позволяет принимать блокировки S при чтении данных. Подобный характер работы отличен от Microsoft SQL Server. Когда в SQL Server используется чтение зафиксированных данных, при каждом чтении строки запрашивается блокировка, причем, если с этой строкой связана конфликтующая блокировка, операция будет ждать ее разрешения. SQL Server Compact Edition не требует блокировки S благодаря автоматической поддержке версий страниц данных, обеспечивающей чтение зафиксированных данных без применения блокировки. Эта возможность полезна, поскольку в SQL Server Compact Edition операции SELECT не требуют блокировок данных и практически всегда успешны. В отличие от SQL Server, операциям SELECT здесь не приходится ожидать, если у данных имеется блокировка X. Тем не менее операциям SELECT требуется блокировка Sch-S. Операцию не удастся выполнить, только если в данный момент таблица изменяется, поскольку при этом действует конфликтующая блокировка Sch-X.

После указания уровня изоляции блокировка применяется для всех инструкций SELECT в сеансе SQL Server Compact Edition на этом уровне изоляции и поддерживается до завершения сеанса или изменения уровня изоляции. Например, чтобы установить упорядочиваемый уровень изоляции транзакции и избежать вставки фантомных строк параллельными транзакциями в таблицу "Employee", используйте следующую инструкцию SQL:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

BEGIN TRANSACTION;

SELECT EmployeeID FROM Employee;

Кроме того, уровень изоляции транзакции можно установить программным путем. В следующем примере показано, как установить уровень изоляции транзакции с помощью ADO .NET:

SqlTransaction myTrans;

myTrans = myConnection.BeginTransaction(IsolationLevel.RepeatableRead);

См. также

Основные понятия

Основные принципы блокировки
Отображение сведений о блокировке
Подсказки блокировки (SQL Server Compact Edition)
Время ожидания блокировки

Справка и поддержка

Получение помощи по SQL Server Compact Edition