Eu acho que não há uma maneira direta de obter os nomes desejados das restrições e índices, mas sim, você pode conseguir isso com um pouco de trabalho manual como segue.
Em primeiro lugar, você pode alterar o nome da restrição usando o seguinte comando:
alter table <table_name> rename constraint <constarint_name> to <new_constarint_name>;
Da mesma forma, você pode alterar o nome do índice usando o seguinte comando:
ALTER INDEX <index_name> RENAME TO <new_index_name>;
No seu caso, você precisa de alguma maneira de vincular nomes ruins (restrições/índices) com nomes corretos. e renomeie as restrições/índices com o nome correto. Para alcançá-lo, você pode tentar as seguintes etapas. (Estou dando exemplo para restrições, você pode conseguir o mesmo para índices)
- Etapa 1
Obtenha os nomes das restrições e seus dados do DB de produção usando a seguinte consulta e crie uma tabela no banco de dados de backup usando esses dados. (Você pode usar o
SQL Loader
ou External table
para ele.) Dê o nome desta tabela como PROD_DB_CONS
SELECT
C.TABLE_NAME,
C.CONSTRAINT_NAME,
C.CONSTRAINT_TYPE,
LISTAGG(CC.COLUMN_NAME, ',') WITHIN GROUP(
ORDER BY
COLUMN_NAME
) CONS_COLUMNS
FROM
USER_CONSTRAINTS C
JOIN USER_CONS_COLUMNS CC ON ( C.CONSTRAINT_NAME = CC.CONSTRAINT_NAME )
GROUP BY
C.TABLE_NAME,
C.CONSTRAINT_NAME,
C.CONSTRAINT_TYPE;
- Etapa 2
Crie o mesmo tipo de tabela no banco de dados de backup usando a seguinte consulta:
CREATE TABLE BACKUP_DB_CONS AS
SELECT
C.TABLE_NAME,
C.CONSTRAINT_NAME,
C.CONSTRAINT_TYPE,
LISTAGG(CC.COLUMN_NAME, ',') WITHIN GROUP(
ORDER BY
COLUMN_NAME
) CONS_COLUMNS
FROM
USER_CONSTRAINTS C
JOIN USER_CONS_COLUMNS CC ON ( C.CONSTRAINT_NAME = CC.CONSTRAINT_NAME )
GROUP BY
C.TABLE_NAME,
C.CONSTRAINT_NAME,
C.CONSTRAINT_TYPE;
- Etapa 3
Execute a seguinte consulta em Backup DB que irá gerar uma série de comandos para alterar o nome de todas as restrições do DB de produção
SELECT
'ALTER TABLE '
|| B.TABLE_NAME
|| ' RENAME CONSTRAINT '
|| P.CONSTRAINT_NAME
|| ' TO '
|| B.CONSTRAINT_NAME
|| ';'
FROM
BACKUP_DB_CONS B
JOIN PROD_DB_CONS P ON ( B.TABLE_NAME = P.TABLE_NAME
AND B.CONS_COLUMNS = P.CONS_COLUMNS );
- Etapa 4
Copie todos os comandos e execute todos eles no DB de produção .
Felicidades!!