DB স্কিমা ট্র্যাকিং ট্র্যাকিংয়ের জন্য যন্ত্রসমূহ

ট্র্যাকিং এবং / অথবা স্বয়ংক্রিয়ভাবে ডিবি স্কিমা পরিবর্তন করার সর্বোত্তম উপায় কী? আমাদের টিম সংস্করণ নিয়ন্ত্রণের জন্য বিভাজন ব্যবহার করে এবং আমরা আমাদের কিছু কাজগুলিকে এইভাবে (একটি স্টেজিং সার্ভারে তৈরি করে, পরীক্ষার কোডটি একটি প্রোডাকশন সার্ভারে স্থাপন করে) চালানোর জন্য সক্ষম হয়েছি কিন্তু আমরা এখনও ম্যানুয়ালি ডাটাবেস আপডেট করছি আমি একটি সমাধান খুঁজতে বা তৈরি করতে চাই যা বিভিন্ন সার্ভারগুলির সাথে সার্ভার জুড়ে কার্যকরীভাবে কাজ করতে সহায়তা করে এবং একটি ব্যাক-এন্ড হিসাবে Subversion ব্যবহার করা চালিয়ে যেতে পারে যার মাধ্যমে কোড এবং ডিবি আপডেটগুলি বিভিন্ন সার্ভারগুলির মধ্যে ঢুকে পড়ে।

অনেক জনপ্রিয় সফ্টওয়্যার প্যাকেজগুলি স্বয়ংক্রিয় আপডেট স্ক্রিপ্টগুলি রয়েছে যা ডিবি সংস্করণ সনাক্ত করে প্রয়োজনীয় পরিবর্তনগুলি প্রয়োগ করে। এটি একটি বৃহত্তর স্কেল (একাধিক প্রকল্প এবং মাঝে মাঝে বহুবিধ পরিবেশ ও ভাষাগুলির মধ্যে) করতে এটি কি সেরা উপায়? যদি তাই হয়, তাহলে কি সেখানে বিদ্যমান কোনও কোড আছে যা প্রক্রিয়াটি সহজ করে দেয় বা এটা কি আমাদের নিজস্ব সমাধান রোলার জন্যই সর্বোত্তম? কেউ আগে অনুরূপ কিছু প্রয়োগ এবং subversion পোস্ট- commit হুক মধ্যে এটি একত্রিত, বা এটি একটি খারাপ ধারণা?

যদিও একাধিক প্ল্যাটফর্ম সাপোর্ট করে এমন একটি সমাধান অগ্রাধিকার পাবে, তবে আমাদের লিনাক্স / অ্যাপাচি / মাইএসকিউএল / পিএইচপি স্ট্যাককে অবশ্যই সমর্থন করতে হবে কারণ আমাদের কাজটি অধিকাংশই সেই প্ল্যাটফর্মে।

0

19 উত্তর

এটা কম প্রযুক্তি আছে, এবং সেখানে একটি ভাল সমাধান হতে পারে, কিন্তু আপনি শুধু একটি এসকিউএল স্ক্রিপ্ট আপনার স্কিম সংরক্ষণ করতে পারে যা ডাটাবেস তৈরি করতে চালানো যেতে পারে। আমি মনে করি আপনি এই স্ক্রিপ্ট উৎপন্ন করার জন্য একটি কমান্ড চালনা করতে পারেন, কিন্তু আমি কমান্ডটি দুর্ভাগ্যবশত জানি না।

তারপর, স্ক্রিপ্টটি সোর্স কন্ট্রোলের সাথে কোডটি সহ কাজ করে। যখন কোডের সাথে স্কিমাটি পরিবর্তন করা প্রয়োজন তখন স্ক্রিপ্টটি পরিবর্তিত স্কিমাটির জন্য কোড সহ চেক করা যাবে। তারপর, স্ক্রিপ্টের ডিফল্টটি স্কিমার পরিবর্তনের ডিফল্টকে নির্দেশ করে।

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

0
যোগ
হ্যাঁ, এটা ঠিক যে এখনই আমাদের জায়গায় আছে। দুর্ভাগ্যবশত আমাদের বর্তমান ডাটাবেসগুলি সংশোধন করার একটি সহজ উপায় দেয় না - মাইএসকিউডপে দ্বারা উত্পন্ন এসকিউএল স্ক্রিপ্ট অনুমান করে আপনি স্ক্র্যাচ থেকে টেবিল তৈরি করছেন (অথবা টেবিলের উপরে বিদ্যমান টেবিলের উপর লেখা)। এটি কিছুটা হাই-টেকের জন্য প্রয়োজন কারণ এটি ডাটাবেসের জন্য ALTER TABLE বিবৃতির ক্রম প্রয়োগ করা প্রয়োজন এবং সঠিকভাবে এটি করার জন্য ডাটাবেসের বর্তমান অবস্থা সম্পর্কে সচেতন হওয়া প্রয়োজন।
যোগ লেখক pix0r, উৎস

যদি আপনি সি # ব্যবহার করেন, তাহলে সাবসোননিক, একটি খুব দরকারী ORM টুলটি দেখুন, কিন্তু আপনার স্কিম এবং \ বা ডেটা পুনরায় তৈরি করার জন্য SQL স্ক্রিপ্ট তৈরি করে। এই স্ক্রিপ্ট তারপর উত্স নিয়ন্ত্রণ মধ্যে রাখা যাবে।

http://subsonicproject.com/

0
যোগ
আমার কাছে ভাল লাগে?
যোগ লেখক Dan, উৎস
সময় এই বিন্দু হিসাবে একটি মৃত URL বলে মনে হয়।
যোগ লেখক Mark Schultheiss, উৎস
শুধু subsonic ভালবাসা!
যোগ লেখক TheVillageIdiot, উৎস

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

এক রিলিজ থেকে পরবর্তীতে যাওয়ার জন্য, আপনাকে কেবল পরিবর্তন স্ক্রিপ্টগুলির সেট চালানো দরকার, এবং আপনার ডাটাবেস আপ-টু-ডেট, এবং আপনি এখনও আপনার সমস্ত ডেটা পেয়েছেন এটি সবচেয়ে সহজ পদ্ধতি নাও হতে পারে, তবে এটি স্পষ্টভাবে কার্যকর।

0
যোগ
কিভাবে সব পরিবর্তন আপনি স্ক্রিপ্ট না?
যোগ লেখক Smith, উৎস

আপনার স্কিমটিকে একটি ফাইলের মধ্যে ডাম্প করুন এবং সোর্স কন্ট্রোলে যুক্ত করুন। তারপর একটি সাধারণ পার্থক্য আপনাকে কি পরিবর্তন করা হবে তা দেখাবে।

0
যোগ
পার্থক্য দেখাবে যে এক কলাম চলে গেছে, অন্যরা যখন হাজির হয় (যদি তারা একই নাম না থাকে) এবং বেশিরভাগ সময়ই যথেষ্ট হয়। স্ক্রিপ্টিং প্রত্যেকটি স্কিম পরিবর্তনের জন্য একটি ভাল উপায়, অবশ্যই: ডুপ্লেএল এ একটি বিশেষ হুক দ্বারা পরিচালিত হয়, উদাহরণস্বরূপ।
যোগ লেখক deadprogrammer, উৎস
ডাম্প এসকিউএল হতে হবে, যেমন একটি mysqldump, ওরাকল এর ডাম্প বাইনারি হয়।
যোগ লেখক Osama Al-Maadeed, উৎস
স্কিমা বিভক্ত সঙ্গে একটি আরো মৌলিক সমস্যা আছে। আপনি কিভাবে একটি কলাম ড্রপ আলাদা করতে পারেন + একটি কলাম নাম থেকে যোগ করুন উত্তরটি সহজ: আপনি পারবেন না। এটি প্রকৃত স্কিমা পরিবর্তন ক্রিয়াকলাপগুলি রেকর্ড করার জন্য এটির কারণ।
যোগ লেখক psp, উৎস

