База данных Супермаг+ штатно генерируется неправильно, что приводит к рассогласованию связки индекс-constraint и ошибкам, в том числе повреждению структуры. В связи с этим был создан нижеследующий скрипт для исправления ошибок генерации БД. В связи с допущенным разработчиками косяком (непониманием ими правил создания constraint) настоятельно рекомендуется отключать все административные задания Супермага, касающиеся индексов.
Скрипт в большинстве случаев приведет к неработоспособности БД и потребует долечивания базы оптимизатором. Не запускайте, пока не поймете точно, что он делает и с какими последствиями!
Код:
DECLARE
sql_stmt VARCHAR2 (100);
BEGIN
FOR c IN (select constraint_type,owner,table_name,constraint_name,index_owner,index_name from dba_constraints where index_name is not null and owner='SUPERMAG' and (index_name,index_owner) not in (select index_name,owner from dba_indexes where temporary='Y'))
LOOP
begin
execute immediate 'alter table "'||c.owner||'"."'||c.table_name||'" disable constraint "'||c.constraint_name||'" cascade';
execute immediate 'drop index "'||c.index_owner||'"."'||c.index_name||'"';
execute immediate 'alter table "'||c.owner||'"."'||c.table_name||'" enable constraint "'||c.constraint_name||'"';
exception when others then null;
end;
END LOOP;
END;
/