konstsch |
А все системные индексы активны, т.е.
Select RDB$INDEX_NAME, RDB$INDEX_INACTIVE
From RDB$INDICES | выдает или нулл или 0
|
если gbak -r -v проходит без сообщений об ошибках, докладывает об активации всех индексов и в полученной базе имеет место быть такая фигня - тогда я не знаю.
Имею предположить варианты:
1. С базой работали серверами очень разных версий без b/r.
2. Каскадные свойства ключи имели не сразу, а получили впоследствии путём ковыряния ручками в системных таблицах. Эксперт, например, в числе других хаков предлагает и такой. Люди, не чтящие доку, а осваивающие возможности сервера через инструмент, смело пользуются таким хаками, не подозревая, что это хаки. А любой хак имеет такое свойство, что он работает с той версией сервера, на которой проверялся, но никто не гарантирует, что будет работать со следующей.
3. Какое-то ну очень хитрое повреждение базы не уровня страниц и не уровня записей. Где-нибудь в структуре индексов на системных таблицах, что ли.
4. Регрессионный баг именно в 1.5.2. Проверять влом, каскадами не пользуюсь из религиозных соображений, мож завтра кто пользуется проверит.
Имхо по-любому твоя база должна представлять интерес для разработчиков.
konstsch |
кстати после пересоздания констрайта 0 меняется на нулл.
|
Эти хакеры, писавшие IB, позволяли себе накладные карманы, то есть не делать разницы внутри своего кода в сервере разницы между нуллом и 0. Будет ли это когда-нить изжито - не знаю.
Скопируй куда-нить базу (при остановленном сервере ессно), мож действительно заинтересуются разработчики и принесёт пользу, и выполни
Update rdb$indeces set RDB$INDEX_INACTIVE=1
where RDB$INDEX_NAME starting 'RDB$'
Commit
Update rdb$indeces set RDB$INDEX_INACTIVE=0
where RDB$INDEX_NAME starting 'RDB$'
Commit
По идее должно помочь. Если это болезнь, а не симптом. Если симптом - либо не поможет, либо проявится опять после b/r.