بسم الله الرحمن الرحيم
قبل oracle 8i، كانت عملية إلغاء عمود من جدول معين أمراً مستحيلاً، وربما سبب ذلك بعض المشاكل النسبية للمستخدمين لأن ذلك يضطرهم أحياناً لإعادة تكوين الجدول من جديد، أي إعادة تعريف الindexes و الconstraints أيضاً(كله من أجل عمود أو عمودين!!!! ) :eek:
أما في oracle 8i وما بعدها، فيمكنك إلغاء عمود بكل سهولة (بالنسبة لك طبعاً) باستخدام التعليمة التالية :
ALTER TABLE table_name DROP COLUMN column_name [CASCADE CONSTRAINTS] //1// [CHECKPOINT n] //2// [INVALIDATE] //3//
يضاف (1) في حال وجود تكاملات مرجعية(FK).
أما(2) فتضاف عندما ترغب في التقليل من استخدام ال UNDO SPACE ، و ذلك بعمل checkpoint كل n سطر.
أما (3) فإنها تكتب لجعل كل الobjects المتعلقة بهذا العمود (views, indexes,….) في حالة INVALID.
ملاحظة : أثناء تنفيذ التعليمة السابقة لا يمكن لأي مستخدم استخدام الجدول الذي يتم فيه حذف العمود،لأن الجدول يوضع في حالة INVALID حتى انهاء التنفبذ.
------------------------------------------------------------------------------
لنفترض كالعادة أنك تدير قاعدة بيانات ضخمة ، و قد طلب منك حذف أحد الأعمدة( أو أكثر) من الجداول، وفي نفس الوقت أنت لا تريد وضع المستخدمين في حالة انتظار ريثما تنتهي عملية الحذف التي ربما تأخذ فترة لا بأس بها.
توجد طريقة عملية جداً يمكنك اتباعها:
1- قم بوضع العمود في حالة (unused) كما يلي:
ALTER TABLE table_name SET UNUSED COLUMN col_name [CASCADE CONSTRAINTS] ;
هنا أصبح العمود في وضع المحذوف، أي أنه لا يمكنك أن ترى أي معلومات عن العمود سواء قمت بالاستعلام أو حتى لو استخدمت تعليمة DESC table_name !!!تذكر أن هذه العملية لا يمكن الرجوع عنها بعد تنفيذها.
2- الآن، و بعد أن يخف النشاط على قاعدة البيانات ( أي بعد نهاية الدوام يا شاطر) :cool: يمكنك حذف العمود فعلياً:
ALTER TABLE table_name DROP UNUSED COLUMNS [CHECKPOINT n] ;
و السلام.........:)