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

Откуда: Кемерово, Томск
Сообщений: 27
Добрый день.
У нас установлена серверная 1С, база крутится на mssql2005. При выполнении операции "Тестирование и исправление" появляется ошибка "Попытка вставки неуникального значения в уникальный индекс:
Microsoft OLE DB Provider for SQL Server: Cannot insert duplicate key row in object 'dbo._AccumRgTn19455' with unique index '_AccRg19455_ByDims_TRRRRRRN'". Сначала пыталась забороть её средствами 1С: нашла кривой регистр, но неуникальных записей в нём найти не удалось. Далее решила поковырять саму SQL-базу.

1) Запускаю DBCC DBREINDEX (_AccumRgTn19455): появляется ошибка
Сообщение 1505, уровень 16, состояние 1, строка 1
Операция CREATE UNIQUE INDEX прервана, т.к. обнаружен повторяющийся ключ для имени объекта 'dbo._AccumRgTn19455' и индекса '_AccRg19455_ByDims_TRRRRRRN'...
Выполнение операции завершено.

2) Делаю запрос вида
SELECT count(*), поля_индекса
FROM AccumRgTn19455
GROUP BY поля_индекса
HAVING count(*)>1
Запрос не выдаёт ни одной записи, т.е. как бы вроде и нет неуникальности.

3) Запускаю DBCC CHECK (test, REPAIR_FAST) - в результате находится ошибка всё в том же индексе, но выходит сообщение, что её можно исправить только с помощью REPAIR_REBUILD.

4) Запускаю DBCC CHECK (test, REPAIR_REBUILD) и получаю следующее:
...
Результаты DBCC для "_AccumRgTn19455".
Сообщение 8945, уровень 16, состояние 1, строка 1
Ошибка таблицы: идентификатор объекта 1, идентификатор индекса 208159937: индекс будет перестроен.
Не удалось исправить эту ошибку.
Сообщение 8978, уровень 16, состояние 1, строка 1
Ошибка таблицы: идентификатор объекта 208159937, идентификатор индекса 1, идентификатор секции 72057661870637056, идентификатор единицы размещения 72057661879091200 (тип In-row data). Отсутствует ссылка на страницу (1:118159) с предыдущей страницы (1:2268420). Возможна ошибка связывания цепочек.
Данная ошибка была исправлена.
Сообщение 2511, уровень 16, состояние 1, строка 1
Ошибка таблицы: идентификатор объекта 208159937, идентификатор индекса 1, идентификатор секции 72057661870637056, идентификатор единицы размещения 72057661879091200 (тип In-row data). Неправильный порядок ключей на странице (1:2265334), область памяти 13 и 14.
Данная ошибка была исправлена.
Сообщение 8945, уровень 16, состояние 1, строка 1
Ошибка таблицы: идентификатор объекта 2, идентификатор индекса 208159937: индекс будет перестроен.
Не удалось исправить эту ошибку.
Сообщение 8945, уровень 16, состояние 1, строка 1
Ошибка таблицы: идентификатор объекта 3, идентификатор индекса 208159937: индекс будет перестроен.
Не удалось исправить эту ошибку.
Сообщение 8945, уровень 16, состояние 1, строка 1
Ошибка таблицы: идентификатор объекта 4, идентификатор индекса 208159937: индекс будет перестроен.
Не удалось исправить эту ошибку.
Имеется 135075 строк на 4526 страницах для объекта "_AccumRgTn19455".
CHECKDB обнаружил 0 ошибок размещения и 2 ошибок согласованности в таблице "_AccumRgTn19455" (идентификатор объекта 208159937).
CHECKDB исправил 0 ошибок размещения и 2 ошибок согласованности в таблице "_AccumRgTn19455" (object идентификатор 208159937).
...
Выполнение DBCC завершено. Если DBCC выдает сообщения об ошибках, обратитесь к системному администратору.
Выполнение данной инструкции было прервано.


Таким образом, индекс так и продолжает глючить, т.к. ошибку в нём исправить не удалось... Что ещё можно попробовать? Идеи кончились.
15 мар 12, 08:27    [12250291]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2005: Проблема с кластерным индексом  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
DROP\CREATE
15 мар 12, 08:34    [12250316]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2005: Проблема с кластерным индексом  [new]
zhenya17
Member

Откуда: Кемерово, Томск
Сообщений: 27
pkarklin
DROP\CREATE
Этот вариант держу на крайний случай. Другого ничего нет?
15 мар 12, 08:37    [12250325]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2005: Проблема с кластерным индексом  [new]
zhenya17
Member

Откуда: Кемерово, Томск
Сообщений: 27
В общем, на копии базы убила вручную индекс и опять заупстила запрос на поиск дубликатов (т.е. выполнила п.1 из первого поста) - в итоге запрос-таки выдал 15 неуникальных записей в таблице.
Посмотрела, что за документы, очистила по ним данные из таблицы, сейчас попробую создать заново индекс и проверить работоспособность 1С.
15 мар 12, 09:49    [12250628]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2005: Проблема с кластерным индексом  [new]
zhenya17
Member

