Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие.doc
Скачиваний:
57
Добавлен:
14.05.2015
Размер:
1.51 Mб
Скачать

4.Отображение информации о блокировках. Явное задание блокировки

Просмотреть информацию о блокировках можно либо с помощью SQL Enterprise Manager, либо выполнив системную хранимую процедуру SP_LOCK.

Для просмотра информации о блокировках с помощью SQL Server Enterprise Manager:

1. Запустите SQL Server Enterprise Manager.

2. Выберите сервер, с которым хотите работать.

3. В меню Tools окна Microsoft Manager Console выберите пункт Current Activity и в открывшемся окне Current Activity перейдите на вкладку Object Locks.

4. Для получения более полной информации о конкретных инструкциях, вызвавших блокировку, можно на вкладке Object Locks выбрать процесс двойным щелчком или нажать кнопку More Info.

При использовании Transact-SQL системная процедура SP_LOCK возвращает список процессов и типы блокировок, которые эти процессы сохраняют в системе. Чтобы получить информацию о блокировке, которую сохраняет конкретный процесс, добавьте к команде идентификатор этого процесса:

SP_LOCK идентификатор_процесса.

SP_LOCKINFO. Результат работы этой процедуры позволяет получить данные, аналогичные тем, которые можно посмотреть на вкладке Detail Activity окна User Activity.

Удаление блокирующих процессов:

- перед удалением процесса, сохраняющего в базе данных блокировки, с помощью системных процедур SP_WHO и SPLOCK. по идентификатору процесса, проверьте, что процесс действительно принадлежит тому пользователю, который реализует блокировки;

- при просмотре результатов работы процедуры SP_WHO по информации в столбце spid можно идентифицировать заблокированного пользователя. Вернитесь по дереву блокировок обратно к родительскому идентификатору процесса и удалите этот пользовательский процесс. Для удаления пользовательского процесса можно использовать SQL Server Enterprise Manager или выполнить команду kill;

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

DBCC OPENTRAN [(база_данных | идентификатор_базы_данных)]

[WITH TABLERESULTS]

Если для удаления процесса используется SQL Server Enterprise Manager, в первую очередь необходимо найти процесс, который вызывает блокировки, как описано выше. После обнаружения процесса, который нужно удалить, в диалоговом окне Current Activity на панели инструментов нажмите кнопку Kill Process.

Использование команды KILL:

- после идентификации пользовательского процесса, который вы хотите удалить, выполните следующую инструкцию SQL:

KILL идентификатор_процесса [WITH {ABORT | COMMIT}]

- необязательные параметры используются только с распределенными транзакциями:

•WITH ABORT - процесс удаляется без завершения транзакции;

•WITH COMMIT-перед удалением транзакция завершается.

Чтобы явно задать в приложении блокировку определенного набора данных, в SQL Server имеются расширения к базовой инструкции SELECT. SQL Server предоставляет в инструкции SELECT режимы оптимизатора или ключевые слова, которые в соответствии с требуемыми результатами задают метод об­работки данных. В инструкции SELECT можно указать следующие параметры оптимизатора: NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, PAGLOCK и TABLOCKX. В таблице 15 описаны два наиболее трудных для понимания параметра.

Таблица 15