Форма "Активация индексов базы данных"

Проект «Агбис Сервисные работы«

Предназначена для выполнения контроля над активацией индексов.

Активирование индексов

В результате выполнения программой GBAK операции Backup/Restory и по каким-то другим причинам часть индексом может стать неактивной.
Получаем список всех неактивных индексов запросом

select rdb$index_name 
from rdb$indices 
where (rdb$system_flag is null or rdb$system_flag = 0) and rdb$indices.rdb$index_inactive = 1 
order by rdb$foreign_key nulls first 
Кнопкой Активирование индексов запускается процесс активации всех неактивных индексов в базе данных Новая

Да

Ошибки активации индексов фиксируются в файле RestoreIndexResult.txt, который может быть передан на обработку в программу RecoveryDB.

Восстановление индексов

Восстановление индексов полностью скопировано из программы RecoveryDB.
Также считывается файл с ошибками активации индексов RestoreIndexResult.txt и обрабатываются так же как в программе RecoveryDB.
Принцип работы исправления первичных ключей:
1. из файла с ошибками («RestoreIndexResult.txt») выбираются все проблемы с primary
2. отключаются триггеры по удалению из docs_card, docs_bank, docs_kassa, docs_bonus и триггер по добавлению изменений в лог репликации
3. добавляется временная запись со всеми данными как у проблемой (задвоенной)
4. во всех зависимых таблицах проставляется ИД временной записи
5. удаляются задвоенные записи
6. возвращаем удаленную запись (уже не задвоенную)
7. возвращаются ИД во всех зависимых таблиц из временной записи на ту, что была
8. включаются триггеры

Кнопкой Восстановление индексов запускается процесс обработки ошибок активации индексов в базе данных Новая

Да

В данном случае ошибок нет.
В поле Лог выполнения представлен лог выполнения операций.
В поле Скрипты для восстановления индексов записался скрипт, который генерирует список операторов для активации всех неактивных индексов

select 'ALTER INDEX '||rdb$index_name ||' ACTIVE;' as str 
from rdb$indices  
where (rdb$system_flag is null or rdb$system_flag = 0) and rdb$indices.rdb$index_inactive = 1  
order by rdb$foreign_key nulls first
Этот скрипт не нужен, так как все индексы активированы в пункте Активирование индексов.

Дополнительная информация