Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

विभिन्न डेटाबेस से टेबल इंडेक्स और बाधाओं को कॉपी या अपडेट कैसे करें?

मुझे लगता है कि बाधाओं और अनुक्रमितों के वांछित नाम प्राप्त करने का कोई सीधा तरीका नहीं है, लेकिन हाँ आप इसे निम्नलिखित के रूप में थोड़े से मैन्युअल कार्य के साथ प्राप्त कर सकते हैं।

सबसे पहले, आप निम्न आदेश का उपयोग करके बाधा नाम बदल सकते हैं:

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

इसी तरह, आप निम्न कमांड का उपयोग करके इंडेक्स का नाम बदल सकते हैं:

ALTER INDEX <index_name> RENAME TO <new_index_name>;

आपके मामले में, आपको खराब (बाधाओं/अनुक्रमणिका) नामों को सही नामों से जोड़ने के लिए किसी तरह की आवश्यकता है। और फिर सही नाम के साथ बाधाओं/अनुक्रमणिका का नाम बदलें। इसे प्राप्त करने के लिए, आप निम्न चरणों का प्रयास कर सकते हैं। (मैं बाधाओं के लिए उदाहरण दे रहा हूं, आप इसे इंडेक्स के लिए प्राप्त कर सकते हैं)

  • चरण 1

बाधा नाम और उनका डेटा उत्पादन DB . से प्राप्त करें निम्न क्वेरी का उपयोग करके और बैकअप DB में एक तालिका बनाएं उस डेटा का उपयोग करना। (आप SQL Loader का उपयोग कर सकते हैं या External table इसके लिए।) इस तालिका का नाम 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;
  • चरण 2

बैकअप DB . में उसी प्रकार की तालिका बनाएं निम्नलिखित क्वेरी का उपयोग करना:

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;
  • चरण 3

बैकअप डीबी में निम्न क्वेरी निष्पादित करें जो उत्पादन डीबी की सभी बाधाओं के नाम को बदलने के लिए आदेशों की एक श्रृंखला उत्पन्न करेगा

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 );
  • चरण 4

सभी आदेशों को कॉपी करें और उन सभी को उत्पादन DB . में निष्पादित करें ।

चीयर्स!!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle क्लाउड इंफ्रास्ट्रक्चर में घटनाओं के साथ कार्य करना भाग 1:सेवा की मूल बातें

  2. SQL क्वेरी में संयोजित मान दिखाएं

  3. ओरेकल जूलियन डे ऑफ ईयर

  4. Oracle में SQL क्वेरी से लौटाए गए रिकॉर्ड को सीमित करना

  5. Oracle में to_char () में समय क्षेत्र विवरण प्रदर्शित करें