ডেটা মাইগ্রেশন পরিকল্পনার জন্য আপনার কর্মপ্রবাহ কী?


23

একটি সফ্টওয়্যার বিকাশের প্রচেষ্টার শেষে আমাকে অনেকবার আনা হয়েছিল এবং "ঠিক আছে, আমরা এই নতুন কোডটি পেয়েছি এবং এর পরিবর্তনের জন্য টেবিলগুলির প্রয়োজন এবং স্থানান্তরিত করার জন্য ডেটা প্রয়োজন"।

প্রতিবারের মতো মনে হয় এটি একবারে বন্ধ, শুট-থেকে-হিপ, সেরা অনুমানের দৃশ্য। আমি মনে করি এটি ডিবিএ হিসাবে আমার সবচেয়ে দুর্বল দক্ষতা set

আমি ডেটা মাইগ্রেশন কাছে আসা, পরিচালনা ও পরীক্ষার জন্য কিছু নিদর্শনগুলিতে যেতে চাই ।

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

উত্তর:


14

যতবার আমি এটি করেছি, আমরা দুটি পাসের জন্য গিয়েছিলাম ...

  1. একটি স্ন্যাপশট নিন এবং অন্য সার্ভারে কাজ করে, মাইগ্রেশনের জন্য কী করতে হবে তা নির্ধারণ করতে এটি ব্যবহার করুন এবং এটি স্ক্রিপ্ট করুন।
  2. স্ক্রিপ্টটি হাতে পাওয়ার পরে, স্ন্যাপশপটি পরীক্ষা সিস্টেমে পুনরুদ্ধার করা হবে এবং এটি প্রয়োজনীয় সময়ের মধ্যে চলবে কিনা তা দেখার সময় এসেছে, বা এটি না করা পর্যন্ত এটি সংশোধন ও সংশোধন করা হবে।
  3. স্টেকহোল্ডারদের সাইন আপ করতে বলুন যে টেস্ট সিস্টেমের ডেটাতে কোনও কিছুই ভুল দেখায় না।

তারপরে, সপ্তাহান্তে আপনার একটি নির্ধারিত আউটেজ রয়েছে:

  1. শুক্রবার রাতে, ডাটাবেস ব্যবহার করা সিস্টেমগুলি নীচে আনা হয়, একটি সম্পূর্ণ ঠান্ডা ব্যাকআপ তৈরি করা হয়, এবং স্ক্রিপ্টগুলি স্থানান্তর / পরিবর্তন করতে / ডেটা যা-ই হোক না কেন চালানো হয়
  2. সিস্টেমগুলি কিছু ব্যক্তিগত ঠিকানার অধীনে বা কোনওভাবে সেট আপ করা হয় যাতে এটি কারও জন্যই খোলা থাকে না তবে গ্রহণযোগ্যতা পরীক্ষার জন্য স্টেকহোল্ডারদের
  3. যদি স্টেকহোল্ডাররা অনুমোদিত হয়, সিস্টেমটি অনলাইনে রেখে জনসাধারণকে প্রকাশ করেছে; যদি তা না হয় তবে শুক্রবার রাতে তৈরি ব্যাকআপ থেকে ডাটাবেসটি পুনরুদ্ধার করা হবে এবং আপনি আবার প্রক্রিয়া শুরু করবেন।

আমাদের সময়সূচির সাথে, ডাটাবেস ভাওয়াদের সাধারণত ব্যাকআপ ও মাইগ্রেশন স্ক্রিপ্টগুলি চালানোর জন্য শুক্রবার সন্ধ্যা 6 টা থেকে শনিবার সকাল দশটা পর্যন্ত ছিল, সুতরাং আমাদের লক্ষ্য ছিল যে তারা 8 ঘন্টা (যেটির 6 টি ব্যাকআপ ছিল) এর অধীনে চলত, তাই আমরা ' এটি স্টেকহোল্ডারদের কাছে প্রকাশের আগে আমাদের পরীক্ষা ও সংশোধনের জন্য কিছু সময় থাকে।

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

ওহ, এবং অবশ্যই ... গ্রহণযোগ্যতা পরীক্ষার যে কোনও একটির মধ্যে যদি কারওর পরিবর্তন ঘটেছিল এবং আমরা একটি পরিবর্তন করেছি, এর অর্থ দাঁড়ায় যে সমস্ত স্টেকহোল্ডারের সাইন-অফগুলি বাতিল করা হয়েছিল এবং তাদের পুনরায় পরীক্ষা করতে হয়েছিল ... তাই আমরা এগুলি একবারে প্রয়োগ না করে ইস্যুগুলি সন্ধানের জন্য এবং ব্যাচ হিসাবে কোনও সংশোধন চালানোর জন্য তাদের সমস্ত সময় দেওয়ার চেষ্টা করব।

