لماذا شار(1) تغيير شار(3) عند نسخ أكثر من أوراكل DBLINK?

StackOverflow https://stackoverflow.com/questions/253971

  •  05-07-2019
  •  | 
  •  

سؤال

لدي 2 قواعد البيانات ، أريد أن النقل موجود الجدول الذي يحتوي شار عمود من قاعدة بيانات إلى قاعدة البيانات B.

قاعدة بيانات أوراكل 9i, وقد ترميز WE8ISO8859P1 و يحتوي على طاولة "فو" مع ما لا يقل عن 1 عمود من نوع CHAR(1 شار).أنا لا يمكن تغيير الجدول على قاعدة البيانات لأنه جزء من طرف ثالث الإعداد.

قاعدة البيانات ب هو بلدي Oracle 10g قاعدة البيانات باستخدام ترميز AL32UTF8 لجميع أنواع من الأسباب ، وأريد أن نسخ فو في قاعدة البيانات هذه.

أنا إعداد ارتباط قاعدة البيانات من قاعدة البيانات ب إلى قاعدة البيانات A.ثم إصدار الأمر التالي:

*إنشاء الجدول شريط select * from #رابط#.فو;*

البيانات يحصل على نسخ أكثر من جيد ، ولكن عندما تحقق أنواع الأعمدة, أنا لاحظت أن شار(1 شار) تم تحويلها إلى شار(3 شار) و عند الاستعلام عن البيانات في قاعدة البيانات ب ، كل ذلك هو مبطن مع المساحات.

أعتقد في مكان ما تحت الماء, Oracle يخلط نفسه بايت و حرف.شار(1 بايت) مختلفة من شار(1 شار) الخ.لقد قرأت عن كل ذلك.

لماذا تغيير نوع البيانات إلى مبطن شار(3 شار) و كيف يمكنني إيقاف أوراكل من فعل هذا ؟

تحرير:يبدو أن لها علاقة مع بنقلها شار بين اثنين محددة patchlevels من أوراكل 9 و 10.يبدو انها حقا هو علة.حالما أكتشف وأنا بعد التحديث.وفي الوقت نفسه:لا تحاول أن تحرك شار بين قواعد البيانات مثل ما هو موضح.VARCHAR2 يعمل بشكل جيد (اختبار).

تحرير 2: وجدت الجواب و نشره هنا: لماذا شار(1) تغيير شار(3) عند نسخ أكثر من أوراكل DBLINK? سيئة للغاية وأنا لا يمكن أن تقبل بلدي الإجابة ، لأن حل مشكلتي.

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

المحلول

تحدث هذه المشكلة بسبب الطريقة التي أوراكل (mis)مقابض حرف التحويلات بين مختلف مجموعات الأحرف على أساس الأصلي طول العمود التعريف.عند تحديد حجم حرف نوع العمود في بايت, Oracle لا تعرف كيف تفعل التحويل و bodges ذلك. الحل هو دائما تحديد طول حرف اكتب في الشخصيات.

لمزيد من التوضيح في عمق المشكلة و كيف اكتشفت هذا إلقاء نظرة على http://www.rolfje.com/2008/11/04/transporting-oracle-chars-over-a-dblink/

نصائح أخرى

كنت بحاجة لمعرفة الفرق بين WE8ISO8859P1 NLS (الذي يخزن الشخصيات في بايت واحد) و AL32UTF8 الذي يخزن الحروف في ما يصل إلى أربعة بايت.سوف تحتاج إلى قضاء بعض الوقت نوعية مع أوراكل دعم اللغة القومي (NLS) الوثائق.أوراكل تلقائيا هل التحويل من خلال ارتباط قاعدة البيانات, في محاولة أن تكون مفيدة.

حاول التالية من SQL موجه:

ALTER SESSION NLS_NCHAR WE8ISO8859P1 
create table bar as select * from #link#.foo;

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

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