Форум программистов, компьютерный форум, киберфорум
Наши страницы

Microsoft SQL Server

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
Antykus
0 / 0 / 0
Регистрация: 10.05.2014
Сообщений: 230
#1

Ошибка: Экземпляру компонента SQL Server Database Engine не удается получить ресурс LOCK в данный момент - SQL Server

21.07.2014, 12:07. Просмотров 2905. Ответов 30
Метки нет (Все метки)

Есть хранимая процедура со следующим кодом:

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
USE [import_from_KLADR]
GO
/****** Object:  StoredProcedure [dbo].[import_level6_houses]    Script Date: 07/21/2014 12:06:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[import_level6_houses]
 
AS
 
BEGIN
 
-- тело
 
-- импорт ДОМОВ
Merge addrtest as dst -- в эту табличку помещаем результат
Using
(
-- выбираем данные из таблицы 
Select top (1) with ties
id,
aoguid,
houseguid,
housenum,
strucnum,
buildnum,
POSTALCODE,
UPDATEDATE
from Houses
where exists(select 1 from addrtest where addrtest.aoguid = Houses.aoguid) 
order by
 row_number() over (partition by houseguid order by UPDATEDATE desc)
)
as src 
(
id,
aoguid,
houseguid,
housenum,
strucnum,
buildnum,
POSTALCODE,
UPDATEDATE
)
 
on (dst.aoguid=src.houseguid) -- критерий совпадений
when matched -- совпадение
 then
     update set 
     name = ISNULL(src.housenum,'')+ISNULL('с'+src.STRUCNUM,'')+ISNULL('к'+src.BUILDNUM,''),
     post_code=src.postalcode,
     id_parent=(select ID from addrtest where dst.aoguid=src.aoguid) ,
     updatedate=src.updatedate    
  WHEN NOT MATCHED THEN 
  -- нет такой строки, вставляем
        INSERT 
        (
        name,
        short_name,
        atype,
        aoguid,
        id_parent,
        updatedate,
        post_code
        )
        VALUES 
        (
        ISNULL(src.housenum,'')+ISNULL('с'+src.STRUCNUM,'')+ISNULL('к'+src.BUILDNUM,''),
        '',
        9,
        src.houseguid,
        (select ID from addrtest where addrtest.aoguid=src.aoguid),
        src.updatedate,
        src.POSTALCODE
        );
        
        
end
она грузит дома в таблицу.
При первом прогоне процедура срабатывает нормально.
При повторном, то есть когда дома в таблице уже есть, выдаётся ошибка

Сообщение 1204, уровень 19, состояние 4, процедура import_level6_houses, строка 10
Экземпляру компонента SQL Server Database Engine не удается получить ресурс LOCK в данный момент времени. Запустите инструкцию повторно, когда число активных пользователей уменьшится. Попросите администратора баз данных проверить конфигурацию блокировки и памяти для данного экземпляра либо выполнить проверку давно выполняющихся транзакций.
Сообщение 1204, уровень 19, состояние 6, процедура import_level6_houses, строка 10
Экземпляру компонента SQL Server Database Engine не удается получить ресурс LOCK в данный момент времени. Запустите инструкцию повторно, когда число активных пользователей уменьшится. Попросите администратора баз данных проверить конфигурацию блокировки и памяти для данного экземпляра либо выполнить проверку давно выполняющихся транзакций.
Хэлп
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2014, 12:07
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка: Экземпляру компонента SQL Server Database Engine не удается получить ресурс LOCK в данный момент (SQL Server):

MS SQL Server 2005. Хочу подключиться к Database Engine - нет доступных серверов - SQL Server
Подскажите пожалуйста, недавно установлена MS SQL Server 2005 - НЕ мной. Хочу подключиться, в Database Engine - пусто. OSQL локальный...

Не могу установить MS SQL 2014, ошибка установки Database Engine - SQL Server
Привет всем! Уже несколько дней бьюсь со следующей проблемой: есть Windows Server 2012 R2 Standart x64 - на него стараюсь поставить MS...

Установка MS SQL Server Desktop Engine на Windows Server 2008 - SQL Server
MS sql server desktop engine, при установке на windows server 2008 пишет "a strong sa password is required for security reasons. please...

MS SQL Server 2000 Desktop Engine - SQL Server
Подскажите пожайлуста что это за зверь и с чем его едят, в смысле что с ним после инсталяции делать, как им управлять.

Database Mail на sql server 2012 - SQL Server
Добрый день! Настроили Database Mail на одном из серверов, но сообщения не уходят. В логах ошибка "В экземпляре объекта не задана ссылка на...

Ошибка СУБД: Microsoft OLE Provider for SQL Server: The transaction log for database “DataBase” is full. - 1С
Иногда при работе 1С возникает ошибка следующего характера: Ошибка СУБД: Microsoft OLE Provider for SQL Server: The transaction...

30
invm
1801 / 1211 / 343
Регистрация: 02.06.2013
Сообщений: 3,043
22.07.2014, 16:46 #16
Antykus, ОК, зайдем с другой стороны. Что вернет скрипт:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
begin tran;
 
select resource_type, request_mode, count(*) from sys.dm_tran_locks where request_session_id = @@spid group by resource_type, request_mode;
 
Merge top (10000) addrtest as dst -- в эту табличку помещаем результат
Using
(
-- выбираем данные из таблицы 
Select top (1) with ties
id,
aoguid,
houseguid,
housenum,
strucnum,
buildnum,
POSTALCODE,
UPDATEDATE
from Houses
where exists(select 1 from addrtest where addrtest.aoguid = Houses.aoguid) 
order by
 row_number() over (partition by houseguid order by UPDATEDATE desc)
)
as src 
(
id,
aoguid,
houseguid,
housenum,
strucnum,
buildnum,
POSTALCODE,
UPDATEDATE
)
 
on (dst.aoguid=src.houseguid) -- критерий совпадений
when matched -- совпадение
 then
     update set 
     name = ISNULL(src.housenum,'')+ISNULL('с'+src.STRUCNUM,'')+ISNULL('к'+src.BUILDNUM,''),
     post_code=src.postalcode,
     id_parent=(select ID from addrtest where dst.aoguid=src.aoguid) ,
     updatedate=src.updatedate    
  WHEN NOT MATCHED THEN 
  -- нет такой строки, вставляем
        INSERT 
        (
        name,
        short_name,
        atype,
        aoguid,
        id_parent,
        updatedate,
        post_code
        )
        VALUES 
        (
        ISNULL(src.housenum,'')+ISNULL('с'+src.STRUCNUM,'')+ISNULL('к'+src.BUILDNUM,''),
        '',
        9,
        src.houseguid,
        (select ID from addrtest where addrtest.aoguid=src.aoguid),
        src.updatedate,
        src.POSTALCODE
        );
 
select resource_type, request_mode, count(*) from sys.dm_tran_locks where request_session_id = @@spid group by resource_type, request_mode;
 
rollback;
0
Antykus
0 / 0 / 0
Регистрация: 10.05.2014
Сообщений: 230
23.07.2014, 11:47  [ТС] #17
invm,
0
Миниатюры
Ошибка: Экземпляру компонента SQL Server Database Engine не удается получить ресурс LOCK в данный момент  
invm
1801 / 1211 / 343
Регистрация: 02.06.2013
Сообщений: 3,043
23.07.2014, 11:56 #18
А сейчас ошибка повторяется?
0
Antykus
0 / 0 / 0
Регистрация: 10.05.2014
Сообщений: 230
23.07.2014, 12:16  [ТС] #19
invm, да, вот такая
Сообщение 1204, уровень 19, состояние 4, процедура import_level6_houses, строка 10
Экземпляру компонента SQL Server Database Engine не удается получить ресурс LOCK в данный момент времени. Запустите инструкцию повторно, когда число активных пользователей уменьшится. Попросите администратора баз данных проверить конфигурацию блокировки и памяти для данного экземпляра либо выполнить проверку давно выполняющихся транзакций.
0
invm
1801 / 1211 / 343
Регистрация: 02.06.2013
Сообщений: 3,043
23.07.2014, 12:32 #20
Процедура выполняется как часть какой-то большой транзакции?
0
Antykus
0 / 0 / 0
Регистрация: 10.05.2014
Сообщений: 230
23.07.2014, 12:35  [ТС] #21
invm,
нет, просто запускаю процедуру.
особенность в том, что ошибка выдаётся именно тогда, когда процедура запускается не на чистую, а когда дома уже загружены в бд, и проверка, есть ли такой дом в базе, уже по идее должна выдать положительный результат и произвести update.
0
invm
1801 / 1211 / 343
Регистрация: 02.06.2013
Сообщений: 3,043
23.07.2014, 13:08 #22
Что возвращает
T-SQL
1
2
3
4
5
6
exec sp_configure 'Show Advanced Options', 1;
reconfigure with override;
go
 
exec sp_configure 'Locks';
go
0
Antykus
0 / 0 / 0
Регистрация: 10.05.2014
Сообщений: 230
23.07.2014, 13:58  [ТС] #23
invm,
0
Миниатюры
Ошибка: Экземпляру компонента SQL Server Database Engine не удается получить ресурс LOCK в данный момент  
invm
1801 / 1211 / 343
Регистрация: 02.06.2013
Сообщений: 3,043
23.07.2014, 14:37 #24
На текущий момент, я не вижу причин возникновения этой ошибки. Нужен более детальный анализ.
Можете пока попробовать изменить процедуру вот так:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
ALTER PROCEDURE [dbo].[import_level6_houses]
with recompile 
AS
 
BEGIN
 
-- тело
 
-- импорт ДОМОВ
Merge addrtest as dst -- в эту табличку помещаем результат
Using
(
-- выбираем данные из таблицы 
Select top (1) with ties
id,
aoguid,
houseguid,
housenum,
strucnum,
buildnum,
POSTALCODE,
UPDATEDATE
from Houses
where exists(select 1 from addrtest where addrtest.aoguid = Houses.aoguid) 
order by
 row_number() over (partition by houseguid order by UPDATEDATE desc)
)
as src 
(
id,
aoguid,
houseguid,
housenum,
strucnum,
buildnum,
POSTALCODE,
UPDATEDATE
)
 
on (dst.aoguid=src.houseguid) -- критерий совпадений
when matched -- совпадение
 then
     update set 
     name = ISNULL(src.housenum,'')+ISNULL('с'+src.STRUCNUM,'')+ISNULL('к'+src.BUILDNUM,''),
     post_code=src.postalcode,
     id_parent=(select ID from addrtest where dst.aoguid=src.aoguid) ,
     updatedate=src.updatedate    
  WHEN NOT MATCHED THEN 
  -- нет такой строки, вставляем
        INSERT 
        (
        name,
        short_name,
        atype,
        aoguid,
        id_parent,
        updatedate,
        post_code
        )
        VALUES 
        (
        ISNULL(src.housenum,'')+ISNULL('с'+src.STRUCNUM,'')+ISNULL('к'+src.BUILDNUM,''),
        '',
        9,
        src.houseguid,
        (select ID from addrtest where addrtest.aoguid=src.aoguid),
        src.updatedate,
        src.POSTALCODE
        );
        
        
end
0
Antykus
0 / 0 / 0
Регистрация: 10.05.2014
Сообщений: 230
23.07.2014, 16:16  [ТС] #25
invm, а в чём отличие? не нашёл
0
invm
1801 / 1211 / 343
Регистрация: 02.06.2013
Сообщений: 3,043
23.07.2014, 16:40 #26
Antykus, отличие в
T-SQL
1
with recompile
0
Antykus
0 / 0 / 0
Регистрация: 10.05.2014
Сообщений: 230
23.07.2014, 17:17  [ТС] #27
invm, не помог и recompile
0
invm
1801 / 1211 / 343
Регистрация: 02.06.2013
Сообщений: 3,043
23.07.2014, 17:34 #28
В общем, вылечить по фотографии не удалось.
Попробуйте, в качестве костыля:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
ALTER PROCEDURE [dbo].[import_level6_houses]
AS
 
BEGIN
 
-- тело
 
-- импорт ДОМОВ
Merge addrtest with (tablockx) as dst -- в эту табличку помещаем результат
Using
(
-- выбираем данные из таблицы 
Select top (1) with ties
id,
aoguid,
houseguid,
housenum,
strucnum,
buildnum,
POSTALCODE,
UPDATEDATE
from Houses with (tablock)
where exists(select 1 from addrtest where addrtest.aoguid = Houses.aoguid) 
order by
 row_number() over (partition by houseguid order by UPDATEDATE desc)
)
as src 
(
id,
aoguid,
houseguid,
housenum,
strucnum,
buildnum,
POSTALCODE,
UPDATEDATE
)
 
on (dst.aoguid=src.houseguid) -- критерий совпадений
when matched -- совпадение
 then
     update set 
     name = ISNULL(src.housenum,'')+ISNULL('с'+src.STRUCNUM,'')+ISNULL('к'+src.BUILDNUM,''),
     post_code=src.postalcode,
     id_parent=(select ID from addrtest where dst.aoguid=src.aoguid) ,
     updatedate=src.updatedate    
  WHEN NOT MATCHED THEN 
  -- нет такой строки, вставляем
        INSERT 
        (
        name,
        short_name,
        atype,
        aoguid,
        id_parent,
        updatedate,
        post_code
        )
        VALUES 
        (
        ISNULL(src.housenum,'')+ISNULL('с'+src.STRUCNUM,'')+ISNULL('к'+src.BUILDNUM,''),
        '',
        9,
        src.houseguid,
        (select ID from addrtest where addrtest.aoguid=src.aoguid),
        src.updatedate,
        src.POSTALCODE
        );
        
        
end
0
Antykus
0 / 0 / 0
Регистрация: 10.05.2014
Сообщений: 230
24.07.2014, 12:26  [ТС] #29
invm, так отработало, при этом пишет, что обработана одна строка. что для меня непонятно, учитывая то, что процедура пытается загрузить все те данные, что уже загружены, и должно быть обработано ноль строк. то есть ни одна строка не добавлена, ни одна не изменена. Не подскажете ли как узнать houseguid обработанной строчки, и тип обработки, изменение или добавление строки?

Добавлено через 15 минут
invm, а нет, извините, я неправ. при повторном запуске процедуры все строки должны быть изменены. а пишет почему-то, что обработана 1 строка
0
invm
1801 / 1211 / 343
Регистрация: 02.06.2013
Сообщений: 3,043
24.07.2014, 12:55 #30
Цитата Сообщение от Antykus Посмотреть сообщение
Не подскажете ли как узнать houseguid обработанной строчки, и тип обработки, изменение или добавление строки?
Добавьте перед заверщающей ";" инструкции merge
T-SQL
1
output $action, inserted.*, deleted.*
0
24.07.2014, 12:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2014, 12:55
Привет! Вот еще темы с ответами:

Помогите поднять клиента: Unable to connect to database server: unable to start database engine - C# ASP.NET
Есть сервре Sybase SQL Anywhere 5.0 к нему настроен драйвер ODBC с помощью которого поднимается db клиент? который подключается к базе. ...

Ошибка: Microsoft JET Database Engine error '80040e09' Cannot update. Database or object is read-only. - C# ASP.NET
Microsoft JET Database Engine error '80040e09' Cannot update. Database or object is read-only. /deploy/Order/RegProg.asp, line...

Подключиться к SQL 2000. BASE_STRING = 'Driver={SQL Server};Server=(local);Database=mybase; - C# ASP.NET
Пишу поключение BASE_STRING = 'Driver={SQL Server};Server=(local);Database=mybase;', тестирую соединение в редакторе (Ultradev), все...

Ошибка при публикации приложения MVC с базой MS SQL Server подход Database First - C# MVC
Пытаюсь опубликовать приложение на локальной машине (использую Visual Studio 2013, MS SQLServer 2012), подход Database First. При запуске...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru