você diz que eliminar e recriar índices pode criar problemas. Outra maneira de fazer isso é marcar os índices inutilizáveis e reconstruí-los. Desta forma, a sua definição (nome, colunas, espaço de tabelas, etc.) nunca é "perdida", mesmo que alguma etapa falhe.
Portanto, na etapa 2, faça um loop sobre todos os índices da tabela e execute:
ALTER INDEX my_index_name UNUSABLE;
e na etapa 4, percorra os índices e reconstrua. Você pode especificar nologging, o nível paralelo desejado, compressão de índice, etc:
ALTER ÍNDICE my_index_name REBUILD NOLOGGING PARALLEL 16;
É mais eficiente construir índices em uma varredura limpa e depois "linha por linha". No primeiro caso, o Oracle faz uma varredura completa na tabela, classifica e grava o índice. Se o índice for mantido durante o carregamento em massa, ele será atualizado o tempo todo durante o carregamento, portanto, ele precisa atualizar constantemente seu bloco de folha em todo o lugar, realizando mais trabalho e E / S. Por quê? porque cada bloco de índice será atualizado várias vezes durante diferentes pontos no tempo da carga.
BTW - esperamos que você tenha um "step 5" - colete estatísticas sobre tabela e índices (em paralelo)