ডিটিএস আমদানি / এক্সপোর্ট উইজার্ড ব্যবহার করে ডেটা আমদানি করার সময় আমি কীভাবে এফকে সীমাবদ্ধতাগুলি মোকাবিলা করব?


16

আমি আমার প্রোডাকশন ডিবি থেকে আমার ডেভ ডিবিতে ডেপিটি অনুলিপি করতে এসকিউএল সার্ভার আমদানি ও রফতান উইজার্ডটি ব্যবহার করার চেষ্টা করছি তবে যখন আমি এটির ত্রুটিটি ব্যর্থ করি "ইনসার্ট স্টেটমেন্টটি বিদেশী কী বাধার সাথে দ্বন্দ্বপূর্ণ" আমার প্রচুর 40 টির বেশি টেবিল রয়েছে এফকে সীমাবদ্ধতার মধ্যে, ড্রপ সীমাবদ্ধতা না লিখে / কন্ট্র্যাট স্ক্রিপ্ট যুক্ত না করেই এর মোকাবিলার কিছু সহজ উপায় কি?

সম্পাদনা: আমি সবেমাত্র জানতে পেরেছি যে এসকিউএল সার্ভারের ওয়েব সংস্করণে, যা আমি চালাচ্ছি, ডিটিএস আপনাকে প্যাকেজগুলি সংরক্ষণ করতে দেবে না।

উত্তর:


28

এসকিউএলটিম.কম এ আমাকে এই সমাধানটি দেওয়া হয়েছিল:

ব্যবহার করুন:

 EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

তারপরে আপনার ডেটা আমদানি করুন

EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

এই পদ্ধতিটি ব্যবহার করে আমি কোনও সমস্যা ছাড়াই সমস্ত ডেটা আমদানি করতে সক্ষম হয়েছি।


1
sp_msforeachtable(এবং sp_MSForEachDb) অননুমোদিত এবং অসমর্থিত। আপনার এটি ব্যবহার করা / এড়ানো উচিত নয়। এটি টেবিলগুলি এড়িয়ে যেতে পারে !! > - @AaronBertrand থেকে এই পোস্টটিকে দেখতে পারবেন sqlblog.com/blogs/aaron_bertrand/archive/2010/12/29/... এবং এই কানেক্ট আইটেমটি - (মাইক্রোসফট ইঙ্গিত অভ্যস্ত যে, তারা এটা ঠিক) -> connect.microsoft.com/SQLServer / প্রতিক্রিয়া / বিশদ / 264677 /…
কিন শাহ

ডেটা রফতানির জন্য এফকে বাধাগ্রস্থ করার চেষ্টা করার জন্য আমার মস্তিস্ককে পেটানোর কয়েক ঘন্টা পরে আমার জন্য পুরোপুরি কাজ করেছিল।
লেভিনুইঞ্জ

অ্যাজুর এসকিউএল ভি 12 এ চলতে গিয়ে আমি ত্রুটি পেয়েছি "সঞ্চিত পদ্ধতি 'sp_msforeachtable' খুঁজে পাওয়া যায় নি।"
দাই

যাইহোক কাজ করে না: /
ডগলাস গ্যাসকেল

আপনি জীবন
রক্ষাকারী

5

আমি একটি সার্ভার থেকে আমার মেশিনে একটি ডাটাবেসের হুবহু অনুলিপি তৈরি করেছি যা আমি নিয়ন্ত্রণ করি না।

আমি এক জালিয়াতি , তবে আমি এটিই করেছি:

  1. সোর্স নিয়ন্ত্রণে থাকা আমার স্ক্রিপ্ট থেকে এমন ডিবি তৈরি করেছেন (ইঙ্গিত, ইঙ্গিত!) যদি আপনার কাছে স্ক্রিপ্ট না থাকে, আপনি সর্বদা Tasksবিকল্প ডিবি থেকে বিকল্পের মাধ্যমে এটি তৈরি করতে পারেন ।

  2. যদি কোনও ডেটা তৈরির সময় আপনার ডিবিতে স্বয়ংক্রিয়ভাবে প্রবেশ করানো হয় তবে একটি চালান DELETE FROM YourDB.dbo.tblYourTable

    • বিদেশী কীগুলি থাকা অবস্থায় আপনি ডেটা কেটে ফেলতে পারবেন না তাই আপনাকে ব্যবহার করতে হবে DELETE
  3. আপনার গন্তব্য সার্ভারে এটি চালান: USE YourDB; EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all';

  4. আপনার ডিডি - তে রাইট ক্লিক করুন Object ExplorerTasks-> ক্লিক করুনImport Data...

  5. উইজার্ডের প্রথম কয়েকটি পর্দা স্ব-বর্ণনামূলক।

  6. উপর Select Source Table and Viewsউইজার্ডের পর্দা, আপনার কপি চান যে টেবিল পাশে চেকবক্সটিতে ক্লিক করুন।

  7. সেই স্ক্রিনের প্রতিটি সারি (টেবিল) এর জন্য এটিতে ক্লিক করুন যাতে এটি হাইলাইট হয় এবং তারপরে ক্লিক করুন Edit Mappings

  8. প্রতিটি সারি (সারণী) জন্য, ক্লিক / চেক Append rows to the destination tableএবং Enable identity insert

    • আপনি যদি Delete rows in destination tableএটি ক্লিক করেন তবে এটি ব্যর্থ হবে কারণ এটি কোনও DELETEআদেশ জারি করে না , এটি একটি কমান্ড জারি করে TRUNCATEযা এখনও আমাদের বিদেশী কীগুলির সাথে বিরোধযুক্ত কারণ পূর্ববর্তী থেকে TRUNCATEপরিচালিত নয় NOCHECK CONSTRAINT
  9. উইজার্ডের বাকী অংশটি ক্লিক করে ক্লিক করুন Finish

  10. ত্রুটিগুলির জন্য দেখুন ; সতর্কতাগুলি সম্ভবত উপেক্ষা করা ঠিক।

    • যদি ত্রুটিগুলি থাকে তবে Reportবোতামটি ক্লিক করুন এবং প্রতিবেদনটি দেখুন। একটি এবং Success, কী ছিল তা চেষ্টা করে দেখুন । কোথাও যে রিপোর্টে দাফন করা হয়েছে তার ত্রুটির মূল কারণ যা ছিল তা সম্ভবত আপনাকে ঠিক করতে হবে। তারপরে, আপনার সম্ভবত একটি করা দরকার । এখন আমদানি উইজার্ডের পিছনে বোতামটি ক্লিক করুন এবং যে টেবিলটি ছিল তা আনচেক করুন । বিজ্ঞাপনের পুনরাবৃত্তি করুন।ErrorStoppedDELETE FROM YourDB.dbo.theErrorTableSuccess
  11. আপনার গন্তব্য সার্ভারে এটি চালান: USE YourDB; EXEC sp_msforeachtable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all';

    • যদি ত্রুটিগুলি থাকে, ... আমি জানি না, তবে সেগুলি ঠিক করুন এবং আবার চেষ্টা করুন!
  12. হ্যাঁ! :)

আমাকে এই বিষয়টা খুঁজে বের করতে সহায়তা করার জন্য এসই নেটওয়ার্কে এই প্রশ্নের উত্তর এবং এর মত প্রশ্নের উত্তর দেওয়া প্রত্যেককে ধন্যবাদ।


আপনি জীবন রক্ষাকারী
টম গ্লেন

1
সিরিয়াসলি আপনাকে অনেক ধন্যবাদ, দূষিত ড্রাইভে ব্যাকআপ ছিল, ডিবি কোথাও অনুলিপি করতে পারেনি (i / o ত্রুটি)। একবারে কয়েকটি টেবিল ডেটা আমদানি করা আমাকে এর 99% পুনরুদ্ধার করতে সহায়তা করে।
টম গ্লেন

1
তুমি রক! আর একটি কমান্ড যা আমাকে সাহায্য করেছে: EXEC sp_msforeachtable 'থেকে মুছবেন? '; কোনও ত্রুটি ঘটলে সবকিছু মুছে ফেলা আইন। sp_msforeachtable স্ক্রিপ্ট এখানে gist.githubusercontent.com/metaskills/893599/raw/…
সানচিটোস

4

আমদানি উইজার্ডে, আপনি প্রথমে সারিগুলি মুছতে পারেন এবং যদি আপনার পরিচয় ক্ষেত্র থাকে তবে আপনি নীচের মতো পরিচয় সন্নিবেশ সক্ষম করতে পারবেন