আমরা একটি খুব সহজ কিন্তু কার্যকর কার্যকর সমাধান ব্যবহার করি।

নতুন ইনস্টলেশনের জন্য, আমরা একটি মেটাডেটা.sql ফাইল সংগ্রহ করি যা সমস্ত ডিবি স্কিমা ধারণ করে, তারপর বিল্ড প্রক্রিয়ার মধ্যে ডাটাবেস তৈরির জন্য আমরা এই ফাইলটি ব্যবহার করি।

আপডেটের জন্য, আমরা হার্ডডিকড সফ্টওয়্যারগুলির আপডেটগুলিকে জুড়েছি। আমরা এটি হার্ডকোড করে রেখেছি কারণ এটি সমস্যা হওয়ার আগে আমরা সমস্যার সমাধান পছন্দ করি না, এবং এই ধরনের জিনিসটি এতদূর একটি সমস্যা বলে প্রমাণিত হয়নি।

সুতরাং আমাদের সফ্টওয়্যার আমরা এই মত কিছু আছে:

নিবন্ধন আপগ্রেড (1, 'এলার টেবিল XX যোগ করুন XY CHAR (1) না';);

এই কোডটি যাচাই করবে যদি ডাটাবেস 1 সংস্করণে থাকে (যা স্বয়ংক্রিয়ভাবে তৈরি একটি সারণিতে সংরক্ষণ করা হয়), এটি পুরানো হলে, কমান্ডটি চালানো হয়।

রিপোসিটোরিতে মেটাডেটা.sql আপডেট করার জন্য আমরা স্থানীয়ভাবে এই আপগ্রেডগুলি চালাই এবং তারপর পূর্ণ ডাটাবেস মেটাডেটা এক্সট্রাক্ট করি।

শুধু তাই ঘটে যা প্রায়ই ঘটে থাকে, মেটাডেটা.sql জমা দেওয়ার কথা ভুলে যাওয়া, কিন্তু এটি একটি বড় সমস্যা নয় কারণ এটির সহজেই বিল্ড করা প্রক্রিয়া এবং একই জিনিস যা ঘটতে পারে তা হল নতুন ইনস্টল করার জন্য একটি পুরানো ডাটাবেস এবং এটি প্রথম ব্যবহারের উপর আপগ্রেড।

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

0
যোগ

আমি বিল্ড সংস্করণের পরে নামকরণ ফোল্ডারগুলি তৈরি করি এবং সেখানে আপগ্রেড এবং ডাউনগ্রেড স্ক্রিপ্টগুলি তৈরি করি। উদাহরণস্বরূপ, আপনি নিম্নলিখিত ফোল্ডারগুলি থাকতে পারে: 1.0.0, 1.0.1 এবং 1.0.2। প্রতিটি স্ক্রিপ্টটি আপনাকে সংস্করণগুলির মধ্যে আপনার ডাটাবেস আপগ্রেড করতে বা ডাউনগ্রেড করতে দেয়।

একটি ক্লায়েন্ট বা গ্রাহক আপনাকে 1.0.1 সংস্করণে সমস্যা মোকাবেলা করতে এবং আপনি 1.0.2 ব্যবহার করছেন, ডাটাবেসটি তার সংস্করণে ফিরিয়ে আনতে সমস্যা হবে না।

আপনার ডাটাবেসে, "স্কিমা" নামে একটি টেবিল তৈরি করুন যেখানে আপনি ডাটাবেসের বর্তমান সংস্করণটি রাখেন। তারপর আপনার জন্য আপনার ডাটাবেস আপগ্রেড বা ডাউনগ্রেড করতে পারেন একটি প্রোগ্রাম লেখা সহজ।

ঠিক যেমন জোয়ে বলেছে, আপনি যদি রেইলস ওয়ার্ল্ডে থাকেন তবে Migrations ব্যবহার করুন। :)

0
যোগ

