Ручное восстановление индексов
Материал из GedeminWiki
(Различия между версиями)
Flake (обсуждение | вклад) |
SYSDBA (обсуждение | вклад) |
||
| Строка 2: | Строка 2: | ||
=== Ручное восстановление индексов === | === Ручное восстановление индексов === | ||
| + | |||
Данные SQL-запросы вернут список запросов для восстановления неактивных индексов. Этот список можно скопировать в Script Executive IBExpert'а или выполнить через isql. | Данные SQL-запросы вернут список запросов для восстановления неактивных индексов. Этот список можно скопировать в Script Executive IBExpert'а или выполнить через isql. | ||
Запрос для поиска неактивных индексов по первичным ключам: | Запрос для поиска неактивных индексов по первичным ключам: | ||
| + | |||
SELECT | SELECT | ||
' ALTER INDEX ' || c.rdb$index_name || ' ACTIVE; ' | ' ALTER INDEX ' || c.rdb$index_name || ' ACTIVE; ' | ||
| Строка 13: | Строка 15: | ||
r.rdb$index_inactive > 0 | r.rdb$index_inactive > 0 | ||
AND c.rdb$constraint_type = 'PRIMARY KEY' | AND c.rdb$constraint_type = 'PRIMARY KEY' | ||
| − | AND r.rdb$system_flag | + | AND COALESCE(r.rdb$system_flag, 0) = 0 |
Запрос для поиска неактивных индексов по внешним ключам: | Запрос для поиска неактивных индексов по внешним ключам: | ||
| + | |||
SELECT | SELECT | ||
' ALTER INDEX ' || c.rdb$index_name || ' ACTIVE; ' | ' ALTER INDEX ' || c.rdb$index_name || ' ACTIVE; ' | ||
| Строка 24: | Строка 27: | ||
r.rdb$index_inactive > 0 | r.rdb$index_inactive > 0 | ||
AND c.rdb$constraint_type = 'FOREIGN KEY' | AND c.rdb$constraint_type = 'FOREIGN KEY' | ||
| − | AND r.rdb$system_flag | + | AND COALESCE(r.rdb$system_flag, 0) = 0 |
Запрос для поиска оставшихся неактивных индексов: | Запрос для поиска оставшихся неактивных индексов: | ||
| + | |||
SELECT | SELECT | ||
' ALTER INDEX ' || r.rdb$index_name || ' ACTIVE; ' | ' ALTER INDEX ' || r.rdb$index_name || ' ACTIVE; ' | ||
| Строка 33: | Строка 37: | ||
WHERE | WHERE | ||
r.rdb$index_inactive > 0 | r.rdb$index_inactive > 0 | ||
| − | AND r.rdb$system_flag | + | AND COALESCE(r.rdb$system_flag, 0) = 0 |
[[Category:База данных]] | [[Category:База данных]] | ||
Текущая версия на 12:59, 25 декабря 2008
Иногда приходится восстанавливать базу без активации индексов. Чтобы вручную не активировать каждый индекс можно сделать следующее.
[править] Ручное восстановление индексов
Данные SQL-запросы вернут список запросов для восстановления неактивных индексов. Этот список можно скопировать в Script Executive IBExpert'а или выполнить через isql.
Запрос для поиска неактивных индексов по первичным ключам:
SELECT ' ALTER INDEX ' || c.rdb$index_name || ' ACTIVE; ' FROM rdb$indices r JOIN rdb$relation_constraints c ON r.rdb$index_name = c.rdb$index_name WHERE r.rdb$index_inactive > 0 AND c.rdb$constraint_type = 'PRIMARY KEY' AND COALESCE(r.rdb$system_flag, 0) = 0
Запрос для поиска неактивных индексов по внешним ключам:
SELECT ' ALTER INDEX ' || c.rdb$index_name || ' ACTIVE; ' FROM rdb$indices r JOIN rdb$relation_constraints c ON r.rdb$index_name = c.rdb$index_name WHERE r.rdb$index_inactive > 0 AND c.rdb$constraint_type = 'FOREIGN KEY' AND COALESCE(r.rdb$system_flag, 0) = 0
Запрос для поиска оставшихся неактивных индексов:
SELECT ' ALTER INDEX ' || r.rdb$index_name || ' ACTIVE; ' FROM rdb$indices r WHERE r.rdb$index_inactive > 0 AND COALESCE(r.rdb$system_flag, 0) = 0