Myślę, że nie ma bezpośredniego sposobu na uzyskanie pożądanych nazw ograniczeń i indeksów, ale tak, można to osiągnąć przy odrobinie ręcznej pracy w następujący sposób.
Przede wszystkim możesz zmienić nazwę ograniczenia za pomocą następującego polecenia:
zmień tabelę zmień nazwę ograniczenia na ;
W ten sam sposób możesz zmienić nazwę indeksu za pomocą następującego polecenia:
ALTER INDEX ZMIEŃ NAZWĘ NA ;
W twoim przypadku potrzebujesz sposobu na powiązanie złych (ograniczeń/indeksów) nazw z poprawnymi nazwami. a następnie zmień nazwy ograniczeń/indeksów na poprawną nazwę. Aby to osiągnąć, możesz wypróbować następujące kroki. (Podaję przykład dla ograniczeń, to samo można osiągnąć dla indeksów)
- Krok 1
Uzyskaj nazwy ograniczeń i ich dane z produkcyjnej bazy danych używając następującego zapytania i utwórz jedną tabelę w Backup DB wykorzystując te dane. (Możesz użyć SQL Loader
lub Tabela zewnętrzna
za to.) Podaj nazwę tej tabeli jako PROD_DB_CONS
SELECT C.TABLE_NAME, C.CONSTRAINT_NAME, C.CONSTRAINT_TYPE, LITAGG(CC.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY COLUMN_NAME) CONS_COLUMNSFROM USER_CONSTRAINTS C JOIN USER_CONS_COLUMNS CC ON_NAME =CCCONSTRA. CONSTRAINT_NAME )GROUP WG C.TABLE_NAME, C.CONSTRAINT_NAME, C.CONSTRAINT_TYPE;
- Krok 2
Utwórz tabelę tego samego typu w kopii zapasowej bazy danych używając następującego zapytania:
- Krok 3
Wykonaj następujące zapytanie w Backup DB który wygeneruje serię poleceń zmieniających nazwy wszystkich ograniczeń produkcyjnych DB
WYBIERZ 'ZMIEŃ TABELĘ' || B.TABLE_NAME || ' ZMIEŃ NAZWĘ WIĄZANIA ' || P.CONSTRAINT_NAME || ' DO ' || B.CONSTRAINT_NAME || ';'Z BACKUP_DB_CONS B DOŁĄCZ DO PROD_DB_CONS P ON ( B.TABLE_NAME =P.TABLE_NAME AND B.CONS_COLUMNS =P.CONS_COLUMNS );
- Krok 4
Skopiuj wszystkie polecenia i wykonaj je wszystkie w produkcyjnej bazie danych .
Pozdrawiam!!