মাইএসকিউএল এর জন্য টুপিটি একটি ফাংশন নামে পরিচিত ফাংশন যা আপনাকে ২ টি উপাত্তকে সিঙ্ক্রোনাইজ করতে দেয়। এটি এখন পর্যন্ত ব্যবহার করা সেরা টুল।

0
যোগ

IMHO মাইগ্রেশন একটি বিশাল সমস্যা আছে:

একটি সংস্করণ থেকে অন্য সংস্করণে আপগ্রেড করা ভাল কাজ করে, তবে যদি আপনার শত শত টেবিলে এবং পরিবর্তনগুলির একটি দীর্ঘ ইতিহাস আছে (যেমন আমরা করি) তাহলে একটি প্রদত্ত সংস্করণটি একটি চিরকালের সংস্করণ তৈরি করতে পারে।

বর্তমান সংস্করণ (শত শত গ্রাহকের ডেটাবেসগুলির জন্য) থেকে ভিত্তিরেখা পর্যন্ত Deltas এর পুরো ইতিহাস চালানো খুব বেশি সময় নিতে পারে।

0
যোগ

কে। স্কট অ্যালেন স্কিমা সংস্করণে একটি ভাল নিবন্ধ বা দুটি আছে, যা অন্যান্য উত্তরগুলিতে উল্লিখিত ক্রমবর্ধমান আপডেট স্ক্রিপ্ট / মাইগ্রেশন কনফিগারেশন ব্যবহার করে; http://odetocode.com/Blogs/scott/archive/ দেখুন 2008/01/31 / 11710.aspx ।

0
যোগ

আমরা আমাদের ডাটাবেস schemata 5 বিভিন্ন ইনস্টলেশনের (উত্পাদন, স্টেজিং এবং কয়েকটি উন্নয়ন ইনস্টলেশনের) মধ্যে সিঙ্ক্রোনাইজ রাখা, এবং সংস্করণ নিয়ন্ত্রণ ব্যাক আপ রাখতে bqwoord অনুরূপ ব্যবহার, এবং এটি বেশ ভাল কাজ করে। আমি একটি বিট প্রসারিত করব:


ডাটাবেস গঠন সমলয় করার জন্য, আমাদের একক স্ক্রিপ্ট, update.php এবং সংখ্যাযুক্ত ফাইলগুলি 1.sql, 2.sql, 3.sql ইত্যাদি সংখ্যার। স্ক্রিপ্টটি বর্তমান সংস্করণের সংখ্যা সংরক্ষণের জন্য একটি অতিরিক্ত টেবিলের ব্যবহার করে। ডাটাবেস। N.sql ফাইলগুলি হাত দ্বারা প্রস্তুত করা হয়, সংস্করণ থেকে (N-1) থেকে ডাটাবেসের সংস্করণ N এ যেতে হয়।

তারা সারণি যোগ করতে, কলাম যোগ করতে, পুরাতন থেকে নতুন কলাম বিন্যাসে ডেটা স্থানান্তর করতে, কলামটি ড্রপ করতে, "মাস্টার" ডেটা সারিগুলি যেমন ব্যবহারকারীর প্রকারগুলি ইত্যাদি অন্তর্ভুক্ত করতে ব্যবহার করা যেতে পারে। মূলত এটি কিছু করতে পারে এবং সঠিক ডেটা ব্যবহার করতে পারে মাইগ্রেশন স্ক্রিপ্টগুলি আপনি কখনও ডেটা হারাবেন না।

আপডেট স্ক্রিপ্ট এই মত কাজ করে:

  • Connect to the database.
  • Make a backup of the current database (because stuff will go wrong) [mysqldump].
  • Create bookkeeping table (called _meta) if it doesn't exist.
  • Read current VERSION from _meta table. Assume 0 if not found.
  • For all .sql files numbered higher than VERSION, execute them in order
  • If one of the files produced an error: roll back to the backup
  • Otherwise, update the version in the bookkeeping table to the highest .sql file executed.

