Уровень изоляции транзакций
По умолчанию Microsoft SQL Server Compact 3.5 (SQL Server Compact 3.5) выполняется на уровне изоляции чтения зафиксированных данных. Однако может возникнуть необходимость выполнения приложения на другом уровне изоляции. Для использования в приложениях других уровней изоляции можно настроить блокировку для всего сеанса, установив уровень изоляции сеанса инструкцией SET TRANSACTION ISOLATION LEVEL.
Важно!
Хотя по умолчанию в SQL Server Compact 3.5 установлен уровень изоляции чтения зафиксированных данных, его использование не позволяет принимать блокировки S при чтении данных. Подобный характер работы отличен от Microsoft SQL Server. Когда в SQL Server используется чтение зафиксированных данных, при каждом чтении строки запрашивается блокировка, причем, если с этой строкой связана конфликтующая блокировка, операция будет ждать ее разрешения. SQL Server Compact 3.5 не требует блокировки S благодаря автоматической поддержке версий страниц данных, обеспечивающей чтение зафиксированных данных без применения блокировки. Эта возможность полезна, поскольку в SQL Server Compact 3.5 операции SELECT не требуют блокировок данных и практически всегда успешны. В отличие от SQL Server, операциям SELECT здесь не приходится ожидать, если у данных имеется блокировка X. Тем не менее операциям SELECT требуется блокировка Sch-S. Операцию не удастся выполнить, только если в данный момент таблица изменяется, поскольку при этом действует конфликтующая блокировка Sch-X.
После указания уровня изоляции блокировка применяется для всех инструкций SELECT в сеансе SQL Server Compact 3.5 на этом уровне изоляции и поддерживается до завершения сеанса или изменения уровня изоляции. Например, чтобы установить упорядочиваемый уровень изоляции транзакции и избежать вставки фантомных строк параллельными транзакциями в таблицу «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 3.5 с пакетом обновления 1)