ডেটাবেস পরিবর্তনের জন্য বিকাশকারীদের জন্য একটি "সেরা-অনুশীলন" টাইপ প্রক্রিয়া রয়েছে?


31

ডিবি উন্নয়ন থেকে কিউএ থেকে উত্পাদন পরিবেশে পরিবর্তনের জন্য একটি ভাল উপায় কী? বর্তমানে আমরা:

  1. কোনও এসকিউএল ফাইলের পরিবর্তনের স্ক্রিপ্ট করুন এবং এটি টিএফএস ওয়ার্ক আইটেমের সাথে সংযুক্ত করুন।
  2. কাজটি পিয়ার-রিভিউ করা হয়েছে
  3. কাজ যখন পরীক্ষার জন্য প্রস্তুত হয় তখন এসকিউএল QA তে চালিত হয়।
  4. কাজটি কিউএ পরীক্ষিত
  5. কাজ যখন উত্পাদনের জন্য প্রস্তুত হয় তখন এসকিউএলটি প্রোডাকশন ডেটাবেজে চালিত হয়।

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

একটি গৌণ সমস্যা হ'ল দু'টি পৃথক কার্য একই ডাটাবেস অবজেক্টটি বদলে যদি আপনার মাঝে মাঝে ম্যানুয়ালি পরিবর্তনগুলি সমন্বিত করা প্রয়োজন হয়। এটি ঠিক এটিই হতে পারে তবে এটি এখনও মনে হচ্ছে এই সমস্যাগুলি বা কোনও কিছুর "পতাকাঙ্কিত" করার কিছু স্বয়ংক্রিয় উপায় থাকা উচিত।

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

আমি আমার সোর্স কন্ট্রোল সিস্টেমে আমার পক্ষে এই জাতীয় জিনিসগুলির যত্ন নেওয়ার পক্ষে খুব অভ্যস্ত এবং আমার এসকিউএল এর জন্যও একই জিনিস রাখতে চাই।


একটি ভাল ওপেন সোর্স প্রকল্পের মতো শোনাচ্ছে (যদি একটি ইতিমধ্যে বিদ্যমান না থাকে)
প্যাট্রিক

@ পেট্রিক ... হ্যাঁ এটি তবে এটি এমএসের সমস্ত কার্যকারিতা সহ এটি করার একটি উপায় থাকবে বলে মনে হচ্ছে। আমি হোম প্রকল্পগুলির জন্যও একটি ওএস চাই তবে কাজের জন্য আমাদের যে বিকাশের পরিবেশ রয়েছে তার মধ্যে থাকতে ভাল লাগবে।
বেথ হোয়াইটেল

1
আমি মনে করি এটির জন্য ডাটাবেস প্রকল্পগুলি ভাল। এগুলি উত্স নিয়ন্ত্রিত হতে পারে এবং উত্সের কিসের ভিত্তিতে স্ক্রিপ্টগুলি পরিবর্তন করা যায়।

@ মিআরস্কাগস কি এগুলি কোড চেঞ্জসেটের মতো কাজ করে? তারা যদি তা করে তবে তা উত্তেজনাপূর্ণ। (এবং এর সাথে আপনার উত্তর দেওয়া উচিত)
বেথ হোয়াইটজেল

উত্তর:


17

কোনও ভিএস পরিবেশে, আমি আপডেট স্ক্রিপ্টগুলি কার্যকর করতে ডেটাবেস প্রকল্পগুলি সর্বদা ব্যবহার করেছি। আমি আমার স্ক্রিপ্টগুলির জন্য "ডাটাবেসআপডেট 17.এসকিএল" বা "প্রাইসআপডেটফেব্রুয়ারি 2010.sql" এর মতো অকল্পনীয় নামগুলি ব্যবহার করার প্রবণতা রাখি। ডাটাবেস প্রকল্প হিসাবে এগুলি রাখার ফলে আমি তাদের টিম সার্ভারের কাজগুলিতে, বাগগুলিতে বেঁধে দিতে পারি (এবং যদি আমরা কোড পর্যালোচনাও করি তবে তাদের কাছেও)। আমি স্কিমাতে পরিবর্তনগুলি সংগ্রহের জন্য প্রতিটি ডাটাবেসেও (যে আমার উপর কর্তৃত্ব রয়েছে) সারণী অন্তর্ভুক্ত করি।

CREATE TABLE [dbo].[AuditDDL](
    [EventID] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
    [EventData] [xml] NULL,                    -- what did they do
    [EventUser] varchar(100) NOT NULL,         -- who did it
    [EventTime] [datetime] DEFAULT (getdate()) -- when did they do it
    )
GO

ওয়েল, এটি 6 ডাব্লু এর 3 যত্ন করে ।

CREATE TRIGGER [trgAuditDDL]
ON DATABASE 
FOR DDL_DATABASE_LEVEL_EVENTS 
AS
INSERT INTO AuditDDL(EventData, EventUser)
SELECT EVENTDATA(), original_login()
GO

আমি কোনও প্যাচের শুরুতে প্যাচের শুরুতে পাশাপাশি প্যাচের শুরুতে লগ করতে একটি সন্নিবেশ বিবৃতি অন্তর্ভুক্ত করি। প্যাচগুলির বাইরে ঘটে যাওয়া ঘটনাগুলি things

উদাহরণস্বরূপ, "প্যাচ 17" এর জন্য "বিগ প্যাচ" সন্নিবেশটি দেখতে পাবেন:

INSERT INTO [dbo].[AuditDDL]
           ([EventData]
           ,[EventUser])
     VALUES
           ('<EVENT_INSTANCE><EventType>BEGIN PATCH 17</EventType></EVENT_INSTANCE>'
           ,ORIGINAL_LOGIN())
GO

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

DELETE FROM AuditDDL
WHERE [EventData].exist('/EVENT_INSTANCE/EventType/text()[fn:contains(.,"ALTER_INDEX")]') =1
GO

DELETE FROM AuditDDL
WHERE [EventData].exist('/EVENT_INSTANCE/EventType/text()[fn:contains(.,"UPDATE_STATISTICS")]') =1
GO

এর আগের সংস্করণটি সার্ভার ফল্টে আগে পোস্ট করা হয়েছিল

একটি SOX এবং PCI-DSS অনুবর্তী পরিবেশে আপনার কখনই উত্পাদন সার্ভারগুলিতে অ্যাক্সেস পাওয়া যাবে না। সুতরাং স্ক্রিপ্টগুলি আগেই পরিষ্কার এবং অনুশীলন করা দরকার। আপডেট স্ক্রিপ্টগুলির শীর্ষে থাকা মন্তব্যে নতুন সারণী, সঞ্চিত প্রকস, ফাংশন ইত্যাদির তালিকা অন্তর্ভুক্ত রয়েছে এবং সেই সাথে সংশোধিত টেবিলগুলির তালিকা, সঞ্চিত প্রকল্পগুলি, ফাংশন ইত্যাদি data

একটি গৌণ সমস্যা হ'ল দু'টি পৃথক কার্য একই ডাটাবেস অবজেক্টটি বদলে যদি আপনার মাঝে মাঝে ম্যানুয়ালি পরিবর্তনগুলি সমন্বিত করা প্রয়োজন হয়। এটি ঠিক এটিই হতে পারে তবে এটি এখনও মনে হচ্ছে এই সমস্যাগুলি বা কোনও কিছুর "পতাকাঙ্কিত" করার কিছু স্বয়ংক্রিয় উপায় থাকা উচিত।

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


সুতরাং আপনি এটি ভিএস-এ করেন এবং এসএসএমএস ঠিক নয়? আমি এখনই আমার ডাটাবেসের কাজের জন্য এসসিএম করার সর্বোত্তম উপায়টি বের করার চেষ্টা করছি এবং আমরা এইচজি ব্যবহার করি।
jcolebrand

1
@ জকোলেব্রান্ড, হ্যাঁ, আমি স্ক্রিপ্টগুলি লিখতে এবং ট্র্যাক রাখতে ভিএস ব্যবহার করি। উত্পাদন কর্মীরা এসএসএমএস ব্যবহার করে ডেটাবেস আপডেট করতে স্ক্রিপ্টগুলি চালায়। ভিএস এর ভিতরে থাকা ডাটাবেস সরঞ্জামগুলি স্কিমার তুলনা করার জন্য বেশ শালীন। রেডগেটের এসকিউএল তুলনা একটি শালীন বিকল্প।
টাঙ্গুরেেন

7

আপনি কি এসকিউএল উত্স নিয়ন্ত্রণের দিকে নজর রেখেছেন? আপনি এটি আপনার এসকিউএল সার্ভারকে টিএফএস / এসভিএন / ভল্ট বা ভিএসএস - এর সাথে সংযুক্ত করতে ব্যবহার করতে পারেন - http://www.red-gate.com/products/sql-development/sql-source-control/


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

4

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

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

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

(আমি কোনওভাবেই সাইবাজের সাথে যুক্ত নই, যিনি পাওয়ার ডিজাইনার বিকাশ করেছিলেন - ভেবেছিলেন আমি এটিকে সেখানে ফেলে দেব)।


2

ডিবি ভূত

ডাটাবেস পরিচালনার জন্য ডিবি গোস্ট আমার প্রিয় সরঞ্জাম।

উপকারিতা

  1. আপনার ডাটাবেসের সমস্ত অবজেক্ট উত্স নিয়ন্ত্রণে স্ক্রিপ্ট হিসাবে সংরক্ষণ করা হয়।
  2. আপনি 'স্ট্যাটিক ডেটা' (সারণী ডেটা দেখার জন্য) স্ক্রিপ্টও করতে পারেন can
  3. আপনি ম্যানুয়ালি বা একটি 'মডেল' বিকাশ ডাটাবেস স্ক্রিপ্ট করে উত্স নিয়ন্ত্রণ আপডেট করতে পারেন।
  4. সোর্স কন্ট্রোলের (স্ট্যাটিক ডেটা সহ) স্ক্রিপ্টগুলি থেকে আপনি একটি ডাটাবেস (দ্রুত) তৈরি করতে পারেন ।
  5. আপনি কোনও উত্পাদন উদাহরণ সহ ডাটাবেসের উদাহরণগুলিতে পরিবর্তন স্থাপন করতে পারেন :
    • আপনি একটি বিদ্যমান ডাটাবেসের সাথে 'বিল্ড ডাটাবেস' (স্ক্রিপ্টগুলি থেকে তৈরি) তুলনা করতে পারেন এবং একটি পরিবর্তন স্ক্রিপ্ট তৈরি করতে পারেন।
    • আপনি ডিবি ঘোস্টকে দুটি ডাটাবেসের উদাহরণস্বরূপ একটি বিল্ড ডাটাবেস এবং আপনার উত্পাদন ডাটাবেসের মধ্যে স্বয়ংক্রিয়ভাবে পরিবর্তনগুলি সিঙ্ক করতে নির্দেশ দিতে পারেন can

[৪] স্থানীয় পরিবর্তনগুলি করতে বা বিভিন্ন পরিবেশের জন্য পৃথক দৃষ্টান্ত তৈরির জন্য বিশেষভাবে কার্যকর hand আসলে এটি এত সহজ যে আমি প্রতিটি বৈশিষ্ট্য বা বাগের জন্য একটি পৃথক ডাটাবেস তৈরি করি যা আমি কাজ করি কোনও ডেটাবেসকে প্রভাবিত করে।

বিস্তারিত

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

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

আমি কেবল চাই যে অন্যান্য ডিবিএমএস-এর জন্য একই ধরণের সরঞ্জাম ছিল।


1

আমি জানি এটি বেশিরভাগ ডিবিএর কাছে ওভারকিল শোনায়:

আপনি কি ডেটাবেস পরিবর্তনগুলি (এবং কেবলমাত্র ডিবি পরিবর্তনগুলি) ট্র্যাক করতে রেল অন রেল ব্যবহার বিবেচনা করেছেন? আপনার কোনও অ্যাপ্লিকেশন চালানো বা কোনও রুবি কোড ইত্যাদি লেখার দরকার নেই তবে আমি স্থানান্তর করার শৈলীটি পেয়েছি (তারা এটিকে এটি বলে) এটি বেশ কার্যকর: http://guides.rubyonrails.org/migrations.html

SQL সার্ভারটিও সমর্থিত, আপনাকে জেআরবি + জেডিবিসি ব্যবহার করতে হতে পারে।


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