সবকিছু সোর্স কন্ট্রোলে যায় এবং প্রত্যেকটি ইন্সটলেশনের একটি স্ক্রিপ্ট অ্যাক্টিভেশন (সঠিক ডাটাবেস পাসওয়ার্ড ইত্যাদি দিয়ে update.php আহ্বান) দিয়ে সর্বশেষ সংস্করণটি আপডেট করার একটি স্ক্রিপ্ট রয়েছে। আমরা এসভিএন আপডেট স্টেজিং এবং প্রোডাকশন এনভায়রনমেন্ট স্ক্রিপ্ট দ্বারা যা স্বয়ংক্রিয়ভাবে ডাটাবেস আপডেট স্ক্রিপ্ট কল করে, তাই একটি কোড আপডেট প্রয়োজনীয় ডাটাবেস আপডেটের সাথে আসে

আমরা স্ক্র্যাচ থেকে সম্পূর্ণ ডাটাবেস পুনরায় তৈরি করতে একই স্ক্রিপ্ট ব্যবহার করতে পারি; আমরা শুধু ডাটাবেস ড্রপ এবং পুনঃনির্ধারণ করি, তারপর স্ক্রিপ্টটি রান করুন যা ডাটাবেসের সম্পূর্ণভাবে পুনঃপ্রতিষ্ঠা করবে। স্বয়ংক্রিয় পরীক্ষার জন্য আমরা একটি খালি ডাটাবেস পোষ্ট করতে স্ক্রিপ্ট ব্যবহার করতে পারি।


এটি এই সিস্টেমটি স্থাপনের জন্য মাত্র কয়েক ঘন্টা সময় নিয়েছে, এটা ধারণাগতভাবে সহজ এবং প্রত্যেকের সংস্করণ সংখ্যা নির্ধারণ করা হয়, এবং এটি পরিবর্তন করার জন্য বা ম্যানুয়ালি সঞ্চালন না করেই ডেটাবেস ডিজাইনকে এগিয়ে ও উন্নীত করার ক্ষমতা অর্জনে অমূল্য হয়েছে। সব উপাত্ত উপর।

Beware when pasting queries from phpMyAdmin though! Those generated queries usually include the database name, which you definitely don't want since it will break your scripts! Something like CREATE TABLE mydb.newtable(...) will fail if the database on the system is not called mydb. We created a pre-comment SVN hook that will disallow .sql files containing the mydb string, which is a sure sign that someone copy/pasted from phpMyAdmin without proper checking.

0
যোগ
কিভাবে আপনি সংঘর্ষ হ্যান্ডেল? একাধিক ডেভেলপার ডিবি মধ্যে একই উপাদান পরিবর্তন, উদাহরণস্বরূপ একটি সঞ্চিত পদ্ধতি? আপনি একই শাখা এ একই কাজ করছেন যদি এটি ঘটতে পারে, অথবা আপনার দুটি উন্নয়ন লাইন যাচ্ছে (দুটি শাখা)
যোগ লেখক Asaf Mesika, উৎস
সংঘর্ষ খুব বিরল ছিল; সত্যিই ঘটেছে যে একমাত্র জিনিস দুটি মানুষ একই N.sql ফাইল তৈরি করার চেষ্টা করবে। অবশ্যই, প্রথম বিজয়ী এবং দ্বিতীয়টিটি পরবর্তী সর্বোচ্চ সংখ্যাকে পুনরায় নামকরণ করতে বাধ্য করে এবং আবার চেষ্টা করুন। আমরা একটি শাখায় ডাটাবেস সংস্করণ নেই, যদিও।
যোগ লেখক rix0rrr, উৎস

Db-deploy - বেশিরভাগ একটি জাভা টুল চেষ্টা করুন কিন্তু PHP এর সাথেও কাজ করে।

0
যোগ

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

