sql যবহ ডাটাবেস গঠন পরিবর্তন জন্য একটি সংস্করণ নিয়ন্ত্রণ ব্যবস্থা আছে?




রিলেশনাল ডাটাবেজ কি (18)

আমি প্রায়ই নিম্নলিখিত সমস্যা মধ্যে চালানো।

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

সুতরাং, আমি লাইভ সিস্টেমের জন্য একটি ধাক্কা তৈরি করি এবং একটি বড়, সুস্পষ্ট ত্রুটি পেতে যে কোনও NewColumnX নেই, NewColumnX

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


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


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

একটি স্বয়ংক্রিয় সরঞ্জাম ছাড়া (ডেটা ড্যুড সম্পর্কে এখানে অন্যান্য মন্তব্য দেখুন) তাহলে আপনি সরাসরি স্ক্রিপ্ট এবং ডিডিএল ফাইলগুলি ব্যবহার করবেন। একটি পদ্ধতি বেছে নিন, এটি নথিভুক্ত করুন এবং কঠোরভাবে এটি অনুসরণ করুন। আমি যেকোনো মুহুর্তে ডাটাবেস পুনরায় তৈরি করার ক্ষমতা থাকতে পছন্দ করি, তাই আমি সম্পূর্ণ ডাটাবেসের সম্পূর্ণ ডিডিএল রপ্তানি (যদি আমি ডিবিএ করি), বা ডেভেলপার স্কিমা (যদি আমি পণ্যতে থাকি - উন্নয়ন মোড)।


ER স্টুডিও আপনাকে আপনার ডেটাবেস স্কিমাটিকে সরঞ্জামে বিপরীত করতে দেয় এবং তারপরে আপনি এটি লাইভ ডেটাবেসে তুলনা করতে পারবেন।

উদাহরণ: ER স্টুডিওতে আপনার ডেভেলপমেন্ট স্কিমাটি বিপরীত করুন - এটির সাথে তুলনা করুন এবং এটি সমস্ত পার্থক্য তালিকাভুক্ত করবে। এটি পরিবর্তন স্ক্রিপ্ট বা স্বয়ংক্রিয়ভাবে মাধ্যমে তাদের ধাক্কা পারেন।

একবার আপনার ইআর স্টুডিওতে স্কিমা থাকলে, আপনি সৃষ্টি স্ক্রিপ্টটি সংরক্ষণ করতে পারেন অথবা এটি মালিকানা বাইনারি হিসাবে সংরক্ষণ করতে এবং সংস্করণ নিয়ন্ত্রণে সংরক্ষণ করতে পারেন। আপনি যদি কখনও স্কিমটির অতীতের সংস্করণে ফিরে যেতে চান তবে এটি চেক করুন এবং এটি আপনার ডিবি প্ল্যাটফর্মে চাপুন।


রুবে রুবি ইন, migration একটি ধারণা আছে - ডাটাবেস পরিবর্তন করার জন্য একটি দ্রুত স্ক্রিপ্ট।

আপনি একটি মাইগ্রেশন ফাইল তৈরি করেন, যার মধ্যে ডিবি সংস্করণ (যেমন একটি কলাম যুক্ত করার) এবং সংস্করণটি ডাউনগ্রেড করার জন্য নিয়মগুলি (যেমন একটি কলাম অপসারণ করা) বৃদ্ধি করার নিয়ম রয়েছে। প্রতিটি মাইগ্রেশন সংখ্যাযুক্ত, এবং একটি টেবিল আপনার বর্তমান ডিবি সংস্করণ ট্র্যাক রাখে।

মাইগ্রেট করার জন্য , আপনি "db: migrate" নামে একটি কমান্ড চালান যা আপনার সংস্করণটি দেখায় এবং প্রয়োজনীয় স্ক্রিপ্টগুলি প্রয়োগ করে। আপনি একই ভাবে নিচে মাইগ্রেট করতে পারেন।

মাইগ্রেশন স্ক্রিপ্টগুলি একটি সংস্করণ নিয়ন্ত্রণ ব্যবস্থায় রাখা হয় - যখনই আপনি ডেটাবেস পরিবর্তন করেন তখন আপনি একটি নতুন স্ক্রিপ্টে চেক করেন এবং কোনও বিকাশকারী এটি স্থানীয় সংস্করণটিকে সর্বশেষ সংস্করণে আনতে প্রয়োগ করতে পারে।


টেবিলের পরিবর্তনের জন্য একটি VCS অনুপস্থিতিতে আমি তাদের একটি উইকি লগিং করা হয়েছে। অন্ততপক্ষে আমি কখন এবং কেন এটি পরিবর্তিত হয়েছিল তা দেখতে পারি। এটি নিখুঁত থেকে অনেক দূরে নয় কারণ প্রত্যেকে এটি করছে এবং আমাদের কাছে একাধিক পণ্য সংস্করণ রয়েছে, তবে কিছুই নেই।


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

http://www.red-gate.com/Products/schema_compare_for_oracle/index.htm


আমি জাভা ভিত্তিক ওপেন সোর্স টুল liquibase উল্লেখ করে না যে liquibase সমর্থন করে এমন প্রায় প্রতিটি ডাটাবেসের জন্য কাজ করতে পারে। রেলের তুলনায় এটি পরিবর্তে স্কিম পরিবর্তন সঞ্চালনের জন্য xml ব্যবহার করে রুবি ব্যবহার করে। যদিও আমি ডোমেন নির্দিষ্ট ভাষার জন্য এক্সএমএল অপছন্দ করি তবে এক্সএমএলটির খুব শীতল সুবিধা হল তরলবাসা কিছু নির্দিষ্ট অপারেশনগুলিকে কীভাবে আবার চালু করতে জানে

<createTable tableName="USER"> 
   <column name="firstname" type="varchar(255)"/>
</createTable>

সুতরাং আপনি আপনার নিজের এই হ্যান্ডেল করতে হবে না

বিশুদ্ধ এসকিউএল বিবৃতি বা তথ্য আমদানি এছাড়াও সমর্থিত হয়।


ওরাকল প্যাকেজ DBMS_METADATA দেখুন।

বিশেষ করে, নিম্নলিখিত পদ্ধতিগুলি বিশেষত দরকারী:

  • DBMS_METADATA.GET_DDL
  • DBMS_METADATA.SET_TRANSFORM_PARAM
  • DBMS_METADATA.GET_GRANTED_DDL

একবার তারা কীভাবে কাজ করে (বেশ স্বতঃস্ফূর্তকারী) সে সম্পর্কে সচেতন হলে আপনি সেই পদ্ধতিগুলির ফলাফলগুলিকে সোর্স নিয়ন্ত্রণের অধীনে রাখতে পারেন এমন পাঠ্য ফাইলগুলিতে ফলাফলগুলি ডাম্প করতে একটি সহজ স্ক্রিপ্ট লিখতে পারেন। গুড লাক!

MSSQL এর জন্য এই সহজ কিছু আছে কিনা তা নিশ্চিত না।


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


সংস্করণ নিয়ামকটিতে আপনার প্রাথমিক তৈরি টেবিল বিবৃতিগুলি দিন, তারপরে টেবিল বিবৃতিগুলি পরিবর্তন করুন, তবে ফাইলগুলি সম্পাদনা করবেন না, ফাইলগুলি আরও আদর্শভাবে ক্রমানুসারে নামকরণ করা, এমনকি একটি "পরিবর্তন সেট" হিসাবেও পরিবর্তন করুন, যাতে আপনি কোনও নির্দিষ্ট স্থাপনার জন্য সমস্ত পরিবর্তন খুঁজে পেতে পারেন।

সবচেয়ে কঠিন অংশ যা আমি দেখতে পাচ্ছি, ট্র্যাকিং নির্ভরতাগুলি, যেমন, একটি নির্দিষ্ট স্থাপনার টেবিলের জন্য টেবিল A ​​এর আগে আপডেট করা প্রয়োজন।


আমি অত্যন্ত এসকিউএল ডেল্টা সুপারিশ। যখন আমি আমার বৈশিষ্ট্য কোডিং সম্পন্ন করেছি এবং আমার সোর্স নিয়ন্ত্রণ সরঞ্জাম (Mercurial :) তে সে স্ক্রিপ্টগুলি পরীক্ষা করে দেখি তখন আমি ডিফ স্ক্রিপ্ট জেনারেট করতে এটি ব্যবহার করি।

তাদের উভয় একটি এসকিউএল সার্ভার এবং ওরাকল সংস্করণ আছে।


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


দুটি বই সুপারিশ: অ্যাম্বার এবং সাদালেজ দ্বারা "রিফ্যাক্টরি ডেটাবেসেস" এবং অ্যাম্বারের "এজাইল ডেটাবেস প্রযুক্তি"।

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


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

এটা ঠিক যে এটি একটি সংস্করণ 1.0 পণ্য, যদিও, এবং কিছু সমস্যা ছাড়া হয় না।


MyBatis (পূর্বে iBatis) একটি স্কিমা মাইগ্রেশন , কমান্ড লাইন ব্যবহার করার জন্য সরঞ্জাম রয়েছে। এটি জাভাতে লেখা হলেও কোনও প্রকল্পের সাথে ব্যবহার করা যেতে পারে।

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

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

আপনি যদি এসকিউএল সার্ভার ব্যবহার করেন তবে ডেটা ড্যুডকে বীট করা কঠিন হবে (ভিজ্যুয়াল স্টুডিওর ডেটাবেস সংস্করণটি উ। একবার আপনি এটি ফাঁস হয়ে গেলে, ডেটাবেসের আপনার উত্স নিয়ন্ত্রিত সংস্করণ এবং উত্পাদনের সংস্করণটির মধ্যে একটি স্কিমা তুলনা করা একটি বজ্রপাত। এবং একটি ক্লিকের মাধ্যমে আপনি আপনার diff DDL তৈরি করতে পারেন।

MSDN এ একটি নির্দেশমূলক video রয়েছে যা খুবই সহায়ক।

আমি DBMS_METADATA এবং Toad সম্পর্কে জানি, কিন্তু যদি কেউ ওরাকলের জন্য ডেটা ড্যুড দিয়ে আসতে পারে তবে জীবন সত্যিই মিষ্টি হবে।


আমি একটু পুরানো স্কুল, আমি ডাটাবেস তৈরি করার জন্য উৎস ফাইল ব্যবহার করি। প্রকৃতপক্ষে 2 টি ফাইল রয়েছে - project-database.sql এবং project-updates.sql - স্কিমা এবং স্থায়ী ডেটা জন্য প্রথম, এবং পরিবর্তনের জন্য দ্বিতীয়। অবশ্যই, উভয় উৎস নিয়ন্ত্রণ অধীনে হয়।

যখন ডাটাবেস পরিবর্তন হয়, আমি প্রথমে project-database.sql তে মূল স্কিমা আপডেট করি, তারপর প্রাসঙ্গিক তথ্যটি project-updates.sql তে অনুলিপি করুন, উদাহরণস্বরূপ ALTER টেবিল বিবৃতি। আমি ডেভেলপমেন্ট ডেটাবেসে আপডেটগুলি প্রয়োগ করতে পারব, পরীক্ষা শেষ করতে পারব না। তারপরে, ফাইলগুলিতে পরীক্ষা করুন, আবার পরীক্ষা করুন, এবং উত্পাদন প্রয়োগ করুন।

এছাড়াও, সাধারণত ডিবি-কনফিগারেশনে একটি টেবিল থাকে যেমন:

এসকিউএল

CREATE TABLE Config
(
    cfg_tag VARCHAR(50),
    cfg_value VARCHAR(100)
);

INSERT INTO Config(cfg_tag, cfg_value) VALUES
( 'db_version', '$Revision: $'),
( 'db_revision', '$Revision: $');

তারপর, আমি হালনাগাদ বিভাগে নিম্নলিখিত যোগ করুন:

UPDATE Config SET cfg_value='$Revision: $' WHERE cfg_tag='db_revision';

db_version শুধুমাত্র ডাটাবেসের পুনঃস্থাপিত হলে পরিবর্তিত হয়, এবং db_revision আমাকে db_revision কতদূর ডিবি বন্ধ করে দেয় তা একটি ইঙ্গিত দেয়।

আমি তাদের নিজস্ব ফাইলগুলিতে আপডেটগুলি রাখতে পারতাম, কিন্তু আমি তাদের সকলকে একত্রিত করতে এবং প্রাসঙ্গিক বিভাগগুলি বের করতে কাট এবং পেস্ট ব্যবহার করি। আরও কিছু হাউসকিপিং ক্রম অনুসারে, অর্থাত্ '$' থেকে $ 1.1 থেকে সরিয়ে দেওয়ার জন্য সেটি সরিয়ে দিন।


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





version-control