এখানে চিত্র বর্ণনা লিখুন

আপনি যদি চেক সীমাবদ্ধতা অক্ষম করতে চান, তবে উইজার্ড যখন আপনাকে প্যাকেজটি সংরক্ষণ করতে বলবে, এটি সংরক্ষণ করুন এবং তারপরে সংযোগ ব্যবস্থাপককে নীচের মত সম্পাদনা করুন:

এখানে চিত্র বর্ণনা লিখুন

দ্রষ্টব্য: বিদেশী কীগুলি সংজ্ঞায়িত করার সময় আপনি টেবিলটি সফল করতে পারবেন না।


3

সীমাবদ্ধতাগুলি ফেলে দেবেন না।

উইজার্ডটি তৈরি করা এসএসআইএস প্যাকেজটি সংরক্ষণ করা উচিত, তারপরে এটি বিআইডিএস / এসএসডিটিতে সম্পাদনা করুন। আপনি যখন প্যাকেজটি সম্পাদনা করেন আপনি টেবিলগুলিতে প্রক্রিয়াকরণের অর্ডারটি নিয়ন্ত্রণ করতে সক্ষম হবেন তাই আপনি পিতামাতার টেবিলগুলি প্রক্রিয়া করতে পারেন তারপরে সমস্ত পিতামাতার সারণীগুলি সম্পন্ন হওয়ার পরে শিশু টেবিলগুলি প্রক্রিয়া করতে পারেন।


3
এটি সত্যই কার্যকর নয়, প্যাকেজটি পরিবর্তন করতে এখনই প্রায় এক ঘন্টা সময় লাগবে সবকিছু সঠিক ক্রমে রয়েছে তা নিশ্চিত করার জন্য, এবং তারপরেও আমি নিশ্চিত হতে পারি না। এটি ডিবি বাড়ার সাথে সাথে আরও জটিল হয়ে উঠবে এবং এটি প্রতিটি সময় করার জন্য, ধন্যবাদ নেই। এটি করার একটি সহজ উপায় থাকতে হবে।

1

এই জাতীয় সমস্যাগুলি আমাদের দেখায় যে এসকিউএল সার্ভার তৈরি করা লোকেরা আসলে তাদের পণ্যটি কখনও ব্যবহার করে নি। এটি এমন একটি উজ্জ্বল ভুল যে তারা অন্যকে কী সঠিকভাবে করতে ভুলে গিয়েছিল তা ভাবতে হবে (আমি অন্যান্য 30 টি ম্যাডেনডিং ইস্যুগুলির একটি তালিকা পেয়েছি যা অন্যান্য ডিবি যেমন করায় এই কাজটি করতে পেরেছিলাম আমি বাক্সটির; এটি সহ যে আমাদের প্রথম স্থানে এটি করার জন্য একটি লস উইজার্ডের প্রয়োজন রয়েছে [যদি আমি এই উইজার্ডের সাথে যোগাযোগ করতে এবং একই ডিবিতে প্রতিবার একই টেবিলগুলি গণনা করার জন্য অপেক্ষা করে সময় কাটিয়ে থাকি তবে ... আমি একটি সুন্দর ছুটির জন্য সময় চাই]]।