ভাগ্যক্রমে, আমি কেবল একবারই এমন পরিস্থিতিতে পড়েছি যেখানে আমাদের উল্লেখযোগ্য ডাউনটাইম থাকতে পারে না, আমি যে সিটেমগুলি স্থানান্তরিত করছিলাম সেগুলি স্ক্রিপ্ট থেকে খাওয়ানো হয়েছিল, ব্যবহারকারী ইনপুট নয়, তাই আমার কেবল দুটি সমান্তরাল সিস্টেম চলতে পারে এবং সেগুলি সরিয়ে নিতে পারি could যখন জিনিসগুলি সাইন অফ হয়ে গেছে। (কেবল একবারই সমস্যা হয়েছিল, যখন আমার বস জোর দিয়েছিলেন যে আমরা একটি সম্পূর্ণ ব্যাকআপ নেব, বুঝতে পারছি না যে পুরো জিনিসটি এখনও অন্য আইপি-তে অনলাইনে চলছে ... সুতরাং একটি 5 মিনিটের আউটেজ কী হওয়া উচিত? খারাপ দিন 5 ঘন্টা বিভ্রাট হয়ে ওঠে।)


6

এটি সমস্ত ডেটাবেস সমর্থন করে এমন হার্ডওয়ারের পাওয়ার এবং সিস্টেমের সহজলভ্যতার বিষয়ে চুক্তিগুলির তুলনায় ডেটার পরিমাণের উপর নির্ভর করে। আপনার কি কিছুটা ডাউনটাইম আছে নাকি এটি সব অনলাইনে করা উচিত? যতটা সম্ভব পুরানো সারিগুলি মুছে ফেলা, ডেটা পরিষ্কার করা শুরু করুন। এটি নিজেই একটি প্রকল্প। যদি ডেটা পরিষ্কার এবং মূল্যবান হয় তবে ব্যবহারকারীকে ডাউনটাইম সম্পর্কে সিদ্ধান্ত নিতে হবে। ডাউনটাইম উপলভ্য থাকলে এটি মোটামুটি সহজবোধ্য, যদি তাদের পরিচিত ট্রান্সফর্মেশন হয় যা আপডেট করা তথ্য গঠনের জন্য বিদ্যমান ডেটাতে প্রয়োগ করা উচিত। যদি কোনও - বা খুব অল্প - ডাউনটাইম অনুমতি দেয় তবে চ্যালেঞ্জ শুরু হয়। ওরাকল এটিকে কয়েকটি উপায়ে সমর্থন করে যেমন অনলাইন টেবিল পুনরায় সংজ্ঞা এবং - 11 গজে নতুন - সংস্করণ ভিত্তিক পুনঃনির্ধারণ। অনলাইন সারণী পুনঃনির্ধারণের সাহায্যে আপনি টেবিলগুলি তাদের নতুন ফর্ম নিতে প্রস্তুত করতে পারেন। অ্যাপ্লিকেশনটি টেবিলের পুরানো ফর্মটিতে চলাকালীন এটি করা যেতে পারে। যদি তারা সবাই প্রস্তুত থাকে তবে আপনি টেবিলের [নতুন] আকারে স্যুইচ করতে পারেন। এটি নতুন অ্যাপ্লিকেশন কোডটি প্রবর্তন করার মুহুর্ত হবে এবং একই সাথে নতুন অ্যাপ্লিকেশনটি স্থাপনের জন্য ডাউনটাইমের শুরুটি চিহ্নিত করবে। পুরানো dataতিহাসিক ডেটা লাইভ ডেটা মাইগ্রেট করার আগে এবং ওরাকল গোল্ডেন গেটের মতো সরঞ্জামগুলি ব্যবহার করে সিঙ্কে রাখা যেতে পারে। এই জাতীয় পরিস্থিতিতে আপনি কার্যকরভাবে একটি নতুন ডাটাবেস তৈরি করেন যা পুরানো ডাটাবেসের ভূমিকা গ্রহণ করে। কোনও টেবিল পরিবর্তনের প্রয়োজন না হলে সংস্করণ ভিত্তিক পুনঃনির্ধারণ আরও উপযুক্ত। বিবেচনার জন্য প্রচুর বিকল্প রয়েছে এবং আমি মনে করি যে একটি নিয়ম সর্বদা কার্যকর হয় তা দেওয়া শক্ত। এটি নতুন অ্যাপ্লিকেশন কোডটি প্রবর্তন করার মুহুর্ত হবে এবং একই সাথে নতুন অ্যাপ্লিকেশনটি স্থাপনের জন্য ডাউনটাইমের শুরুটি চিহ্নিত করবে। পুরানো dataতিহাসিক ডেটা লাইভ ডেটা মাইগ্রেট করার আগে এবং ওরাকল গোল্ডেন গেটের মতো সরঞ্জামগুলি ব্যবহার করে সিঙ্কে রাখা যেতে পারে। এই জাতীয় পরিস্থিতিতে আপনি কার্যকরভাবে একটি নতুন ডাটাবেস তৈরি করেন যা পুরানো ডাটাবেসের ভূমিকা গ্রহণ করে। কোনও টেবিল পরিবর্তনের প্রয়োজন না হলে সংস্করণ ভিত্তিক পুনঃনির্ধারণ আরও উপযুক্ত। বিবেচনার জন্য প্রচুর বিকল্প রয়েছে এবং আমি মনে করি যে একটি নিয়ম সর্বদা কার্যকর হয় তা দেওয়া শক্ত। এটি নতুন অ্যাপ্লিকেশন কোডটি প্রবর্তন করার মুহুর্ত হবে এবং একই সাথে নতুন অ্যাপ্লিকেশনটি স্থাপনের জন্য ডাউনটাইমের শুরুটি চিহ্নিত করবে। পুরানো dataতিহাসিক ডেটা লাইভ ডেটা মাইগ্রেট করার আগে এবং ওরাকল গোল্ডেন গেটের মতো সরঞ্জামগুলি ব্যবহার করে সিঙ্কে রাখা যেতে পারে। এই জাতীয় পরিস্থিতিতে আপনি কার্যকরভাবে একটি নতুন ডাটাবেস তৈরি করেন যা পুরানো ডাটাবেসের ভূমিকা গ্রহণ করে। কোনও টেবিল পরিবর্তনের প্রয়োজন না হলে সংস্করণ ভিত্তিক পুনঃনির্ধারণ আরও উপযুক্ত। বিবেচনার জন্য প্রচুর বিকল্প রয়েছে এবং আমি মনে করি যে একটি নিয়ম সর্বদা কার্যকর হয় তা দেওয়া শক্ত। পুরানো dataতিহাসিক ডেটা লাইভ ডেটা মাইগ্রেট করার আগে এবং ওরাকল গোল্ডেন গেটের মতো সরঞ্জামগুলি ব্যবহার করে সিঙ্কে রাখা যেতে পারে। এই জাতীয় পরিস্থিতিতে আপনি কার্যকরভাবে একটি নতুন ডাটাবেস তৈরি করেন যা পুরানো ডাটাবেসের ভূমিকা গ্রহণ করে। কোনও টেবিল পরিবর্তনের প্রয়োজন না হলে সংস্করণ ভিত্তিক পুনঃনির্ধারণ আরও উপযুক্ত। বিবেচনার জন্য প্রচুর বিকল্প রয়েছে এবং আমি মনে করি যে একটি নিয়ম সর্বদা কার্যকর হয় তা দেওয়া শক্ত। পুরানো dataতিহাসিক ডেটা লাইভ ডেটা মাইগ্রেট করার আগে এবং ওরাকল গোল্ডেন গেটের মতো সরঞ্জামগুলি ব্যবহার করে সিঙ্কে রাখা যেতে পারে। এই জাতীয় পরিস্থিতিতে আপনি কার্যকরভাবে একটি নতুন ডাটাবেস তৈরি করেন যা পুরানো ডাটাবেসের ভূমিকা গ্রহণ করে। কোনও টেবিল পরিবর্তনের প্রয়োজন না হলে সংস্করণ ভিত্তিক পুনঃনির্ধারণ আরও উপযুক্ত। বিবেচনার জন্য প্রচুর বিকল্প রয়েছে এবং আমি মনে করি যে একটি নিয়ম সর্বদা কার্যকর হয় তা দেওয়া শক্ত।

