SET serveroutput ON begin FOR i IN (SELECT owner,index_name FROM dba_indexes WHERE STATUS = 'UNUSABLE' AND index_name NOT LIKE 'SYS_%') loop execute immediate 'alter index '||i.owner||'.'||i.index_name||' rebuild'; end loop; end; /
SET serveroutput ON begin FOR i IN (SELECT index_owner,index_name, partition_name,tablespace_name,STATUS FROM DBA_IND_PARTITIONS WHERE index_name='FILEDS_INDX1_PAR' AND tablespace_name='TS') loop execute immediate 'alter index '||i.index_owner||'.' ||i.index_name||' rebuild partition '||i.partition_name ||' tablespace TS_INDX'; end loop; end; /
SELECT ucc1.table_name , ucc1.column_name , ucc1.constraint_name , uc1.table_name master_table , uc1.constraint_name master_constraint_name , ucc2.column_name master_column_name FROM user_cons_columns ucc1 , user_cons_columns ucc2 , user_constraints uc1 , user_constraints uc2 WHERE uc1.constraint_type='P' AND ucc2.constraint_name = uc1.constraint_name AND uc2.r_constraint_name = uc1.constraint_name AND ucc1.constraint_name = uc2.constraint_name ORDER BY ucc1.table_name;
Сегментирование таблиц не может быть выполнено на существующей таблице. Для этого выполняется создание сегментированной таблицы схожей по структуре с исходной, но без данных. Для соблюдения целостности данных рекомендуется, перед переносом данных из исходной таблицы в сегментированную, переименовать исходную таблицу. В этом случае все связи автоматически перенастраиваются на переименованную таблицу и для восстановления связей с сегментированной таблицей их нужно пересоздать. Нижеприведённый запрос формирует строки удаления констрейнтов и создания новых.
SELECT 'alter table ' || ucc1.table_name || ' drop constraint ' ||ucc1.constraint_name ||';' ||chr(10) || 'alter table ' ||ucc1.table_name || ' add constraint ' ||ucc1.constraint_name ||' foreign key ('||ucc1.column_name||') ' ||'references <VALID_TABLE_NAME> ('||ucc2.column_name||')' || decode(uc2.delete_rule, 'NO ACTION', NULL,' on delete '||uc2.delete_rule) ||' ;' FROM user_cons_columns ucc1 , user_cons_columns ucc2 , user_constraints uc1 , user_constraints uc2 WHERE uc1.constraint_type='P' AND uc1.table_name = '<VALID_TABLE_NAME>' AND ucc2.constraint_name = uc1.constraint_name AND uc2.r_constraint_name = uc1.constraint_name AND ucc1.constraint_name = uc2.constraint_name ORDER BY ucc1.table_name;
Начиная с Oracle 11g стало возможным добавлять в индексы поля с NULL. Пример отсюда:
CREATE INDEX emp_ename_idx ON emp (ename ASC, 1) ;