আমি খুব অলস এবং টাইপ করতে চাই না EXEC sp_msforeachtable ...দুবার প্রতিবার আমি এই কাজ। আমার চারপাশের কাজটি হ'ল প্রোডাকশন সার্ভারে সীমাবদ্ধতা ছেড়ে দেব সার্ভার থেকে সেগুলি সরিয়ে ফেলা। এটি ত্রুটিটি রোধ করবে তবে এই পদ্ধতিতে কয়েকটি খুব বড় বড় পার্শ্ব প্রতিক্রিয়া রয়েছে। প্রথমত, আপনি আর আপনার ডেভ সার্ভারে কেবলমাত্র পুরো ব্যাকআপটি পুনরুদ্ধার করতে সক্ষম হবেন না (যদি না আপনি সেগুলি আবার সরিয়ে দিয়ে ঠিক থাকেন)) দ্বিতীয়ত, এটি সর্বোত্তমভাবে কাজ করে যখন আপনি নিশ্চিত হন যে আপনার ডেটার গ্রাহকরাও এই সীমাবদ্ধতাগুলি প্রয়োগ করে (বা তাদের যত্ন নেবেন না)। আমার ক্ষেত্রে, আমাদের কেবলমাত্র একটি ভোক্তা রয়েছে (আমাদের ওয়েবসাইট) তাই আমরা সাইট কোডেও এই সীমাবদ্ধতাগুলি তৈরি করেছি (যেমন আমরা কোনও ব্যবহারকারী রেকর্ড মুছার আগে আমরা প্রথমে সেই ব্যবহারকারীর সমস্ত ফোন রেকর্ড মুছতে পারি)। হ্যাঁ, এটি মূলত প্রথম স্থানে প্রতিবন্ধকতার প্রয়োজনকে অগ্রাহ্য করে এবং আমার যে কাজটি করা দরকার তা দ্বিগুণ করে কিন্তু এটি আমাকে যাচাই করার সুযোগ দেয় যে আমার কোডটি ডিবিএমএস ভিত্তিক সীমাবদ্ধতাগুলির সাথে বা ছাড়াই কাজ করে (সত্য যে তারা এখনও ত্রুটিযুক্ত রয়েছে) সার্ভারটি কেবলমাত্র একটি आकस्मिक পরিকল্পনা হিসাবে)। আপনি এটিকে আমার ডিজাইনের একটি ত্রুটি বলতে পারেন তবে আমি এটির পরিবর্তে একটি ত্রুটিযুক্ত ডিবিএমএসের জন্য একটি কার্যকরী কল বলব। যে কোনও হারে, এমএসএসকিউএল থেকে অন্য কোথাও এটি করা আরও দ্রুত এবং সহজ, কারণ এটি নিজের ডিজাইনের সাথে লড়াই করতে অক্ষম।


0

আমি মনে করি আপনি ব্যাকআপ করতে পারবেন না এবং উত্পাদন সার্ভার থেকে পুনরুদ্ধার করতে পারবেন কারণ এটি একটি গুরুত্বপূর্ণ ডেটা। ঠিক আছে যথাযথ অধিকার ব্যতীত এটি আরও জটিল হয়ে পড়ে। তবে আপনার যদি ডিবি ব্যাকআপ এন ডান পুনরুদ্ধার করা থাকে তবে আপনি এটি সম্পাদন করতে পারেন।

অন্যথায়, আমি যেভাবে প্রস্তাব দিই তা হ'ল আপনার সমস্ত সীমাবদ্ধতা এবং সূচকগুলি বাদ দেওয়া এবং তারপরে আবার ডেটা আমদানি করা বা রফতানি হয়ে গেলে সেগুলি আবার যুক্ত করা।

সঠিক উত্তর নয় তবে এটি দ্রুত প্রক্রিয়া করবে।


ধন্যবাদ, তবে আমি সুনির্দিষ্টভাবে বলেছি যে আমি কোনও ড্রপ / সীমাবদ্ধ স্ক্রিপ্ট তৈরি করতে চাই না।

0

শুধু এই বিষয় পড়ুন। এটি একটি পুরানো পোস্ট তবে ভবিষ্যতে লোকেরা এটি পড়তে সহায়তা করার জন্য আমি এখানে যা করেছি।

আমার ক্ষেত্রে আমি একটি খালি অভিন্ন টেবিলে আমদানি করতে চেয়েছিলাম। ম্যাপিং সম্পাদনা করার সময়, আমি <ignore>প্রাথমিক কীটির জন্য নির্বাচন করি । আমার সমস্ত সামগ্রী সুন্দরভাবে স্বয়ংক্রিয়ভাবে যুক্ত হচ্ছে।

আশা করি এটি কাউকে সাহায্য করবে


1
বিদেশী কীগুলির সাহায্যে প্রাথমিক কীটি উপেক্ষা করবেন?
dezso

আমার ক্ষেত্রে হ্যাঁ যেহেতু আমি আসলে একটি টেবিলের নকল করছি। সুতরাং আমি একই প্রাথমিক কী দিয়ে শেষ করেছি। সুতরাং আমার টেবিলের দিকে ইঙ্গিত করা বিদেশী কীগুলি এখনও সঠিক প্রবেশের সাথে সামঞ্জস্য করছে
গ্রেগ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.