2015-07-01 2 views
3

Я пытаюсь выполнить инструкцию SQL ниже:Run Alter Database с Set READ_COMMITTED_SNAPSHOT ВКЛ

ALTER DATABASE DBNAME 
SET READ_COMMITTED_SNAPSHOT ON 

Однако, когда я побежал он не завершает выполнение, я должен прекратить после 1hr.

Есть ли какие-либо предложения о том, как запустить это, не отсоединяя всех других пользователей от базы данных? Thanks

+0

ИСПОЛЬЗОВАНИЕ master ALTER DATABASE DBNAME SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE –

ответ

1

Завершение этой команды требует, чтобы на мгновение была единственной транзакцией, открытой против базы данных. Мне кажется, что для этого почти требуется, чтобы вы поместили БД в однопользовательский режим. Но, может быть, если вы просто оставите запрос (пытающийся) запустить за одну ночь, в какой-то момент вы получите этот волшебный момент.

Там немного больше на эту тему здесь: http://www.brentozar.com/archive/2013/01/implementing-snapshot-or-read-committed-snapshot-isolation-in-sql-server-a-guide/

Edit: книги онлайн предлагает немного более подробно:

При установке ALLOW_SNAPSHOT_ISOLATION в новое состояние (из ON в OFF, или от OFF до ON) ALTER DATABASE не возвращает управление вызывающему абоненту до тех пор, пока не будут выполнены все существующие транзакции в базе данных. Если база данных уже находится в состоянии, указанном в инструкции ALTER DATABASE, управление немедленно возвращается вызывающему. Если оператор ALTER DATABASE не возвращается быстро, используйте sys.dm_tran_active_snapshot_database_transactions, чтобы определить, существуют ли длительные транзакции. Если оператор ALTER DATABASE отменен, база данных остается в состоянии, в котором она была, когда была запущена ALTER DATABASE. В представлении каталога sys.databases указывается состояние транзакций изоляции моментальных снимков в базе данных. Если snapshot_isolation_state_desc = IN_TRANSITION_TO_ON, ALTER DATABASE ALLOW_SNAPSHOT_ISOLATION OFF остановит шесть секунд и повторит операцию.

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