Дублирование ключа в таблице PRMONTHUPDATING

Администрирование баз данных (Pervasive.SQL, MS SQL, Oracle, утилита Support)

Модераторы: m0p3e, edward_K, Модераторы

Ответить
sim
Местный житель
Сообщения: 1805
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Россия

Дублирование ключа в таблице PRMONTHUPDATING

Сообщение sim »

При расчете зарплаты часто выдается ошибка:
TBlockModifier.Run Ошибка модификации данных! Статус = 5. Обработано 143 записей.
и затем:
Дублирование уникального ключа. таблица PRMONTHUPDATING =>PDOC||08952eD0

Может быть, кто подскажет - в какую сторону порыться?
Версия 8.1, mssql, патчи свежие
Polimer
Местный житель
Сообщения: 489
Зарегистрирован: 27 янв 2006, 12:46
Откуда: Москва

Re: Дублирование ключа в таблице PRMONTHUPDATING

Сообщение Polimer »

Может быть связано с отсутствием прав на новые таблицы?
sim
Местный житель
Сообщения: 1805
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Россия

Re: Дублирование ключа в таблице PRMONTHUPDATING

Сообщение sim »

Polimer писал(а):Может быть связано с отсутствием прав на новые таблицы?
Не, права на новые таблицы мы пересчитали...
Да и до перехода на новые патчи (когда еще докомпиляции словаря не было) - тоже такая же ошибка выводилась.
Polimer
Местный житель
Сообщения: 489
Зарегистрирован: 27 янв 2006, 12:46
Откуда: Москва

Re: Дублирование ключа в таблице PRMONTHUPDATING

Сообщение Polimer »

Если на реальной таблице у нас появляется такая ошибка(дублирование уникального ключа), запускаем процедурку приращения нрек для этой таблицы. Правда, в последнее время очень редко появляется.
sim
Местный житель
Сообщения: 1805
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Россия

Re: Дублирование ключа в таблице PRMONTHUPDATING

Сообщение sim »

Polimer писал(а):Если на реальной таблице у нас появляется такая ошибка(дублирование уникального ключа), запускаем процедурку приращения нрек для этой таблицы. Правда, в последнее время очень редко появляется.
Да вот в том и фишка то, что такой таблицы среди реальных не наблюдается.
PRMONTH есть, а PRMONTHUPDATING - нет в словаре.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Дублирование ключа в таблице PRMONTHUPDATING

Сообщение edward_K »

скорей всего это просто синоним. Посмотри в сапорте какие там уникальные ключи - часто кроме nrec есть еще.
Раньше например был в нескольких таблицах tabn и tabn+cex - cex не совпал с лиц.счетом и получаем ошибку.
Здесь уникальный то только Nrec, но он не первый.
spark
Местный житель
Сообщения: 476
Зарегистрирован: 19 окт 2005, 13:38
Контактная информация:

Re: Дублирование ключа в таблице PRMONTHUPDATING

Сообщение spark »

sim писал(а):При расчете зарплаты часто выдается ошибка:
TBlockModifier.Run Ошибка модификации данных! Статус = 5. Обработано 143 записей.
и затем:
Дублирование уникального ключа. таблица PRMONTHUPDATING =>PDOC||08952eD0

Может быть, кто подскажет - в какую сторону порыться?
Версия 8.1, mssql, патчи свежие
А запуск галактики с ключом /nusk+ не помогает?
Меня пару раз в подобных ситуациях именно это и спасало.
sim
Местный житель
Сообщения: 1805
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Россия

Re: Дублирование ключа в таблице PRMONTHUPDATING

Сообщение sim »

Polimer писал(а):Если на реальной таблице у нас появляется такая ошибка(дублирование уникального ключа), запускаем процедурку приращения нрек для этой таблицы. Правда, в последнее время очень редко появляется.
А можно поподробнее - как это сделать?
sim
Местный житель
Сообщения: 1805
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Россия

Re: Дублирование ключа в таблице PRMONTHUPDATING

Сообщение sim »

spark писал(а): А запуск галактики с ключом /nusk+ не помогает?
Меня пару раз в подобных ситуациях именно это и спасало.
Можно ли это сделать при работающих пользователях?
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Re: Дублирование ключа в таблице PRMONTHUPDATING

Сообщение galover »

/nusk+ обычно помогает, проверяли на работающих юзерах
Polimer
Местный житель
Сообщения: 489
Зарегистрирован: 27 янв 2006, 12:46
Откуда: Москва

Re: Дублирование ключа в таблице PRMONTHUPDATING

Сообщение 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
sim
Местный житель
Сообщения: 1805
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Россия

Re: Дублирование ключа в таблице PRMONTHUPDATING

Сообщение sim »

Загрузка с NUSK+ не помогла. К сожалению.
(кстати, использование данного ключа возможно только в монопольном режиме).
Кроме того, таблица PRMONTH была проверена всеми возможными способами на предмет содержания неуникальных записей. Таковых нет.
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Re: Дублирование ключа в таблице PRMONTHUPDATING

Сообщение Screw »

PDOC - это одна из локальных таблиц в памяти интерфейса PrMonthUpdating. Никакие лечения базы тут не помогут. Скорее всего, обычный прикладной ляп. Постарайтесь как можно точнее выяснить обстоятельства возникновения ошибки и по возможности зарегистрируйте проблему в ПиР.
Виталий
Ответить