Tôi nghĩ rằng không có cách nào trực tiếp để có được tên mong muốn của các ràng buộc và Chỉ mục, nhưng có, bạn có thể đạt được nó với một chút thao tác thủ công như sau.
Trước hết, bạn có thể thay đổi tên ràng buộc bằng lệnh sau:
alter table <table_name> rename constraint <constarint_name> to <new_constarint_name>;
Theo cách tương tự, bạn có thể thay đổi tên chỉ mục bằng lệnh sau:
ALTER INDEX <index_name> RENAME TO <new_index_name>;
Trong trường hợp của bạn, bạn cần một số cách để liên kết tên (ràng buộc / chỉ mục) xấu với tên chính xác. và sau đó đổi tên các ràng buộc / Chỉ mục bằng tên chính xác. Để đạt được nó, bạn có thể thử các bước sau. (Tôi đang đưa ra ví dụ cho các Ràng buộc, bạn có thể đạt được điều tương tự cho các chỉ mục)
- Bước 1
Nhận tên ràng buộc và dữ liệu của chúng từ production DB bằng cách sử dụng truy vấn sau và tạo một bảng trong Dự phòng DB sử dụng dữ liệu đó. (Bạn có thể sử dụng SQL Loader
hoặc External table
cho nó.) Đặt tên của bảng này là 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;
- Bước 2
Tạo cùng một loại bảng trong DB dự phòng sử dụng truy vấn sau:
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;
- Bước 3
Thực thi truy vấn sau trong Dự phòng DB sẽ tạo ra một loạt các lệnh để thay đổi tên của tất cả các ràng buộc của sản xuất 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 );
- Bước 4
Sao chép tất cả các lệnh và thực thi tất cả chúng trong production DB .
Chúc mừng !!