আপনি পরিবর্তন করার জন্য প্রতিটি ডাটাবেসের জন্য, আপনি একটি নতুন স্থানান্তর লিখুন। মাইগ্রেশনগুলির মধ্যে সাধারণত দুটি পদ্ধতি থাকে: একটি "আপ" পদ্ধতি যা পরিবর্তনগুলি প্রয়োগ করা হয় এবং একটি "নিচে" পদ্ধতি যা পরিবর্তনগুলি পূর্বাবস্থায় আনা হয়। একটি কমান্ড ডাটাবেস আপ টু ডেট করে, এবং ডাটাবেসটি স্কিমা একটি নির্দিষ্ট সংস্করণে আনতে ব্যবহার করা যেতে পারে। রেলগুলির মধ্যে, মাইগ্রেশনগুলি প্রকল্পের ডিরেক্টরির মধ্যে তাদের নিজের ডিরেক্টরির মধ্যে রাখা হয় এবং সংস্করণ নিয়ন্ত্রণে অন্য কোনও প্রকল্প কোডের মত চেক করা হয়।

ruby on Rails migrations">This Oracle guide to Rails migrations covers migrations quite well.

অন্যান্য ভাষা ব্যবহার করে বিকাশকারীরা স্থানান্তরের দিকে তাকিয়ে আছে এবং তাদের নিজস্ব ভাষা-নির্দিষ্ট সংস্করণগুলি প্রয়োগ করেছে। আমি জানি Ruckusing , একটি পিএইচপি মাইগ্রেশন সিস্টেম যে Rails 'migrations পরে মডেল করা হয়; এটা আপনি যা খুঁজছেন জন্য হতে পারে।

0
যোগ
এটি এখন github এ অবস্থিত: github.com/ruckus/ruckusing-migrations
যোগ লেখক xXx, উৎস
FTW Ruckusing - আমরা আমাদের ডিবি সিস্টেম এটি অভিযোজিত এবং এটি সঙ্গে বেশ খুশি।
যোগ লেখক Piskvor, উৎস
Ruckusing উল্লেখ করার জন্য আপনাকে ধন্যবাদ
যোগ লেখক andho, উৎস

আমি বিভিন্ন প্রকল্পের জন্য ভিসুয়াল স্টুডিওতে নিম্নলিখিত ডাটাবেস প্রকল্প গঠন ব্যবহার করেছি এবং এটি বেশ ভাল কাজ করেছে:

ডেটাবেস

স্ক্রিপ্টগুলি পরিবর্তন করুন

     <�ব্লককোট>     

যে 0.PreDeploy.sql?

         

যে 1.SchemaChanges.sql?

         

যে 2.DataChanges.sql?

         

যে 3.Permissions.sql?

  </ব্লককোট>      

স্ক্রিপ্টগুলি তৈরি করুন

     <�ব্লককোট>     

যে Sprocs?

         

যে কার্যাবলী?

         

যে দেখেছে?

  </ব্লককোট>

Our build system then updates the ডেটাবেস from one version to the next by executing the scripts in the following order:

যে 1.PreDeploy.sql?

     

যে 2.SchemaChanges.sql?

     

স্ক্রিপ্ট ফোল্ডার তৈরি সামগ্রী

     

যে 2.DataChanges.sql?

     

যে 3.Permissions.sql?

প্রতিটি ডেভেলপার প্রতিটি ফাইলের শেষে তাদের কোড যুক্ত করে একটি নির্দিষ্ট বাগ / বৈশিষ্ট্য জন্য তাদের পরিবর্তন পরীক্ষা করে একবার একটি প্রধান সংস্করণ সম্পন্ন এবং উত্স নিয়ন্ত্রণ মধ্যে branched, পরিবর্তন স্ক্রিপ্ট ফোল্ডার মধ্যে। এসকিউএল ফাইল বিষয়বস্তু মুছে ফেলা হয়।

0
যোগ

আমার বর্তমান পিএইচপি প্রজেক্টের জন্য আমরা ট্র্যাফিক মাইগ্রেশনগুলির ধারণাটি ব্যবহার করি এবং আমাদের একটি মাইগ্রেশনের ডিরেক্টরি আছে যেখানে আমরা ফাইলগুলি "migration_XX.sql" রাখি যেখানে XX মাইগ্রেশন সংখ্যা। বর্তমানে এই ফাইলগুলি হাত দ্বারা তৈরি করা হয় আপডেট হিসাবে তৈরি করা হয়, কিন্তু তাদের সৃষ্টি সহজেই পরিবর্তন করা যায়।

তারপর আমরা "মাইগ্রেশন_উইচার" নামে একটি স্ক্রিপ্ট পাই, যেহেতু আমরা প্রাক-আলফা-এ থাকি, বর্তমানে প্রতিটি পৃষ্ঠার লোডে চালানো হয় এবং একটি নতুন মাইগ্রেশন_XX.sql ফাইল আছে কিনা তা পরীক্ষা করে যেখানে XX বর্তমান মাইগ্রেশন সংস্করণের চেয়ে বড়। যদি তাই হয় তবে মাইগ্রেশন_XX.sql ফাইলগুলিকে ডাটাবেস এবং ভিউলা এর বিরুদ্ধে সবচেয়ে বড় সংখ্যা পর্যন্ত রান করে! স্কিমা পরিবর্তন স্বয়ংক্রিয় হয়।

যদি আপনি সিস্টেমে ফিরে আসার ক্ষমতা প্রয়োজন হয় তবে প্রচুর পরিমাণে tweaking প্রয়োজন, কিন্তু এটি সহজ এবং আমাদের মোটামুটি ছোট দল জন্য খুব ভাল কাজ করছে এইভাবে পর্যন্ত।

0
যোগ

স্কট এম্বলার একটি চমৎকার ধারাবাহিক নিবন্ধ তৈরি করে (এবং একটি পুনর্বিবেচনারে একটি বই সহ লেখেন) , এই ধারণাটি দিয়ে আপনাকে অবশ্যই আপনার স্কিমা বজায় রাখার জন্য TDD নীতিগুলি এবং অনুশীলনের জন্য অবশ্যই প্রয়োগ করতে হবে। আপনি ডাটাবেসের জন্য গঠন এবং বীড ডাটা ইউনিট পরীক্ষার একটি সিরিজ সেট আপ। তারপর, আপনি কিছু পরিবর্তন করার আগে, আপনি যে পরিবর্তন প্রতিফলন পরীক্ষা / পরিবর্তন লিখুন।

আমরা এখন একটি জন্য এটি করছেন এবং এটি কাজ বলে মনে হচ্ছে। আমরা মৌলিক কলামের নাম এবং ডাটা টাইপ চেকগুলি একটি ইউনিট পরীক্ষার স্যুটে উৎপন্ন করার জন্য কোড লিখেছি। SVN চেকআউটের ডেটাবেস লাইভ db সাথে মিলছে কিনা তা পরীক্ষা করার জন্য যে অ্যাপ্লিকেশনটি আসলে চলছে তা আমরা যে কোনো সময়ে পরীক্ষা করতে পারি।

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

0
যোগ

আমি "স্ক্রিপ্টিং" পার্শ্বের জন্য এন্ট (ক্রস প্ল্যাটফর্ম) ব্যবহার করে সুপারিশ করবো (যেহেতু এটি কার্যকরীভাবে jdbc এর মাধ্যমে কোনও ডিবি দিয়ে কথা বলতে পারে) এবং সোর্স রিপোজিটরির জন্য সাবভারশন। এন্টটি পরিবর্তন করার আগে, আপনার স্থানীয় ফাইলের ডিবি "ব্যাক আপ" করার জন্য আপনাকে সাহায্য করবে। 1. এন্ট এর মাধ্যমে ফাইলটি ব্যাকআপ করার জন্য বিদ্যমান ডিবি স্কিমা 2. অ্যান্ট দ্বারা Subversion সংগ্রহস্থল সংস্করণ নিয়ন্ত্রণ 3. এসবি দ্বারা ডিবি দ্বারা নতুন এসকিউএল বিবৃতি পাঠান

0
যোগ

একটি কমান্ড লাইন আছে mysql-diff টুল যা ডাটাবেস স্কিমগুলি তুলনা করে, যেখানে স্কিমা হতে পারে একটি লাইভ ডাটাবেস বা ডিস্কের এসকিউএল স্ক্রিপ্ট। এটি অধিকাংশ স্কিমা মাইগ্রেশন কর্মের জন্য ভাল।

0
যোগ

আপনি যদি এখনও সমাধান খুঁজছেন: আমরা neXtep ডিজাইনার নামক একটি টুল প্রস্তাব করছি এটি একটি ডেটাবেস ডেভেলপমেন্ট এনভায়রনমেন্ট যার সাহায্যে আপনি আপনার সম্পূর্ণ ডাটাবেস সংস্করণ নিয়ন্ত্রণে রাখতে পারেন। আপনি একটি সংস্করণ নিয়ন্ত্রিত সংগ্রহস্থলে কাজ করেন যেখানে প্রতিটি পরিবর্তন ট্র্যাক করা যায়।

যখন আপনি একটি আপডেট প্রকাশ করতে চান, আপনি আপনার উপাদানগুলি কমিটি করতে পারেন এবং পণ্য স্বয়ংক্রিয়ভাবে পূর্ববর্তী সংস্করণ থেকে এসকিউএল আপগ্রেড স্ক্রিপ্ট তৈরি করবে। অবশ্যই, আপনি এই 2 সংস্করণ থেকে এই এসকিউএল উত্পন্ন করতে পারেন

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

The product is GPL and is based on Eclipse so it runs on Linux, Mac and windows. It also support Oracle, Mysql and Postgresql at the moment (DB2 support is on the way). Have a look at the wiki where you will find more detailed information : http://www.nextep-softwares.com/wiki

0
যোগ
বেশ মজার তো. এটি কমান্ড লাইন ইন্টারফেস পাশাপাশি আছে, বা একটি পরিকল্পনা?
যোগ লেখক Piskvor, উৎস

আমি কিভাবে Yii ডাটাবেস মাইগ্রেশনগুলি পরিচালনা করে তা পছন্দ করি। একটি মাইগ্রেশন প্রাথমিকভাবে একটি পিএইচপি স্ক্রিপ্ট বাস্তবায়ন CDb মাইগ্রেশন </কোড>CDb মাইগ্রেশন একটি আপ পদ্ধতিতে অভিব্যক্তি লজিক অন্তর্ভুক্ত করে। মাইগ্রেশন বিপরীতকরণ সমর্থন করার জন্য একটি নিচের পদ্ধতি বাস্তবায়ন করা সম্ভব। বিকল্পভাবে, নিরাপদ আপগ্রেড বা নিরাপদস্থান ব্যবহার করা যেতে পারে তা নিশ্চিত করার জন্য যে স্থানান্তর লেনদেনের প্রসঙ্গে করা হয়েছে।

Yii এর কমান্ড লাইন টুল yiic ম্যাগাজিন তৈরি এবং চালানোর জন্য সমর্থন রয়েছে। মাইগ্রেশন প্রয়োগ করা বা বিপরীত করা যেতে পারে, এক বা একক ব্যাবহার করা হয়। একটি পিএইচপি শ্রেণির জন্য একটি মাইগ্রেশন ফলাফল কোড তৈরি করছে যা CDb মাইগ্রেশন , একটি টাইমস্ট্যাম্প এবং ইউজার দ্বারা নির্ধারিত একটি মাইগ্রেশন নামর উপর ভিত্তি করে নামের স্বতন্ত্র নাম। সমস্ত মাইগ্রেটস যা পূর্বে ডাটাবেসে প্রয়োগ করা হয়েছিল একটি মাইগ্রেশন টেবিলে সংরক্ষণ করা হয়।

আরও তথ্যের জন্য ম্যানুয়াল থেকে ডাটাবেস মাইগ্রেশন নিবন্ধটি দেখুন।

0
যোগ