NOLOCK на стороне сервера в SQL Server - PullRequest
0 голосов
/ 17 августа 2010

Я знаю, что в БД Oracle я могу настроить флаг, чтобы все запросы на выборку, выполняемые на конкретной БД, могли выполняться так, как если бы была добавлена ​​подсказка NOLOCK. Есть ли что-то подобное в SQL Server?

Ответы [ 3 ]

3 голосов
/ 17 августа 2010

Вы можете установить базу данных в режим READ_ONLY , который, безусловно, меняет некоторые правила транзакций, но я не думаю, что есть что-то ближе к глобальному NOLOCK.

Редактировать

Если вы хотите иметь возможность выполнять УДАЛЕНИЯ, ВСТАВКИ и ОБНОВЛЕНИЯ, но не хотите, чтобы читатели блокировали или указывали подсказки или уровни изоляции, вы также можете включить * 1009.* READ_COMMITTED_SNAPSHOT , но семантика здесь снова не совсем совпадает с подсказкой NOLOCK.

1 голос
/ 17 августа 2010

Не на уровне базы данных. Вы можете сделать это только с подсказками или set transaction isolation level. Вы можете установить базу данных в режим только для чтения, который может иметь такой эффект по умолчанию, но который (как следует из названия) исключает записи в базу данных.

Это может быть полезно для базы данных, которая периодически обновляется. Вы устанавливаете базу данных только для чтения и настраиваете ее на запись для обновлений, а затем снова на доступ только для чтения.

0 голосов
/ 17 августа 2010

Не для всей базы данных, но для каждого выполняемого вами запроса:

SELECT a, b
FROM t1
WITH (NOLOCK)
WHERE t1.c = @value

или

SELECT a, b
JOIN t1
ON t1.id = t2.id
WITH (NOLOCK)
FROM t2
WHERE t2.c = @value

и т.д.

...