Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak skopiować lub zaktualizować indeksy i ograniczenia tabel z innej bazy danych?

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:

>CREATE TABLE BACKUP_DB_CONS ASSELECT C.TABLE_NAME, C.CONSTRAINT_NAME, C.CONSTRAINT_TYPE, LITAGG(CC.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY COLUMN_NAME) CONS_COLUMNSFROM USER_CONSTRAINTS C.CONSTRAINTS C.COLUMN_NAME. =CC.CONSTRAINT_NAME )GROUP WG C.TABLE_NAME, C.CONSTRAINT_NAME, C.CONSTRAINT_TYPE;
  • 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!!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Generuj i wstawiaj duże pliki CLOB (1 MB) za pomocą SQL*Plus

  2. ORA-28001:hasło wygasło, nie można naprawić

  3. Jak mogę ograniczyć liczbę wierszy zwracanych przez zapytanie Oracle po złożeniu zamówienia?

  4. Błąd Oracle Apex 20.1:Błąd przetwarzania walidacji

  5. Który sterownik OJDBC dla Java 6?