سؤال

لدي ملف بيانات كبير (متعدد غيغابايت) يتم تصديره من جدول Oracle. أريد استيراد هذه البيانات إلى مثيل Oracle آخر، ولكن أريد أن يكون اسم الجدول مختلفا من الجدول الأصلي. هل هذا ممكن؟ كيف؟

كل من أنظمة الاستيراد والتصدير هي Oracle 11G. يتضمن الجدول عمود Blob، إذا كان هذا يحدث فرقا.

شكرا!

تحديثات:

كانت الفكرة هنا هي تحديث جدول مع الحفاظ على التوقف على النظام الذي يستخدمه إلى الحد الأدنى. الحل (بناء على فنسنت malgrat.الإجابة و APC.التحديث) هو:

  1. على افتراض اسم جدولنا هو A
  2. جعل مخطط درجة الحرارة TEMP_SCHEMA
  3. استيراد بياناتنا إلى TEMP_SCHEMA.A
  4. CREATE REAL_SCHEMA.B AS SELECT * FROM TEMP_SCHEMA.A
  5. DROP TABLE REAL_SCHEMA.A إعادة تسمية REAL_SCHEMA.A ل REAL_SCHEMA.A_OLD
  6. إعادة تسمية REAL_SCHEMA.B ل REAL_SCHEMA.A
  7. DROP REAL_SCHEMA.A_OLD

وبهذه الطريقة، فإن التوقف هو فقط خلال الخطوات 4 و 5، كلاهما يجب أن يكون مستقلا عن حجم البيانات. سوف نشر تحديث هنا إذا كان هذا لا يعمل :-)

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

المحلول

أفترض أنك تريد استيراد الجدول في مخطط يستخدم فيه الاسم بالفعل. لا أعتقد أنه يمكنك تغيير اسم الجدول أثناء الاستيراد. ومع ذلك، يمكنك تغيير المخطط مع FROMUSER و TOUSER اختيار. سيتيح لك ذلك استيراد الجدول في مخطط آخر (مؤقت) آخر.

عند الانتهاء من نسخ الجدول إلى المخطط المستهدف مع CREATE TABLE AS SELECT. وبعد الوقت الذي ستستغرقه لنسخ الجدول سيكون ضئيلا مقارنة بالاستيراد لذلك لن يضيع هذا الكثير من الوقت. سوف تحتاج مرتين إلى مساحة القرص أثناء العملية.

تحديث

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

نصائح أخرى

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

ومع ذلك، أنت تقول أنك على 11G. لماذا لا تستخدم أداة DataPump المقدمة في 10G، والتي تحل محل الاستيراد والتصدير. لأنه في 11G، تقدم الأداة المساعدة خيار remap_table الذي يفعل بالضبط ما تريد.

تعديل

بعد قراءة التعليقات التي يضاف فيها المرجع إلى استجابة أخرى بينما كنت أكتب هذا، لا أعتقد أن خيار remap_table سيعمل في حالته. إنه فقط يعيد تجميع كائنات جديدة. إذا كان الجدول يحتوي على الاسم الأصلي موجود في المخطط الهدف فشل الاستيراد مع ORA-39151. آسف.

تحرير BIS.

بالنظر إلى الحل الذي اختار المرجع نفسه أخيرا (إسقاط الجدول الحالي، استبدل بجدول جديد) هناك حل مع مضخة البيانات، وهو استخدام TABLE_EXISTS_ACTION={TRUNCATE | REPLACE} بند. الاختيار REPLACE يسقط الجدول بينما TRUNCATE مجرد، إيه، اقتطاعها. في كلتا الحالتين، يتعين علينا القلق بشأن قيود النزاهة المرجانية، ولكن هذه مشكلة مع الحل المختار.

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

استخدم الخيار remap_table = exisitng_table_name: new_table_name في Impdp. هذا يعمل في 11gr2.

مجرد استيرادها إلى طاولة بنفس الاسم، ثم أعد تسمية الجدول.

إنشاء عرض كما select * from ... الجدول الذي تريد استيراده، مع مطابقة طريقة مطابقة اسم الجدول في التصدير. تجاهل الأخطاء عند الاستيراد.

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