sql >> Database teknologi >  >> RDS >> Oracle

Hvordan kopierer eller opdaterer man tabelindekser og begrænsninger fra forskellige databaser?

Jeg tror, ​​der ikke er nogen direkte måde at få de ønskede navne på begrænsningerne og indekserne på, men ja, du kan opnå det med lidt manuelt arbejde som følger.

Først og fremmest kan du ændre begrænsningsnavnet ved at bruge følgende kommando:

alter table <table_name> rename constraint <constarint_name> to <new_constarint_name>;

På samme måde kan du ændre indeksnavnet ved at bruge følgende kommando:

ALTER INDEX <index_name> RENAME TO <new_index_name>;

I dit tilfælde har du brug for en måde at forbinde dårlige (begrænsninger/indekser) navne med korrekte navne. og omdøb derefter begrænsningerne/indekserne med det korrekte navn. For at opnå det kan du prøve følgende trin. (Jeg giver et eksempel for Constraints, du kan opnå det samme for indekser)

  • Trin 1

Hent begrænsningsnavnene og deres data fra produktions-DB ved at bruge følgende forespørgsel og lav én tabel i Backup DB ved at bruge disse data. (Du kan bruge SQL Loader eller External table for det.) Angiv navnet på denne tabel 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;
  • Trin 2

Opret den samme type tabel i backup DB ved hjælp af følgende forespørgsel:

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;
  • Trin 3

Udfør følgende forespørgsel i Backup DB som vil generere en række kommandoer for at ændre navnet på alle begrænsningerne i 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 );
  • Trin 4

Kopier alle kommandoerne og udfør dem alle i produktions-DB .

Skål!!




  1. Afsendelse af variabler i URL'er i PHP med ekko

  2. Bloker procedure PL/SQL med Oracle

  3. Adgang nægtet fejl fra Java til MySQL

  4. Hvordan henter jeg JSON-data fra MySQL?