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!!