Порча индексов

Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать

Модераторы: kdv, dimitr

Ответить
dostap
Сообщения: 14
Зарегистрирован: 23 фев 2008, 13:30

Порча индексов

Сообщение dostap » 23 фев 2011, 16:14

есть база в которой после вызова sp происходит разрушение индексов.
Размер в 7zip 3375 kB.
Куда слать?

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Порча индексов

Сообщение hvlad » 23 фев 2011, 17:56

Для начала хотелось бы знать точную версию FB (IB?) и как именно определяется порча индексов

dostap
Сообщения: 14
Зарегистрирован: 23 фев 2008, 13:30

Re: Порча индексов

Сообщение dostap » 23 фев 2011, 18:14

Прошу прощения, запамятовал. FB WI-V2.5.1.26229
После вызова sp независимо от завершения COMMIT или ROLLBACK
Проверка БД сообщает

Summary of validation errors
Number of index page errors : 2

IBE: Validation completed.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Порча индексов

Сообщение hvlad » 23 фев 2011, 20:13

dostap писал(а):Прошу прощения, запамятовал. FB WI-V2.5.1.26229
После вызова sp независимо от завершения COMMIT или ROLLBACK
Проверка БД сообщает

Summary of validation errors
Number of index page errors : 2

IBE: Validation completed.
А что в firebird.log ?
А если валидацию сделать ДО выполнения процедуры ?

dostap
Сообщения: 14
Зарегистрирован: 23 фев 2008, 13:30

Re: Порча индексов

Сообщение dostap » 23 фев 2011, 20:40

Перед выполнением процедуры validate OK, т.к. база перед запуском сп восстанавливается.
в логе
DMW2KH Wed Feb 23 16:16:04 2011
Database: doorsdb
Index 1 is corrupt (missing entries) in table TWGOODS (218)


DMW2KH Wed Feb 23 16:16:04 2011
Database: doorsdb
Index 3 is corrupt (missing entries) in table TWGOODS (218)


DMW2KH Wed Feb 23 18:18:32 2011
Database: doorsdb
Index 1 is corrupt (missing entries) in table TWGOODS (218)


DMW2KH Wed Feb 23 18:18:33 2011
Database: doorsdb
Index 3 is corrupt (missing entries) in table TWGOODS (218)


DMW2KH Wed Feb 23 19:43:21 2011
Database: doorsdb
Index 1 is corrupt (missing entries) in table TWGOODS (218)


DMW2KH Wed Feb 23 19:43:21 2011
Database: doorsdb
Index 3 is corrupt (missing entries) in table TWGOODS (218)

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Порча индексов

Сообщение hvlad » 23 фев 2011, 22:41

Вот теперь это стало действительно интересно. Даже очень.
Откуда скачать ?

dostap
Сообщения: 14
Зарегистрирован: 23 фев 2008, 13:30

Re: Порча индексов

Сообщение dostap » 24 фев 2011, 11:07

Как добиться :
После рестора

select * from repair_all(1,1,0)
даст нужный результат.

Скачать с http://azov.dveri-k.ru/obmen/dvk/doors21.zip

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Порча индексов

Сообщение hvlad » 24 фев 2011, 15:01

Скачал, воспроизвел, смотрю.
Пока могу сказать только что проблема в сочетании вычислимых полей и select with lock.
Если убрать with lock из TWGOODS_UPD (их там два), то всё ок.

dostap
Сообщения: 14
Зарегистрирован: 23 фев 2008, 13:30

Re: Порча индексов

Сообщение dostap » 24 фев 2011, 15:24

Там происходит закольцовка при update TWGOODS
по причине ошибки которую я внёс собственными руками

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Порча индексов

Сообщение hvlad » 24 фев 2011, 15:50

А что такое - закольцовка, и к чему она должна приводить ? :)

dostap
Сообщения: 14
Зарегистрирован: 23 фев 2008, 13:30

Re: Порча индексов

Сообщение dostap » 24 фев 2011, 16:43

Закольцовка значит что TWGOODS может обновлятся вечно( TWGOODS_UPD вызывается рекурсивно). :oops:
Но это не должно приводить к поломке базы.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Порча индексов

Сообщение hvlad » 24 фев 2011, 17:35

Я не вижу зацикливания. Проверить можешь 2-мя способами
а) убрать with lock, как я говорил выше, и запустить процедуру, или
б) отключить триггеры, проапдейтить таблицу саму в себя, собрать мусор (селектом), включить триггеры и опять же запустить процедуру.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Порча индексов

Сообщение hvlad » 25 фев 2011, 12:45

Исправление тестируется и будет доступно на днях.

dostap
Сообщения: 14
Зарегистрирован: 23 фев 2008, 13:30

Re: Порча индексов

Сообщение dostap » 01 мар 2011, 00:01

В продолжение осмелюсь предположить что в фазе триггера after insert (or update ?)
не корректно получаются значения new.COMPUTED_BY_FIELD в частности для double precision = .0
хотя уже всё должно быть посчитано.
Я кажись тока нарвался на эту засаду.
Завтра проверю точно

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Порча индексов

Сообщение hvlad » 01 мар 2011, 01:32

dostap писал(а):В продолжение осмелюсь предположить что в фазе триггера after insert (or update ?)
не корректно получаются значения new.COMPUTED_BY_FIELD в частности для double precision = .0
Очень может быть.
Холостой апдейт таблицы решит проблему.
Есс-но будет и полноценное решение в самом движке.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Порча индексов

Сообщение hvlad » 05 мар 2011, 01:59

Тикет в трекере
Исправление для всех 2.х уже закоммиченно, так что следующий снапшот можно пробовать.

Ответить