No Oracle 12c (12.1) temos uma enorme tabela particionada com particionamento de intervalo. Além dos índices locais, há dois índices globais nele. A eliminação de partições antigas com a cláusula UPDATE INDEXES ajuda a manter os índices globais válidos.
Na noite seguinte, o recurso chamado trabalho em segundo plano de manutenção de índice global assíncrono iniciou um
ALTER INDEX xxx COALESCE CLEANUP
comando, que é executado há vários dias e limpa os índices globais de entradas órfãs de partições descartadas.
Infelizmente, precisamos criar outro índice nesta tabela com parâmetros diferentes, mas não é possível devido ao erro de ocupação de recurso devido a um bloqueio DML compartilhado (Row-X (SX)) causado pelo trabalho em segundo plano. Como precisamos implantar uma nova versão, precisamos definitivamente do DDL em outro índice. Para mim parece estranho, que alter index ... coalesce limpeza não permite criar outro índice em paralelo. Por que deveria haver alguma relação?
Pergunta: Se matarmos a sessão, o trabalho dos últimos 2 dias será perdido e o trabalho precisará ser reiniciado novamente do início?
Por motivos óbvios (preguiça) usei o exemplo para criar a tabela e o índice deste post:
https://richardfoote.wordpress.com/2013/08/02/12c-asynchronous-global-index-maintenance-part-i-where-are-we-now/
Em seguida, solte uma partição:
Em seguida, analise o índice:
As entradas órfãs são apresentadas aqui como entradas excluídas.
Aí vem minha adição. Inicie o
coalesce cleanup
manualmente, interrompa-o em alguns segundos (Ctrl-C) e analise o índice novamente:Como você pode ver, mesmo com a interrupção do comando, algumas das entradas foram limpas. Agora faça novamente:
Em seguida, crie um índice e continue:
Finalmente:
Então não, o progresso não foi perdido.