2010-08-17 5 views
0

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

ответ

3

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

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

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

1

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

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

+0

Настройка БД в режиме чтения не позволит мне выполнить DELETE и INSERT , Означает ли это, что мне нужно создать реплику только для чтения для всех «SELECT»? – Sarit

0

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

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 

и т.д.

Смежные вопросы