Форум программистов, компьютерный форум, киберфорум
Наши страницы
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.53/17: Рейтинг темы: голосов - 17, средняя оценка - 4.53
Antykus
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
#1

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

21.07.2014, 12:07. Просмотров 3153. Ответов 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
Ответы с готовыми решениями:

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

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

Установка MS SQL Server Desktop Engine на Windows Server 2008
MS sql server desktop engine, при установке на windows server 2008 пишет "a...

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

Database Mail на sql server 2012
Добрый день! Настроили Database Mail на одном из серверов, но сообщения не...

30
Antykus
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
23.07.2014, 12:35  [ТС] #21
invm,
нет, просто запускаю процедуру.
особенность в том, что ошибка выдаётся именно тогда, когда процедура запускается не на чистую, а когда дома уже загружены в бд, и проверка, есть ли такой дом в базе, уже по идее должна выдать положительный результат и произвести update.
0
invm
1853 / 1258 / 367
Регистрация: 02.06.2013
Сообщений: 3,184
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 / 2
Регистрация: 10.05.2014
Сообщений: 230
23.07.2014, 13:58  [ТС] #23
invm,
0
Миниатюры
Ошибка: Экземпляру компонента SQL Server Database Engine не удается получить ресурс LOCK в данный момент  
invm
1853 / 1258 / 367
Регистрация: 02.06.2013
Сообщений: 3,184
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 / 2
Регистрация: 10.05.2014
Сообщений: 230
23.07.2014, 16:16  [ТС] #25
invm, а в чём отличие? не нашёл
0
invm
1853 / 1258 / 367
Регистрация: 02.06.2013
Сообщений: 3,184
23.07.2014, 16:40 #26
Antykus, отличие в
T-SQL
1
with recompile
0
Antykus
0 / 0 / 2
Регистрация: 10.05.2014
Сообщений: 230
23.07.2014, 17:17  [ТС] #27
invm, не помог и recompile
0
invm
1853 / 1258 / 367
Регистрация: 02.06.2013
Сообщений: 3,184
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 / 2
Регистрация: 10.05.2014
Сообщений: 230
24.07.2014, 12:26  [ТС] #29
invm, так отработало, при этом пишет, что обработана одна строка. что для меня непонятно, учитывая то, что процедура пытается загрузить все те данные, что уже загружены, и должно быть обработано ноль строк. то есть ни одна строка не добавлена, ни одна не изменена. Не подскажете ли как узнать houseguid обработанной строчки, и тип обработки, изменение или добавление строки?

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

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

Помогите поднять клиента: Unable to connect to database server: unable to start database engine
Есть сервре Sybase SQL Anywhere 5.0 к нему настроен драйвер ODBC с помощью...

Ошибка: Microsoft JET Database Engine error '80040e09' Cannot update. Database or object is read-only.
Microsoft JET Database Engine error '80040e09' Cannot update. Database or...


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

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

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