سؤال

أقوم ببعض الترحيل بالجملة لقاعدة بيانات Oracle كبيرة. تتضمن الخطوة الأولى من هذا إعادة تسمية حمولة كاملة من الجداول كتحضير لإسقاطها لاحقًا (لكنني أحتاج إلى الاحتفاظ بالبيانات فيها في الوقت الحالي). يجب إسقاط أي قيود مفتاح خارجي عليها - يجب ألا يتم توصيلها ببقية قاعدة البيانات على الإطلاق. إذا كنت أسقطها الآن ، يمكنني أن أتطابق مع قيود ، لكن إعادة تسمية ببساطة يغير القيود.

هل هناك طريقة يمكنني من خلالها إسقاط جميع القيود التي ستنخفض قيود التتالي دون إسقاط الطاولة نفسها؟

هل كانت مفيدة؟

المحلول

يمكنك القيام بذلك باستخدام SQL الديناميكي وقاموس البيانات:

begin
    for r in ( select table_name, constraint_name
               from user_constraints
               where constraint_type = 'R' )
    loop
        execute immediate 'alter table '|| r.table_name
                          ||' drop constraint '|| r.constraint_name;
    end loop;
end;

إذا كانت الجداول مملوكة لأكثر من مستخدم واحد ، فستحتاج إلى القيادة من DBA_Constraints وإدراج المالك في الإسقاط والبيان المنفذ. إذا كنت ترغب في لمس أقل من جميع الجداول ، أخشى أنك ستحتاج إلى تحديد القائمة في الفقرة ، ما لم يكن هناك بعض النمط لأسمائهم.

نصائح أخرى

يمكنك تعطيل/إعادة تمكين القيود دون إسقاطها. ألق نظرة على هذه المقالة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top