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


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

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

Важно!

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

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

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

BEGIN TRANSACTION;

SELECT EmployeeID FROM Employee;

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

SqlTransaction myTrans;

myTrans = myConnection.BeginTransaction(IsolationLevel.RepeatableRead);

См. также

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

Основные принципы блокировки

Отображение сведений о блокировке

Подсказки блокировок

Время ожидания блокировки