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;
/
Перенос определённого partitioned index в другое табличное пространство
set serveroutput on
begin
for i in (select index_owner,index_name, partition_name,tablespace_name,status
from DBA_IND_PARTITIONS
where index_name='HD_FILEDS_INDX1_PAR' and tablespace_name='STORAGE_DOC')
loop
execute immediate 'alter index '||i.index_owner||'.'
||i.index_name||' rebuild partition '||i.partition_name
||' tablespace STORAGE_DOC_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;