এটি একটি আকর্ষণীয় বিষয়, রোনাল্ড।


5

এখনও পর্যন্ত ভাল উত্তর। আমি বিবেচনার জন্য আরও কয়েকটি পয়েন্ট যুক্ত করব।

প্রথমত, যখন আপনি সাধারণ এসকিউএল ডিএমএল দিয়ে আপনার স্থানান্তর করতে পারেন, সমস্ত সারি সফলভাবে প্রক্রিয়া করা হয়েছে তা নিশ্চিত করতে আপনি আপনার এসকিউএল ইঞ্জিনের উপর নির্ভর করে বেশিরভাগ ক্ষেত্রেই পারেন। আমি মাইগ্রেশনে জড়িত ছিলাম, যেখানে কিছু স্থানান্তর কিছুটা জটিল ছিল - সেখানে ডেটা নতুন কাঠামোয় স্থানান্তরিত হওয়ায় প্রকৃত ডেটা ট্রান্সফর্মেশন ছিল। এই ক্ষেত্রে, আপনার কাছে এমন একটি প্রক্রিয়া থাকা জরুরি যা নিম্নলিখিত আইটেমগুলি পরিচালনা করতে পারে:

  • প্রক্রিয়াজাত রেকর্ডগুলিতে রেকর্ড গণনা করুন।
  • রূপান্তরকালে ত্রুটিগুলি সনাক্ত করুন এবং তাদের সাথে এমনভাবে মোকাবেলা করুন যা রূপান্তরকে অবিরত রাখতে দেয় এবং আপনি যখন কোনও সমাধান চিহ্নিত করেন তখন "খারাপ" রেকর্ডগুলির পুনরায় প্রক্রিয়া করার অনুমতি দেয়।
  • রেকর্ড গণনায় "খারাপ" রেকর্ড অন্তর্ভুক্ত করা উচিত - যেমন, রেকর্ডস ইন = রেকর্ডস-আউট-ভাল + খারাপ-রেকর্ডস
  • যদি আপনার রূপান্তর রেকর্ডের গণনায় পরিবর্তন হয় (উদাহরণস্বরূপ, একটি ইনপুট রেকর্ড একাধিক আউটপুট রেকর্ড হয়ে যায়) আপনার আউটপুট রেকর্ডগুলির সংখ্যার পূর্বাভাস দেওয়ার উপায় রয়েছে এবং তারপরে আপনার ফলাফলগুলি সেই গণনার বিরুদ্ধে পরীক্ষা করুন test

