বিভিন্ন চরিত্রের সেটগুলির কারণে ওরাকল আমদানি সমস্যা


11

আমি ওরাকল 11 এক্সই-তে একটি ওরাকল 11 এক্সপোর্ট আমদানি করার চেষ্টা করছি।

আমি নিম্নলিখিত বার্তা পেতে:

WE8MSWIN1252 অক্ষর সেট এবং AL16UTF16 NCHAR অক্ষর সেট
আমদানি সার্ভার AL32UTF8 অক্ষর সেট ব্যবহার করে (সম্ভাব্য অক্ষর রূপান্তর) এক্সইএইফিলারহাফ্ট আমদানিতে আমদানি করে

কোনও ধারণা, কীভাবে আমি এই ডাম্পটিকে ওরাকল 11 এক্সই-তে আমদানি করতে পারি?

সম্পাদনা:

একটি টেবিল দেওয়া

CREATE TABLE BDATA.Artikel(
    Key                   VARCHAR2(3)  NOT NULL,
    Name                  VARCHAR2(60) NOT NULL,
    Abkuerzung            VARCHAR2(5)  NOT NULL
);

আমি এর মতো ত্রুটি পেয়েছি

IMP-00019: row rejected due to ORACLE error 12899
IMP-00003: ORACLE error 12899 encountered
ORA-12899: value too large for column "BDATA"."ARTIKEL"."ABKUERZUNG" (actual: 6, maximum: 5)
Column 1 ABL
Column 2 Aufbewahrungslösung
Column 3 AfbLö

কিছু সারি আমদানি থেকে অনুপস্থিত।

উত্তর:


8

আপনি যদি টেবিলটি তৈরি করতে ব্যবহার করছেন এমন আসল ডিডিএলটি আপনি NLS_LENGTH_SEMANTICS পরামিতি ব্যবহার করতে পারেন । আপনি যদি BYTE- র ডিফল্টের পরিবর্তে CHAR এ সেট করেন তবে একটি VitcAR2 (5) 5 বাইটের পরিবর্তে ডাটাবেস অক্ষর সেট (সম্ভাব্য 20 বাইট পর্যন্ত) 5 অক্ষর সংরক্ষণ করার জন্য পর্যাপ্ত স্থান বরাদ্দ করা হবে (যা কেবল 1 অক্ষরের অনুমতি দিতে পারে )।

দুর্ভাগ্যক্রমে, NLS_LENGTH_SEMANTICSআপনি যদি টেবিলটি তৈরি করতে আমদানি প্রক্রিয়াটির উপর নির্ভর করে থাকেন তবে সম্ভবত পরিবর্তনটি মারাত্মকভাবে সহায়ক হবে না - ডাম্প ফাইলটি অন্তর্নিহিতভাবে CHAR বা BYTE কীওয়ার্ড যুক্ত করবে যাতে এটি আসলে বিবৃতিটি জারি করে

CREATE TABLE BDATA.Artikel(
    Key                   VARCHAR2(3 BYTE)  NOT NULL,
    Name                  VARCHAR2(60 BYTE) NOT NULL,
    Abkuerzung            VARCHAR2(5 BYTE)  NOT NULL
);

আমার কাছে তৈরি টেবিল স্ক্রিপ্ট রয়েছে এবং এটি আপনার প্রস্তাব অনুযায়ী পরিবর্তন করতে পারে। টেবিলগুলি ইতিমধ্যে তৈরি হওয়ার সময় যদি ইমপ কাজ করে, তবে সমস্ত ঠিক আছে।
bernd_k

@ বারেন্ড_কে - দুর্দান্ত তারপরে আপনি হয় ডিডিএল চালনার আগে NLS_LENGTH_SEMANTICS সেট করতে পারেন বা আপনি প্রতিটি VARCHAR2 কলাম ঘোষণায় CHAR যুক্ত করতে ডিডিএল সংশোধন করতে পারেন। আপনি যখন আমদানি করেন, আপনাকে কেবল এটি তৈরি টেবিল বিবৃতি ব্যর্থতা উপেক্ষা করতে হবে কারণ টেবিলগুলি ইতিমধ্যে উপস্থিত থাকবে।
জাস্টিন গুহ

আমি আমার টেবিলের সংজ্ঞা পরিবর্তন করেছি ... VARCHAR2 (60 CHAR) NULL নয় ... এবং IGNORE = Y এর সাথে IMP ব্যবহার করেছি এবং সতর্কতা সহ আমদানি সফলভাবে শেষ হয়েছে।
bernd_k

