Страница 1 из 1
Дублирование ключа в таблице PRMONTHUPDATING
Добавлено: 27 янв 2011, 16:29
sim
При расчете зарплаты часто выдается ошибка:
TBlockModifier.Run Ошибка модификации данных! Статус = 5. Обработано 143 записей.
и затем:
Дублирование уникального ключа. таблица PRMONTHUPDATING =>PDOC||08952eD0
Может быть, кто подскажет - в какую сторону порыться?
Версия 8.1, mssql, патчи свежие
Re: Дублирование ключа в таблице PRMONTHUPDATING
Добавлено: 27 янв 2011, 17:42
Polimer
Может быть связано с отсутствием прав на новые таблицы?
Re: Дублирование ключа в таблице PRMONTHUPDATING
Добавлено: 27 янв 2011, 20:03
sim
Polimer писал(а):Может быть связано с отсутствием прав на новые таблицы?
Не, права на новые таблицы мы пересчитали...
Да и до перехода на новые патчи (когда еще докомпиляции словаря не было) - тоже такая же ошибка выводилась.
Re: Дублирование ключа в таблице PRMONTHUPDATING
Добавлено: 27 янв 2011, 20:19
Polimer
Если на реальной таблице у нас появляется такая ошибка(дублирование уникального ключа), запускаем процедурку приращения нрек для этой таблицы. Правда, в последнее время очень редко появляется.
Re: Дублирование ключа в таблице PRMONTHUPDATING
Добавлено: 27 янв 2011, 21:28
sim
Polimer писал(а):Если на реальной таблице у нас появляется такая ошибка(дублирование уникального ключа), запускаем процедурку приращения нрек для этой таблицы. Правда, в последнее время очень редко появляется.
Да вот в том и фишка то, что такой таблицы среди реальных не наблюдается.
PRMONTH есть, а PRMONTHUPDATING - нет в словаре.
Re: Дублирование ключа в таблице PRMONTHUPDATING
Добавлено: 27 янв 2011, 22:08
edward_K
скорей всего это просто синоним. Посмотри в сапорте какие там уникальные ключи - часто кроме nrec есть еще.
Раньше например был в нескольких таблицах tabn и tabn+cex - cex не совпал с лиц.счетом и получаем ошибку.
Здесь уникальный то только Nrec, но он не первый.
Re: Дублирование ключа в таблице PRMONTHUPDATING
Добавлено: 27 янв 2011, 23:27
spark
sim писал(а):При расчете зарплаты часто выдается ошибка:
TBlockModifier.Run Ошибка модификации данных! Статус = 5. Обработано 143 записей.
и затем:
Дублирование уникального ключа. таблица PRMONTHUPDATING =>PDOC||08952eD0
Может быть, кто подскажет - в какую сторону порыться?
Версия 8.1, mssql, патчи свежие
А запуск галактики с ключом /nusk+ не помогает?
Меня пару раз в подобных ситуациях именно это и спасало.
Re: Дублирование ключа в таблице PRMONTHUPDATING
Добавлено: 28 янв 2011, 13:41
sim
Polimer писал(а):Если на реальной таблице у нас появляется такая ошибка(дублирование уникального ключа), запускаем процедурку приращения нрек для этой таблицы. Правда, в последнее время очень редко появляется.
А можно поподробнее - как это сделать?
Re: Дублирование ключа в таблице PRMONTHUPDATING
Добавлено: 28 янв 2011, 13:42
sim
spark писал(а): А запуск галактики с ключом /nusk+ не помогает?
Меня пару раз в подобных ситуациях именно это и спасало.
Можно ли это сделать при работающих пользователях?
Re: Дублирование ключа в таблице PRMONTHUPDATING
Добавлено: 28 янв 2011, 14:18
galover
/nusk+ обычно помогает, проверяли на работающих юзерах
Re: Дублирование ключа в таблице PRMONTHUPDATING
Добавлено: 28 янв 2011, 14:48
Polimer
sim писал(а):Polimer писал(а):Если на реальной таблице у нас появляется такая ошибка(дублирование уникального ключа), запускаем процедурку приращения нрек для этой таблицы. Правда, в последнее время очень редко появляется.
А можно поподробнее - как это сделать?
Вроде публиковал:
Код: Выделить всё
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[spNapSetNRECMax](@TableName VARCHAR(200))
AS BEGIN
DECLARE @SQL VARCHAR(8000)
SELECT @SQL = '
DECLARE @NREC VARBINARY(8)
SELECT @NREC = MAX(F$NREC) FROM T$' + @TableName + '
EXEC spNapSetNREC ''' + @TableName + ''', @NREC'
EXEC(@SQL)
--PRINT @SQL
END
и
Код: Выделить всё
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[spNapSetNREC](@TableNameOrCode VARCHAR(80), @NewNREC VARBINARY(8))
AS
BEGIN
DECLARE @I INT, @DbName VARCHAR(50), @NeedMax INT, @TableCode INT
DECLARE @NREC0 VARBINARY(8), @NREC VARBINARY(8), @Base VARBINARY(2)
SELECT
@Base = CONVERT(VARBINARY(2), CONVERT(INT, SUBSTRING(@NewNREC, 1, 2)) & 0x8001)
SELECT
@TableCode = dbo.fnTableCode(@TableNameOrCode),
@DbName = UPPER(DB_NAME()),
@NeedMax=0,
@NREC0 = SUBSTRING(@Base, 1, 2) + SUBSTRING(0x000000000000, 1, 6),
@I = 0
SELECT
@NREC = @NREC0
EXEC master..na_getnextnrec @DbName, @TableCode, @NREC OUTPUT, @NeedMax OUTPUT
IF @NeedMax = 1
EXEC master..na_getnextnrecbymax @DbName, @TableCode, @NREC OUTPUT, @NeedMax OUTPUT, @NewNREC
ELSE
IF @NREC >= @NewNREC
PRINT 'spNAPSetNREC: NREC успешно приращен'
ELSE
BEGIN
DECLARE @Diff BIGINT, @Msg VARCHAR(8000), @IMax BIGINT
SELECT
@IMax = 1000000,
@Diff = CONVERT(BIGINT, @NewNREC) - CONVERT(BIGINT, @NREC)
IF @Diff > @IMax BEGIN
SELECT @Msg = 'spNAPSetNREC: приращение NREC на слишком большое значение (' + LTRIM(@Diff) + ')'
RAISERROR(@Msg, 16, 1)
END
ELSE BEGIN
PRINT 'spNapSetNREC: Вызываю na_getnextnrec в цикле...'
--PRINT @NREC
--PRINT @NewNREC
WHILE @NREC < @NewNREC AND @I <= @IMax
BEGIN
--PRINT @NREC
SELECT @NREC = @NREC0
EXEC master..na_getnextnrec @DbName, @TableCode, @NREC OUTPUT, @NeedMax OUTPUT
SELECT @I = @I + 1
END
--PRINT '@I = ' + LTRIM(@I)
IF ISNULL(@NREC, 0) < @NewNREC
BEGIN
SELECT @Msg = 'Ошибка в spNapSetNREC: ' + CHAR(10) +
'NREC не приращен до заданного значения. ' +
'Цикл прерван после ' + LTRIM(@I) + ' вызовов na_getnextnrec. ' + CHAR(10) +
'Для дополнительного приращения NREC повторно вызовите процедуру ' +
'spNapSetNREC.'
RAISERROR(@Msg, 16, 1)
END
END
END
IF @NREC = @NewNREC PRINT 'spNapSetNREC: NREC успешно приращен.'
END
Re: Дублирование ключа в таблице PRMONTHUPDATING
Добавлено: 28 янв 2011, 18:29
sim
Загрузка с NUSK+ не помогла. К сожалению.
(кстати, использование данного ключа возможно только в монопольном режиме).
Кроме того, таблица PRMONTH была проверена всеми возможными способами на предмет содержания неуникальных записей. Таковых нет.
Re: Дублирование ключа в таблице PRMONTHUPDATING
Добавлено: 30 янв 2011, 01:45
Screw
PDOC - это одна из локальных таблиц в памяти интерфейса PrMonthUpdating. Никакие лечения базы тут не помогут. Скорее всего, обычный прикладной ляп. Постарайтесь как можно точнее выяснить обстоятельства возникновения ошибки и по возможности зарегистрируйте проблему в ПиР.