2013-04-04 2 views
1

Я запускаю script, предоставленный одним из сотрудников Microsoft, чтобы узнать, какие индексы необходимо перестроить/реорганизовать в зависимости от средней фрагментации. Я вернулся разумный список, но при попытке восстановить некоторые из них на определенной базе данных я продолжал получать ошибки:Одиночный режим «отсутствует поведение» на SQL Server

Lock request time out period exceeded

Первая идея, которую я получил, чтобы установить базу данных в однопользовательском режиме, перестроить индексы а затем вернуть его к жизни. Ну, это не помогло, потому что база данных заполняется службой Windows, которая по иронии судьбы использует того же пользователя, с которым я подключен, и доступный для меня только с достаточными разрешениями для этого. Я работаю над корпоративной средой, поэтому луна немного ближе, чем получение других учетных данных пользователя. Я также не могу остановить службу во время выполнения моих задач, потому что она используется для многих других вещей.

Мой вопрос прост: как заставить однопользовательский режим принудительно использовать один источник соединения? Другими словами, как скрыть базу данных или, в конечном счете, SQL-сервер от службы? Он будет корректно обрабатывать это отсутствие как сетевую проблему, поэтому мне не нужно беспокоиться об этой части.

ответ

1

я нашел хорошее решение для использования, которые могут помочь другим. Я начинаю получать список сделок с замками на текущей таблицы с помощью:

USE [Your DB Name] 

SELECT REQUEST_MODE, REQUEST_TYPE, REQUEST_SESSION_ID 
FROM sys.dm_tran_locks 
WHERE RESOURCE_TYPE = 'OBJECT' 
AND RESOURCE_ASSOCIATED_ENTITY_ID =(SELECT OBJECT_ID('YourTableName')) 

REQUEST_SESSION_ID это идентификатор сеанса, который имеет замок, установленный на столе. Затем я запустил EXEC sp_who2, чтобы удостовериться, что SPID является единственным для ожидаемой службы. Все, что мне нужно было сделать в конце, было KILL <SPID> и перестроить индекс. Возможно, вам понадобится сделать это несколько раз, если вы создаете более одного индекса, поскольку блокировка может быть установлена ​​снова.

0

Доступна опция ONLINE = ON/OFF при перестройке индексов в SQL Server 2005 и выше, которая контролирует доступ пользователей к базовой таблице, которая может решить вашу проблему.

http://msdn.microsoft.com/en-us/library/ms188388(v=sql.110).aspx

+0

Та же ссылка, которую вы предоставляете говорит, что по умолчанию OFF. –

+1

Обновление индекса онлайн будет доступно только в том случае, если используется корпоративная версия. – Bryan

0

Ваша проблема в том, что интерфейс будет ждать только определенное количество времени, прежде чем принимать решение об ошибке. Я сталкиваюсь с этим все время.

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

+0

Вы видели «Однопользовательский режим» в названии? –

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