4

আপনি XE উপর অক্ষর সেট একটা চয়েস থাকে না তাই আপনি ডাটাবেসের আপনার দ্বারা আমদানি করার চেষ্টা করছেন অনুসারে এটি পরিবর্তন করতে পারবে না। রফতানির আগে উত্স ডাটাবেস স্থানান্তরিত করা কি ব্যবহারিক হবে ?

আমদানিটি কাজ করা উচিত, তবে অক্ষর সেট রূপান্তরটির অর্থ অ-এসিআই অক্ষরযুক্ত কিছু পাঠ্য কলামগুলি আমদানির পরে একই দেখাবে না। এবং সারিগুলি যদি নতুন চরিত্রের সেটে খুব দীর্ঘ হয় তবে তা প্রত্যাখ্যান করা যাবে।

আপনার ক্ষেত্রে, আপনি ইউটিএফ 8 তে রূপান্তর করছেন, যার অর্থ একটি একক বাইট চরিত্রের 2 বা ( তাত্ত্বিকভাবে আরও বেশি ) রূপান্তরকালে বৃদ্ধি পাওয়া সম্ভব হবে । লক্ষ্য স্কিমা রফতানি বা সামঞ্জস্য করার আগে আপনাকে কলামের আকার বাড়াতে হবে এবং একটি পৃথক ধাপে ডেটা আমদানি করতে হবে। অন্যান্য সম্ভাব্য ডেটা কাটা সমস্যার জন্য এখানে দেখুন


আমার সম্পাদনা দেখুন। আমার একমাত্র আশা হ'ল প্রথমে বর্ধিত প্রস্থ সহ সারণীগুলি তৈরি করা এবং আমদানি থেকে তৈরি টেবিলগুলি উপেক্ষা করে ডেটা আমদানির চেয়ে import
bernd_k

আপনি ইম্পডিপি ব্যবহার করছেন? কীভাবে তা এখানে দেখুন
জ্যাক বলছেন topanswers.xyz

এখনও না, তবে শেখার জন্য সম্ভবত একটি ভাল সময়।
bernd_k

তবে নোট করুন যে ইম্পডিপি কেবল এক্সপিডিপি দিয়ে তৈরি রফতানির সাথেই ব্যবহার করা যেতে পারে
জ্যাক বলেছেন টপান্সওয়ার্স.অক্সিজ

2

সবচেয়ে সহজ উপায়: (শাটডাউন নেকেরেসারি) :

প্রথমে সিসড্ব্বা হিসাবে সংযুক্ত করুন:

sqplus / as sysdba

এরপরে, নিম্নলিখিত স্ক্রিপ্টটি কার্যকর করুন:

alter system set nls_length_semantics=CHAR scope=both;
shutdown;
startup restrict;
alter database character set INTERNAL_USE WE8ISO8859P1;
shutdown;
startup;

এটি আমার জন্য একটি ওরাকল 12 সি স্ট্যান্ডার্ড টু সংস্করণে কাজ করেছে

থেকে নেওয়া: http://www.blogdelpibe.com/2015/05/como-solucionar-el-error-ora-12899.html


0

এটি আমার পক্ষে কাজ করেছে। এর পরিবর্তে:

imp u/p@db file=data.dmp

ব্যাশে এরকম কিছু চেষ্টা করুন:

imp u/p@db file=<(perl -pe'/^CREATE TABLE/&&s/(VARCHAR2\(\d+)\)/$1 CHAR)/g' data.dmp)

এর ফলে প্রতিটি পরিবর্তন col1 VARCHAR2(n)করতে col1 VARCHAR2(n CHAR)দিয়ে শুরু লাইনে CREATE TABLE। আপনি data.dmpযদি <(...)নিজের শেলটিতে সক্ষম না হন তবে এটির উপর চাপ দেওয়ার আগে আপনি পরিবর্তন করতে পারেন :

perl -i.bk -pe'/^CREATE TABLE/&&s/(VARCHAR2\(\d+)\)/$1 CHAR)/g' data.dmp

... তবে ব্যাশে এটি প্রয়োজনীয় নয় এবং রূপান্তর বা বিবৃত হিসাবে ব্যাকআপ তৈরির ক্ষেত্রে কিছু ভুল হতে পারে -i.bk

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.