How to activate all indexes?
Run the following query:
SET TERM !! ;
EXECUTE BLOCK AS
DECLARE VARIABLE stmt VARCHAR(1000);
BEGIN
for select 'ALTER INDEX '||rdb$index_name ||' ACTIVE;'
from rdb$indices
where (rdb$system_flag is null or rdb$system_flag = 0)
order by rdb$foreign_key nulls first
into :stmt
do EXECUTE STATEMENT :stmt;
END!!
SET TERM ; !!
The ORDER BY is needed to make sure primary and unique keys are activated before foreign keys. The reason for this is that a foreign key cannot function unless there is a matching primary or unique key for the columns it references.
If you run Firebird 1.x which doesn't have EXECUTE BLOCK, you can run the following query:
select 'ALTER INDEX '||rdb$index_name ||' ACTIVE;'
from rdb$indices
where (rdb$system_flag is null or rdb$system_flag = 0)
and rdb$foreign_key is null
union all
select 'ALTER INDEX '||rdb$index_name ||' ACTIVE;'
from rdb$indices
where (rdb$system_flag is null or rdb$system_flag = 0)
and rdb$foreign_key is not null
then copy/paste the results as a new query and run them. If you want to do it from ISQL, there's detailed explanation in FAQ #1.
The query is separated into two parts for Firebird 1.0 compatibility, because Firebird 1.0 does not supports NULLS FIRST clause.