Jag tror att det inte finns något direkt sätt att få de önskade namnen på begränsningarna och indexen, men ja, du kan uppnå det med lite manuellt arbete enligt följande.
Först och främst kan du ändra begränsningsnamnet med följande kommando:
alter table <table_name> rename constraint <constarint_name> to <new_constarint_name>;
På samma sätt kan du ändra indexnamnet med följande kommando:
ALTER INDEX <index_name> RENAME TO <new_index_name>;
I ditt fall behöver du något sätt att länka dåliga (begränsningar/index) namn med korrekta namn. och döp sedan om begränsningarna/indexen med rätt namn. För att uppnå det kan du prova följande steg. (Jag ger exempel för Constraints, du kan uppnå samma sak för index)
- Steg 1
Hämta begränsningsnamnen och deras data från produktions-DB använda följande fråga och skapa en tabell i Backup DB använda dessa uppgifter. (Du kan använda SQL Loader
eller External table
för det.) Ge namnet på denna tabell som 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;
- Steg 2
Skapa samma typ av tabell i backup DB använder följande fråga:
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;
- Steg 3
Kör följande fråga i Backup DB som kommer att generera en serie kommandon för att ändra namnet på alla begränsningar för produktions-DB
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 );
- Steg 4
Kopiera alla kommandon och kör alla i produktions-DB .
Skål!!