Откуда: Кемерово, Томск
Сообщений: 27
Проблему победить удалось. Опишу порядок, вдруг кому-то пригодится:

1) С помощью Management Studio 2005 сгенерировала create-скрипт на создание индекса, который глючил, и сохранила в файлик.

2) Вручную убила косячный индекс из таблицы _AccumRgTn19455

3) Запустила запрос вида
SELECT count(*), поля_индекса
FROM AccumRgTn19455
GROUP BY поля_индекса
HAVING count(*)>1
После того, как индекс был убит, у меня отобразилось 15 дублирующихся записей, хотя до выполнения п.2 запрос ничего не возвращал.

4) Просмотрела все записи и вручную почистила дубликаты. На самом деле, я ещё пользовалась обработкой "Структура отчёта", чтобы понять, с чем вообще имею дело. Оказалось, что в таблице _AccumRgTn19455 хранится регистр накопления "Выпуск продукции (налоговый учёт)". Я ещё поковырялась sql-запросами, выявила 15 неуникальных документов и после окончания всех действ проверила в 1С, что эти документы проводятся нормально, без ошибок. Просто так чистить таблицы наобум, конечно, не стоит: важно понимать, что чистится и чем это может обернуться.

5) Запустила запрос на создание индекса, который был сохранён в файле.

6) Перевела базу в однопользовательский режим и запустила dbcc checkdb - на этот раз ни одной ошибки не выдалось.

7) Перевела базу обратно в однопользовательский режим.

Всё... проблема побеждена. Ну ещё в 1С запустила "Тестирование и исправление", там тоже всё прошло нормально, перестало ругаться на неуникальный индекс.
19 мар 12, 10:00    [12271605]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2005: Проблема с кластерным индексом  [new]
zhenya17
Member

Откуда: Кемерово, Томск
Сообщений: 27
zhenya17
...
7) Перевела базу обратно в однопользовательский режим.
...
Пеервела SQL-базу обратно не в однопользовательский (single_user), а в многопользовательский режим (multi_user).
19 мар 12, 10:06    [12271646]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2005: Проблема с кластерным индексом  [new]
shynar
Member

Откуда:
Сообщений: 7
zhenya17
Проблему победить удалось. Опишу порядок, вдруг кому-то пригодится:

1) С помощью Management Studio 2005 сгенерировала create-скрипт на создание индекса, который глючил, и сохранила в файлик.


такая же ошибка у нас. Скажите пожалуйста более подробно как это делать 1 пункт.
21 ноя 12, 08:45    [13504732]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2005: Проблема с кластерным индексом  [new]
Гость333
Member

Откуда:
Сообщений: 3683
shynar
zhenya17
1) С помощью Management Studio 2005 сгенерировала create-скрипт на создание индекса, который глючил, и сохранила в файлик.

такая же ошибка у нас. Скажите пожалуйста более подробно как это делать 1 пункт.

В окне Object Explorer последовательно находите базу данных, таблицу, индекс. На индексе правой кнопкой мыши -> Script Index as -> CREATE To -> New Query Editor Window. Скрипт появится в новом окне Management Studio.
21 ноя 12, 09:10    [13504787]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2005: Проблема с кластерным индексом  [new]
kain111
Member

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

устанавливаете Management Studio, в нем подключаетесь к базе указав логин и пароль и адрес сервера, в появившемся дереве объектов раскрываете
база данных-название базы-таблицы-имя вашей таблицы-индексы-выбираете ваш индекс-по правой кнопке в меню выбираете команду Create script.
21 ноя 12, 09:16    [13504802]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2005: Проблема с кластерным индексом  [new]
shynar
Member

Откуда:
Сообщений: 7
kain111, Гость333 спасибо вам создала скрипт и сохранила
21 ноя 12, 10:40    [13505253]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2005: Проблема с кластерным индексом  [new]
shynar
Member

Откуда:
Сообщений: 7
zhenya17
Проблему победить удалось. Опишу порядок, вдруг кому-то пригодится:

3) Запустила запрос вида
SELECT count(*), поля_индекса
FROM AccumRgTn19455
GROUP BY поля_индекса
HAVING count(*)>1
После того, как индекс был убит, у меня отобразилось 15 дублирующихся записей, хотя до выполнения п.2 запрос ничего не возвращал.


пункт 3 ничего мне не выдал, почему не подскажите плиз? и опять повторяется ошибка при пересчете итогов
22 ноя 12, 12:44    [13512414]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2005: Проблема с кластерным индексом  [new]
kain111
Member

Откуда:
Сообщений: 227
shynar,
возможно ошибка не такая же все таки.
22 ноя 12, 13:53    [13513093]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2005: Проблема с кластерным индексом  [new]
Glory
Member

Откуда:
Сообщений: 104751
shynar
пункт 3 ничего мне не выдал, почему не подскажите плиз? и опять повторяется ошибка при пересчете итогов

Не тот индекс удалили
22 ноя 12, 13:57    [13513124]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить