Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara menyalin atau memperbarui indeks dan batasan tabel dari database yang berbeda?

Saya pikir tidak ada cara langsung untuk mendapatkan nama kendala dan Indeks yang diinginkan, Tapi ya, Anda dapat mencapainya dengan sedikit pekerjaan manual sebagai berikut.

Pertama-tama, Anda dapat mengubah nama kendala menggunakan perintah berikut:

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

Dengan cara yang sama, Anda dapat mengubah nama Indeks menggunakan perintah berikut:

ALTER INDEX <index_name> RENAME TO <new_index_name>;

Dalam kasus Anda, Anda memerlukan beberapa cara untuk menautkan nama yang buruk (kendala/Indeks) dengan nama yang benar. dan kemudian ganti nama kendala/Indeks dengan nama yang benar. Untuk mencapainya, Anda bisa mencoba langkah-langkah berikut. (Saya memberikan contoh untuk Kendala, Anda dapat mencapai hal yang sama untuk indeks)

  • Langkah 1

Dapatkan nama kendala dan datanya dari DB produksi menggunakan kueri berikut dan membuat satu tabel di Backup DB menggunakan data itu. (Anda dapat menggunakan SQL Loader atau External table untuk itu.) Beri nama tabel ini sebagai 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;
  • Langkah 2

Buat jenis tabel yang sama di DB cadangan menggunakan kueri berikut:

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

Jalankan kueri berikut di Backup DB yang akan menghasilkan serangkaian perintah untuk mengubah nama semua kendala produksi 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 );
  • Langkah 4

Salin semua perintah dan jalankan semuanya di DB produksi .

Semangat!!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PL/SQL Bagaimana cara mendapatkan X hari yang lalu dari Tanggal sebagai Tanggal?

  2. Pengelompokan ReadyStatement dengan pernyataan SQL yang berbeda

  3. Langkah-langkah untuk mengubah Kata Sandi Admin yang hilang atau terlupakan dari EBS WebLogic Domain R12.2

  4. APPL_TOP bertahap di Oracle Applications R12

  5. Memulai Pengembang Oracle SQL di MacOSX