অন্য যে বিষয়টি আমি যুক্ত করব তা হ'ল / যখন জিনিসগুলি পরিকল্পনা অনুসারে না যায় আপনি কী করতে যাচ্ছেন তার জন্য একটি পরিকল্পনা রাখা গুরুত্বপূর্ণ। এটি সত্যিই সামগ্রিকভাবে মোতায়েনের একটি ফাংশন, তবে এটি এমন একটি যা প্রায়শই যথেষ্ট পরিমাণে উদ্ভাসিত বলে মনে হয় যে আমি মনে করি এটি উল্লেখ করার মতো।


4

এটি কীভাবে করা যায় তার একটি ওভারভিউ

দিয়ে শুরু

  • আপনার কাছে পরীক্ষার / ইউএটি / যা কিছু "ওয়ার্কিং ডিবি" রয়েছে তার পরে "পরে" ডাটাবেস রয়েছে
  • উত্পাদনে আপনার কাছে "পূর্বে" ডাটাবেস রয়েছে। সুতরাং কোথাও উত্পাদনের অনুলিপি তৈরি করতে এটি ব্যবহার করুন = "রেফারেন্স ডিবি"। এবং অন্যটি "স্ক্রিপ্ট পরীক্ষা ডিবি" হিসাবে
  • আমি এও আশা করি যে আপনার ALTER গুলি ইত্যাদির সাথে আপনার কাছে একগুচ্ছ বিকাশ স্ক্রিপ্ট রয়েছে। যদি তা হয় তবে আপনার বিকাশের স্ক্রিপ্ট সহ উত্পাদনের আর একটি অনুলিপি প্রয়োগ করা হয়েছে, পরিষ্কার এবং ক্রমে দরকারী = "ডিবি পরিবর্তন করুন"

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

এখন,

  • "রেফারেন্স" এবং "পরিবর্তন" এর মধ্যে তুলনা করে সরঞ্জামগুলি ব্যবহার করে পরিবর্তন এবং রোলব্যাক স্ক্রিপ্ট তৈরি করুন
  • পরিবর্তন স্ক্রিপ্টটিকে "স্ক্রিপ্ট টেস্ট" এ প্রয়োগ করুন এবং "ওয়ার্কিং ডিবি" এর সাথে আবার তুলনা করুন
  • "স্ক্রিপ্ট পরীক্ষা" এ রোলব্যাক স্ক্রিপ্ট প্রয়োগ করুন এবং "এর সাথে তুলনা করুন" এবং "ওয়ার্কিং ডিবি" এর সাথে তুলনা করুন

এখন, আপনার কাছে নিরাপদ + পরীক্ষিত পরিবর্তন এবং যখনই প্রয়োগ করার জন্য রোলব্যাক স্ক্রিপ্ট রয়েছে।

এবং অবশ্যই আপনি কোনও পরিবর্তনের আগে ডাটাবেসটিকে ব্যাকআপ করে রাখেন কারণ পরিসংখ্যানগতভাবে বিষ্ঠা সর্বদা শেষ পর্যন্ত ঘটবে।

রেড গেট সরঞ্জামগুলি উত্স নিয়ন্ত্রণে থাকা কোনও ফোল্ডারের সাথেও তুলনা করতে পারে। তারপরে আমরা আসল পরিবর্তন স্ক্রিপ্টগুলিতে আলাদাভাবে আমাদের উত্স নিয়ন্ত্রণে ক্যাপচার করি।

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