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

Откуда:
Сообщений: 22
Из MS access вызывается примерно такая процедура

CREATE PROCEDURE dbo.Preselection_G (@P2 as VarChar(255), @P1 as Integer) AS

SELECT [G_History].[FK G ID], Max([G History].[Status Date]) AS [MaxOfStatus Date] Into #Last_History
FROM [GHistory]
GROUP BY [G History].[FK G ID]

Для какого то объекта G выбираются последние записи истории

Затем еще куча информации с основной и связанных таблиц
SELECT G.[PK G ID], G.[Serial Number],
..... Into #M_G

FROM ..... INNER JOIN [G History]
ON ([#Last_History].[MaxOfStatus Date] = [G History].[Status Date])
AND ([#Last_History].[FK G ID] = [G History].[FK G ID]))
.....

Затем еще со связ связанных таблиц
Затем из временной по параметрам необходимую
ELECT DISTINCT G.[PK G ID],
[#M_G].[Status] AS [Статус]....

В результате в клиенте на экране отображен список объектов. Все хорошо.
Но все объекты заблокированы для других пользователей. Блокировка не нужна. Как от неё уйти.

Спсибо.
11 авг 15, 16:12    [18004086]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать блокировку набора записейв хранимой процедуре?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
alex1953k,

Про какие блокировки речь?
NOLOCK?
11 авг 15, 16:38    [18004222]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать блокировку набора записейв хранимой процедуре?  [new]
alex1953k
Member

Откуда:
Сообщений: 22
Возвращаемый набор блокируется SQL как Read only.
И из других приложений ни один объект нельзя изменить. Мне эта блокировка не нужна.
Но как от неё отбиться не понимаю.
11 авг 15, 16:55    [18004342]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать блокировку набора записейв хранимой процедуре?  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1456
alex1953k
Возвращаемый набор блокируется SQL как Read only.
И из других приложений ни один объект нельзя изменить. Мне эта блокировка не нужна.
Но как от неё отбиться не понимаю.


где именно вы увидели "заблокированный набор"?
11 авг 15, 17:09    [18004429]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать блокировку набора записейв хранимой процедуре?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
alex1953k
Возвращаемый набор блокируется SQL как Read only.
И из других приложений ни один объект нельзя изменить. Мне эта блокировка не нужна.
Но как от неё отбиться не понимаю.


Нет в sql такой блокировки readonly, и что вы хотите изменить в возвращаемом датасете состоящем из временных таблиц?
11 авг 15, 17:12    [18004449]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать блокировку набора записейв хранимой процедуре?  [new]
VladimirSQL
Member

Откуда: Киев
Сообщений: 37
alex1953k
Возвращаемый набор блокируется SQL как Read only.
Вы выполняются запрос на выборку
SELECT ... FROM
и данные вам возвращаются.

alex1953k
И из других приложений ни один объект нельзя изменить. Мне эта блокировка не нужна.
Но как от неё отбиться не понимаю.
И вот тут встречный вопрос, а как же вы планировали изменить эти данные без UPDATE?

ИМХО. Вопрос вот здесь:
alex1953k
В результате в клиенте на экране отображен список объектов. Все хорошо.
Но все объекты заблокированы для других пользователей.
Так как нам не известны что за клиент, зачем он и почему это вообще проблема.
11 авг 15, 17:17    [18004494]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать блокировку набора записейв хранимой процедуре?  [new]
alex1953k
Member

Откуда:
Сообщений: 22
Этот набор служит только для отображения и просмотра перечня объектов. Блокируется таблица истории, та из которой производится первая выборка. Если в это время другой пользователь желает изменить историю любого объекта из этого перечня, SQL в этом отказывает. Изменения вносятся совсем другим приложением.

Блокировку я вижу в SQL:
Lock type - TAB
Mode - S
Owner - xact
Status Grant
11 авг 15, 17:30    [18004595]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать блокировку набора записейв хранимой процедуре?  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1456
alex1953k
Этот набор служит только для отображения и просмотра перечня объектов. Блокируется таблица истории, та из которой производится первая выборка. Если в это время другой пользователь желает изменить историю любого объекта из этого перечня, SQL в этом отказывает. Изменения вносятся совсем другим приложением.

Блокировку я вижу в SQL:
Lock type - TAB
Mode - S
Owner - xact
Status Grant


это значит что транзакция считывающая ваши данные до сих пор не закрыта, или считывание данных продолжается.

как вариант где то в ваших запросах присуствует хинт holdlock, который держит полученные блокировки до закрытия транзакции.
вам надо понимать в случае ващего "считывающего клиента" в какой момент он закрывает транзакцию
11 авг 15, 17:38    [18004635]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать блокировку набора записейв хранимой процедуре?  [new]
alex1953k
Member

Откуда:
Сообщений: 22
Ок!

Спасибо.

Попробую с этим переспать...

Больше мозг думать не хочет
11 авг 15, 17:48    [18004699]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать блокировку набора записейв хранимой процедуре?  [new]
VladimirSQL
Member

Откуда: Киев
Сообщений: 37
alex1953k
Ок!

Спасибо.

Попробую с этим переспать...

Больше мозг думать не хочет
Ну тогда вот вам и чтиво на сон грядущий: SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
11 авг 15, 17:51    [18004709]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать блокировку набора записейв хранимой процедуре?  [new]
Konst_One
Member

Откуда:
Сообщений: 11540
так у вас временная таблица, она работает только в вашей сессии. другие сессии её не видят.
делайте честную таблицу и работайте с ней (чтобы набор был обновляемый в акцесе, вам надо в таблице сделать PK)
11 авг 15, 17:55    [18004728]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать блокировку набора записейв хранимой процедуре?  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
alex1953k
Если в это время другой пользователь желает изменить историю любого объекта из этого перечня, SQL в этом отказывает...


Тогда смотрите мой первый пост, там ответ.
11 авг 15, 19:28    [18005185]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать блокировку набора записейв хранимой процедуре?  [new]
aleks2
Guest
alex1953k
Из MS access вызывается примерно такая процедура

CREATE PROCEDURE dbo.Preselection_G (@P2 as VarChar(255), @P1 as Integer) AS

SELECT [G_History].[FK G ID], Max([G History].[Status Date]) AS [MaxOfStatus Date] Into #Last_History
FROM [GHistory]
GROUP BY [G History].[FK G ID]

Для какого то объекта G выбираются последние записи истории

Затем еще куча информации с основной и связанных таблиц
SELECT G.[PK G ID], G.[Serial Number],
..... Into #M_G

FROM ..... INNER JOIN [G History]
ON ([#Last_History].[MaxOfStatus Date] = [G History].[Status Date])
AND ([#Last_History].[FK G ID] = [G History].[FK G ID]))
.....

Затем еще со связ связанных таблиц
Затем из временной по параметрам необходимую
ELECT DISTINCT G.[PK G ID],
[#M_G].[Status] AS [Статус]....

В результате в клиенте на экране отображен список объектов. Все хорошо.
Но все объекты заблокированы для других пользователей. Блокировка не нужна. Как от неё уйти.

Спсибо.


CREATE PROCEDURE dbo.Preselection_G (@P2 as VarChar(255), @P1 as Integer)  AS 

атем еще со связ связанных таблиц 
Затем из временной по параметрам необходимую
SELECT DISTINCT G.[PK G ID],
[#M_G].[Status] AS [Статус]....

while @@trancount > 0 commit;


И ваще, отключите неявную транзакцию.
12 авг 15, 05:50    [18006284]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать блокировку набора записейв хранимой процедуре?  [new]
Jaffar
Member

Откуда:
Сообщений: 633
aleks2,

тогда уж лучше транзакции завершать в начале процедуры до select`а
12 авг 15, 11:35    [18007037]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать блокировку набора записейв хранимой процедуре?  [new]
aleks2
Guest
Jaffar
aleks2,

тогда уж лучше транзакции завершать в начале процедуры до select`а

Это зависит от задачи.
Мож ему какая "интегрити" нужна в процессе выборки.
12 авг 15, 11:41    [18007070]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать блокировку набора записейв хранимой процедуре?  [new]
alex1953k
Member

Откуда:
Сообщений: 22
Всем большое спасибо.
Пробую.
12 авг 15, 12:05    [18007227]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать блокировку набора записейв хранимой процедуре?  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Проблема - боянище. :)

Как вариант - дочитайте набор данных до конца. Блокировка снимется.
12 авг 15, 15:03    [18008495]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать блокировку набора записейв хранимой процедуре?  [new]
aleks2
Guest
LSV
Проблема - боянище. :)

Как вариант - дочитайте набор данных до конца. Блокировка снимется.


Вряд ли тредстартера беспокоят блокировки на временной таблице.
12 авг 15, 16:51    [18009239]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить