Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проверить не читают ли из таблицы?  [new]
Santa89
Member

Откуда:
Сообщений: 1480
Пишу веб приложение, которое должно перезаливать данные в одной табличке.
Хочу, чтобы в этом приложении перед запуском этой перезаливки проверялись текущие коннекты к этой таблице, и выводился их статус.
Например в то время когда пользователь с помощью этого веб-приложения захочет перезалить данные, оно выведет предупреждение о том, что рабочая таблица в данный момент используется, к ней выполняется select ну итд..
Как проверять, какие запросы сейчас идут от пользователей к конкретной таблице ?

Или может есть какое-то более гибкое решение? Например используя временную таблицу..
20 фев 14, 03:47    [15595032]     Ответить | Цитировать Сообщить модератору
 Re: Проверить не читают ли из таблицы?  [new]
SERG1257
Member

Откуда:
Сообщений: 2748
Залочить. Если не удалось - тады ой.
20 фев 14, 03:57    [15595054]     Ответить | Цитировать Сообщить модератору
 Re: Проверить не читают ли из таблицы?  [new]
Santa89
Member

Откуда:
Сообщений: 1480
SERG1257, это ответ на вопрос - как поступить по-другому?
20 фев 14, 03:59    [15595056]     Ответить | Цитировать Сообщить модератору
 Re: Проверить не читают ли из таблицы?  [new]
Santa89
Member

Откуда:
Сообщений: 1480
SERG1257, то есть если в данный момент таблица используется select'ом например, то залочить её не получится?
если так, то вполне нормальный вариант
20 фев 14, 04:16    [15595071]     Ответить | Цитировать Сообщить модератору
 Re: Проверить не читают ли из таблицы?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
Santa89
Как проверять, какие запросы сейчас идут от пользователей к конкретной таблице ?
Нет понятия - "идут запросы к таблице", это слишком абстрактно.
Например, делается запрос from T1 join T2. Для каждой записи T1 ищется, нет ли записей T2. Вопрос - когда есть запрос к таблице T2? Между проверкой для каждой отдельной записи в T1 есть запрос к T2 или нет?

Поэтому лучше сказать так: "наложена блокировка на таблицу или её часть".

Это, наверное, можно попытаться проверить из sys.dm_tran_locks

Естественно, после проверки, если блокировок на таблицу нет, заливка может всё равно наткнуться на блокировку, потому что сейчас блокировки нет, а через микросекунду она появится.
20 фев 14, 08:50    [15595334]     Ответить | Цитировать Сообщить модератору
 Re: Проверить не читают ли из таблицы?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
begin tran

set lock_timeout 0
truncate table dbo.[Таблица, в которой пользователь захочет перезалить данные]

-- Лучше через try/catch
if @@error = 1222 begin
  raiserror ('Таблица занята, кыш!', 16, 1)
  goto the_end:
end

set lock_timeout -1
-- Далее перезаливаем данные

the_end:

if @@trancount > 0
  rollback tran


Сообщение было отредактировано: 20 фев 14, 13:58
20 фев 14, 12:21    [15596952]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить