अवलोकन
यह आलेख डेटाबेस स्कीमा स्नैपशॉट का उपयोग करने के बारे में बात करता है ताकि डेटाबेस के विभिन्न संस्करणों को अलग-अलग वातावरण में तैनात किया जा सके।
डेटाबेस स्कीमा स्नैपशॉट, डेटाबेस की वर्तमान स्थिति की पॉइंट-इन-टाइम प्रतियाँ होती हैं, जिनका उपयोग आम तौर पर एक परिवेश से दूसरे परिवेश में परिवर्तनों को परिनियोजित करते समय अंतरों को समेटने के लिए किया जाता है।
यह आलेख एक विशेष परिदृश्य पर केंद्रित होगा जहां डेटाबेस स्कीमा स्नैपशॉट डेटाबेस की केवल पॉइंट-इन-टाइम प्रतियों से अधिक हैं, बल्कि उनका उपयोग विशिष्ट वातावरण के नए संस्करण बनाने के लिए किया जाता है।
डेटाबेस स्कीमा स्नैपशॉट क्या है
एक डेटाबेस स्कीमा स्नैपशॉट बस एक डेटाबेस की समय प्रतिलिपि में सहेजा गया बिंदु है।
दूसरे शब्दों में, एक डेटाबेस स्कीमा स्नैपशॉट डेटाबेस की संरचना की एक सटीक प्रति है जिसमें डेटा अपने मूल रूप में शामिल नहीं होता है।
डेटाबेस स्कीमा सभी डेटाबेस ऑब्जेक्ट्स को संदर्भित करता है जिसमें टेबल, दृश्य और संग्रहीत कार्यविधियाँ शामिल हैं। हम बाद में उपयोग के लिए ऑब्जेक्ट परिभाषाओं को फ्रीज करने के लिए एक डेटाबेस स्कीमा स्नैपशॉट बनाते हैं।
डेटाबेस स्कीमा स्नैपशॉट की आवश्यकता क्यों है
डेटाबेस स्कीमा स्नैपशॉट का उपयोग निम्नलिखित उद्देश्यों के लिए किया जा सकता है:
- भविष्य के संदर्भ या भविष्य के उपयोग के लिए डेटाबेस की मौजूदा स्थिति की प्रतिलिपि बनाना।
- एकाधिक डेटाबेस स्कीमा स्नैपशॉट के माध्यम से एक डेटाबेस का संस्करण बनाना।
- त्वरित पुनर्स्थापना के लिए डेटाबेस संरचना की समय-समय पर प्रतिलिपि बनाना।
- नए परिवर्तनों को लागू करने से पहले लक्ष्य डेटाबेस स्कीमा की एक प्रति बनाना।
- अधिक परिवर्तनों के साथ आगे बढ़ने से पहले डेटाबेस स्कीमा की नवीनतम स्थिर प्रतिलिपि बनाना।
- डेटाबेस बनाना और साझा करना बाहरी टीम के सदस्य में परिवर्तन करता है जो सीधे डेटाबेस वातावरण तक नहीं पहुंच सकता है।
- डेटाबेस स्कीमा स्नैपशॉट का उपयोग वर्तमान कार्य और अतीत में किए गए कार्य के बीच अंतर की तुलना करने के लिए भी किया जा सकता है।
- डेटाबेस स्कीमा स्नैपशॉट का उपयोग डिस्कनेक्ट किए गए प्रकाशन के लिए भी किया जा सकता है।
एकाधिक डेटाबेस संस्करण रखने की आवश्यकता
यदि आपकी डेटाबेस विकास टीम को अनेक वातावरणों में परिनियोजित करने के लिए अनेक डेटाबेस संस्करण रखने और बनाए रखने की विशेष आवश्यकता प्राप्त हुई है तो एक समाधान आवश्यकता को पूरा करने के लिए डेटाबेस स्कीमा स्नैपशॉट का उपयोग करना है।
एकाधिक डेटाबेस संस्करण बनाना
जैसा कि पहले चर्चा की गई है, डेटाबेस स्कीमा स्नैपशॉट का उपयोग न केवल डेटाबेस संरचना की पॉइंट-इन-टाइम प्रतियों के रूप में किया जाता है, बल्कि एक ही समय में कई डेटाबेस संस्करण बनाने और तैनात करने के लिए भी उपयोग किया जा सकता है।
नमूना डेटाबेस सेटअप (तकनीकी प्रशिक्षण)
तकनीकी प्रशिक्षण नामक एक नमूना डेटाबेस स्थापित करने के लिए SQL सर्वर या SSMS (SQL सर्वर प्रबंधन स्टूडियो) के लिए dbForge स्टूडियो खोलें जिसमें कुछ तालिकाओं के साथ तकनीकी पाठ्यक्रमों, छात्रों और प्रशिक्षकों के बारे में जानकारी इस प्रकार है:
-- (1) तकनीकी प्रशिक्षण नमूना डेटाबेस बनाना डेटाबेस तकनीकी प्रशिक्षण बनाना; GOUSE तकनीकी प्रशिक्षण-- (2) छात्र तालिका बनाना तालिका छात्र बनाएं (StudentId INT Identity, Name VARCHAR(50) NOT NULL,RegistrationDate DATETIME2 NULL, Notes VARCHAR(200) NULL ,CONSTRAINT PK_Student_StudentId PRIMARY KEY CLUSTERED (StudentId))GO-- (3) ट्रेनर टेबल बनाना टेबल ट्रेनर (TrainerId INT Identity, Name VARCHAR(50) NOT NULL,Qualification VARCHAR(50) NOT NULL, Notes VARCHAR(200) बनाना CONSTRAINT PK_Trainer_TrainerId प्राथमिक कुंजी क्लस्टर (TrainerId))GO-- (4) पाठ्यक्रम तालिका बनाना तालिका पाठ्यक्रम बनाएं (पाठ्यक्रम आईडी INT पहचान, नाम VARCHAR (50) पूर्ण नहीं, प्रशिक्षक आईडी INT पूर्ण, विवरण PARCHAR (200) CL TERY_Course_CourseId CLRI_Course_CourseId CLRI_Course CourseId)) पर [प्राथमिक]गोलटर टेबल कोर्सजोड़ें CONSTRAINT FK_Course_TrainerId FOREIGN KEY (TrainerId) संदर्भ dbo.Trainer (TrainerId)GO-- (5) स्टूडेंटकोर्स टेबल बनाना टेबल बनाएं [dbo]। [StudentCourse_TrainerId rseId] INT IDENTITY(1,1) NOT NULL, [StudentId] INT NULL, [CourseId] INT NULL, [PercentScore] DECIMAL (5, 2) NULL, CONSTRAINT [PK_StudentCourse_StudentCourseId] प्राथमिक कुंजी क्लस्टरेड ([स्टूडेंट कोर्स), COIMARY [FK_StudentCourse_Student_StudentId] विदेशी कुंजी ([StudentId]) संदर्भ [dbo]। GO-- (6) छात्र प्रगति रिपोर्ट देखने के लिए दृश्य बनाएं छात्र प्रगति को चुनें के रूप में देखें। छात्र नाम के रूप में नाम, पाठ्यक्रम के नाम के रूप में नाम, प्रशिक्षक के रूप में नाम, एससी। छात्र पाठ्यक्रम से प्रतिशत स्कोर एससी इनर जॉइन छात्र बेटा एस। छात्र आईडी =एससी। StudentIdINNER JOIN कोर्स con c.CourseId=sc.CourseIdINNER जॉइन ट्रेनर टन t.TrainerId=c.TrainerIdGO
कृपया ध्यान दें कि तकनीकी प्रशिक्षण डेटाबेस इस तरह से संरचित है कि कई छात्र कई पाठ्यक्रम ले सकते हैं जबकि प्रत्येक पाठ्यक्रम में केवल एक प्रशिक्षक हो सकता है जैसा कि नीचे दिखाया गया है:
कृपया ध्यान दें कि मैं SQL सर्वर के लिए dbForge Studio का उपयोग कर रहा हूं, इसलिए यदि आप SSMS (SQL सर्वर प्रबंधन स्टूडियो) में समान कोड चलाते हैं तो आउटपुट लुक भिन्न हो सकता है। हालांकि, स्क्रिप्ट और उनके परिणामों में कोई अंतर नहीं है।
निम्नलिखित स्क्रिप्ट का उपयोग करके डेटाबेस को पॉप्युलेट करें:
तकनीकी प्रशिक्षण का उपयोग करें-- (1) ट्रेनर टेबल सेट करें पहचान_इन्सर्ट [डीबीओ]। [ट्रेनर] [डीबीओ] में शामिल हों। , N'George', N'MSc कंप्यूटर साइंस', NULL) INSERT INTO [dbo]। [ट्रेनर] ([ट्रेनर आईडी], [नाम], [योग्यता], [नोट्स]) Values (2, N'Akeel', N'MSc डेटाबेस मैनेजमेंट', NULL) INSERT INTO [dbo]। , NULL) INSERT INTO [dbo]। dbo]। [ट्रेनर] OFF-- (2) पॉप्युलेटिंग कोर्स टेबलसेट IDENTITY_INSERT [dbo]। [कोर्स] ONINSERT INTO [dbo]। (1, एन'डेटाबेस डेवलपमेंट', 1, न्यूल)इन्टर इनटू [डीबीओ]। , NULL) INSERT INTO [dbo]। [कोर्स] ([CourseId], [Name], [TrainerId], [Det ail]) VALUES (3, N'Data Reports Development', 2, NULL) INSERT INTO [dbo].[Course] ([CourseId], [Name], [TrainerId], [Detail]) Values (4, N') बिजनेस इंटेलिजेंस की मूल बातें', 3, NULL) INSERT INTO [dbo]। [कोर्स] ([CourseId], [Name], [TrainerId], [Detail]) VALUES (5, N'Big Data Fundamentals', 4, NULL ) SET IDENTITY_INSERT [dbo]। [पाठ्यक्रम] OFF-- (3) छात्र तालिका को पॉप्युलेट करना SET IDENTITY_INSERT [dbo]। [छात्र] [dbo] में प्रवेश करें। [छात्र] ([छात्र आईडी], [नाम], [पंजीकरण दिनांक], [ नोट्स]) मान (1, एन'आसिफ', एन'2017-01-01 00:00:00', NULL) INSERT INTO [dbo]।[Student] ([StudentId], [Name], [RegistrationDate], [नोट्स]) VALUES (2, N'Mike', N'2017-02-01 00:00:00', NULL) INSERT INTO [dbo]।[Student] ([StudentId], [Name], [RegistrationDate] , [नोट्स]) मान (3, N'Naveed', N'2017-03-10 00:00:00', NULL) INSERT INTO [dbo]।[Student] ([StudentId], [Name], [RegistrationDate] ], [नोट्स]) VALUES (4, N'Sam', N'2017-04-15 00:00:00', NULL) INSERT INTO [dbo]। [Student] ([StudentId], [Name], [ पंजीकरण दिनांक], [नोट्स]) VALUES (5, N'Mona', N'2017-07-10 00:00:00', NULL)SET IDENTITY_INSERT [डीबीओ]। ] [dbo] में प्रवेश करें। dbo].[StudentCourse] ([StudentCourseId], [StudentId], [CourseId], [PercentScore]) Values (2, 1, 2, CAST(75.00 AS Decimal(5, 2))) INSERT INTO [dbo].[ छात्र पाठ्यक्रम] ([छात्र पाठ्यक्रम आईडी], [छात्र आईडी], [पाठ्यक्रम आईडी], [प्रतिशत स्कोर]) मूल्य (3, 2, 2, कास्ट (80.00 दशमलव के रूप में (5, 2))) [डीबीओ] में डालें। [छात्र पाठ्यक्रम] ([ StudentCourseId], [StudentId], [CourseId], [PercentScore]) Values (4, 2, 3, CAST(70.00 AS Decimal(5, 2))) INSERT INTO [dbo]।[StudentCourse] ([StudentCourseId], [ StudentId], [CourseId], [PercentScore]) VALUES (5, 3, 5, CAST(80.00 AS Decimal(5, 2)))SET IDENTITY_INSERT [dbo].[StudentCourse] OFF
डेटाबेस जांच
StudentProgress पर राइट-क्लिक करें दृश्यों . के अंतर्गत फ़ोल्डर और क्लिक करें डेटा पुनर्प्राप्त करें या वैकल्पिक रूप से निम्न T-SQL कोड टाइप करें:
-- छात्रों की प्रगति देखें। कोर्स का नाम चुनें, नाम, सी.नाम कोर्स का नाम, टी.नाम, एससी। स्टूडेंटकोर्स से प्रतिशत स्कोर ScINNER जॉइन स्टूडेंट बेटा s.StudentId=sc.StudentIdINNER JOIN कोर्स con c.CourseId=sc.CourseIdINNER जॉइन ट्रेनर टन t.TrainerId=c.TrainerIdorder by s.Name
आउटपुट इस प्रकार है:
डेटाबेस स्कीमा स्नैपशॉट बनाकर संस्करण 1 सेटअप करें
यह डेटाबेस स्कीमा की पॉइंट-इन-टाइम कॉपी को सहेजने का समय है क्योंकि वर्तमान डेटाबेस संरचना डेटाबेस के संस्करण 1 के लिए आवश्यकताओं को पूरा करती है।
स्कीमा स्नैपशॉट संस्करण 1 बनाएं
तकनीकी प्रशिक्षण पर राइट-क्लिक करें डेटाबेस एक्सप्लोरर . में डेटाबेस SQL सर्वर के लिए dbForge Studio (या आप अपनी पसंद के किसी भी समान उपकरण का उपयोग कर सकते हैं जो डेटाबेस स्कीमा स्नैपशॉट बनाने में सक्षम है), कार्य पर क्लिक करें और फिर स्क्रिप्ट फ़ोल्डर या स्नैपशॉट बनाएं… . क्लिक करें जैसा कि नीचे दिखाया गया है:
अपने इच्छित स्थान पर एक स्नैपशॉट बनाएं और इसे TechnicalTraining-Version-001-StudentCourseTrainer.snap नाम दें इस प्रकार:
स्कीमा स्नैपशॉट संस्करण 1 जांचें
संस्करण 1 का हाल ही में बनाया गया डेटाबेस स्कीमा स्नैपशॉट देखने के लिए फ़ोल्डर की जाँच करें:
नई तालिका पाठ्यक्रम प्रकार जोड़ें
आइए अब पाठ्यक्रम प्रकार . नामक एक और तालिका जोड़ें निम्न स्क्रिप्ट की सहायता से मौजूदा डेटाबेस में:
-- कोर्स टाइप टेबल जोड़ना, टेबल बनाना कोर्स टाइप (कोर्स टाइप आईडी INT पहचान, नाम VARCHAR(50) NOT NULL, Detail VARCHAR(250) NULL,CONSTRAINT PK_CourseType_CourseId PRIMARY KEY CLUSTERED (CourseTypeId));GO
तालिका में डेटा इस प्रकार डालें:
सेट पहचान_इन्सर्ट [डीबीओ]। [कोर्स टाइप] [डीबीओ] में शामिल करें। [कोर्स टाइप] ([कोर्स टाइप आईडी], [नाम], [विस्तार]) वैल्यू (2, एन'इंटरमीडिएट', न्यूल) INSERT INTO [dbo]। [CourseType] ([CourseTypeId], [Name], [Detail]) VALUES (3, N'Advanced', NULL)SET IDENTITY_INSERT [dbo].[CourseType] OFF
कोर्स टाइप कॉलम जोड़ने के लिए कोर्स टेबल में बदलाव करें
कोर्स टाइप विदेशी कुंजी जोड़ने के लिए पाठ्यक्रम तालिका को अपडेट करें:
-- विदेशी कुंजी बाधा छोड़ें वैकल्पिक तालिका छात्र पाठ्यक्रम ड्रॉप बाधा [FK_StudentCourse_Course_CourseId]-- ड्रॉप कोर्स टेबलड्रॉप टेबल कोर्स-- नए कॉलम के साथ कोर्स टेबल बनाएं CourseTypeIdCREATE टेबल [डीबीओ]। [कोर्स] ( [कोर्स आईडी] आईएनटी पहचान नॉट न्यूल, [कोर्स टाइप आईडी] आईएनटी, [नाम] वर्चर (50) नॉट न्यूल, [ट्रेनर आईडी] इंट न्यूल, [विस्तार] वचर (200) न्यूल, कॉन्स्ट्रेंट [पीके_कोर्स_कोर्सआईड] प्राथमिक कुंजी क्लस्टर ([कोर्स आईडी] एएससी), कॉन्सट्रेंट [एफके_CrainerId] ] विदेशी कुंजी ([ट्रेनरआईडी]) संदर्भ [डीबीओ]।नई संशोधित पाठ्यक्रम तालिका में डेटा इस प्रकार जोड़ें:
-- पाठ्यक्रम तालिका में डेटा जोड़ेंसेट IDENTITY_INSERT [डीबीओ]। (1, 1, एन'डेटाबेस डेवलपमेंट', 1, NULL) INSERT INTO [dbo]। [कोर्स] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) Values (2, 3 , एन 'डेटा विश्लेषण', 2, न्यूल) [डीबीओ] में डालें। [कोर्स] ([कोर्स आईडी], [कोर्स टाइप आईडी], [नाम], [ट्रेनर आईडी], [विस्तार]) मूल्य (3, 2, एन'डेटा) रिपोर्ट डेवलपमेंट', 2, NULL) INSERT INTO [dbo]। [कोर्स] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) Values (4, 1, N'Basics of Business Intelligence ', 3, NULL) INSERT INTO [dbo]। , NULL) SET IDENTITY_INSERT [dbo]। [पाठ्यक्रम] OFF-- छात्र पाठ्यक्रम तालिका में वापस विदेशी कुंजी बाधा जोड़ें।नए व्यू कोर्सविथटाइप्स जोड़ें
अब सभी पाठ्यक्रमों को उनके प्रकारों के साथ देखने के लिए एक नया दृश्य जोड़ें:
-- पाठ्यक्रमों को उनके प्रकार के साथ देखने के लिए एक दृश्य बनाना, प्रकार के साथ पाठ्यक्रम देखें ASSELECT c.CourseId,c.Name as CousreName,ct.Name as CourseType from dbo.Course c inner join dbo.CourseType cton c.CourseTypeId=ct.CourseTypeId;जाओडेटाबेस जांच
नवीनतम परिवर्तन देखने के लिए डेटाबेस संरचना देखें:
व्यू कोर्सविथ टाइप्स चलाएँ:
डेटाबेस स्कीमा स्नैपशॉट बनाकर संस्करण 2 सेटअप करें
डेटाबेस के संस्करण 2 को चिह्नित करने के लिए डेटाबेस संरचना की एक और पॉइंट-इन-टाइम कॉपी बनाएं।
एक डेटाबेस स्कीमा स्नैपशॉट बनाएं और इसे TechnicalTraining-Version-002-StudentCourseTrainerCourseType.snap कहें इस प्रकार:
एकाधिक डेटाबेस संस्करण परिनियोजित करना
संस्करण 1 और संस्करण 2 के लिए डेटाबेस स्कीमा स्नैपशॉट के सफल निर्माण के बाद, अब हम किसी भी संस्करण को आवश्यकता के अनुसार किसी भी वातावरण में तैनात कर सकते हैं।
स्कीमा स्नैपशॉट संस्करण 1 से देव डेटाबेस बनाना
क्लिक करें तुलना-> नई स्कीमा तुलना SQL सर्वर के लिए dbForge Studio में मेनू बार से:
अगला स्रोत प्रकार स्नैपशॉट . के रूप में सेट करें और डेटाबेस स्कीमा स्नैपशॉट संस्करण 1 का पता लगाएँ TechnicalTraining-Version-001-StudentCourseTrainer.snap हमने पहले बनाया था और फ्लाई पर लक्ष्य डेटाबेस बनाने के लिए प्लस चिह्न पर क्लिक करें:
डेटाबेस नाम टाइप करें तकनीकी प्रशिक्षणV1_DEV और ठीक क्लिक करें:
अगला क्लिक करें :
अगला क्लिक करें डिफ़ॉल्ट विकल्प . का चयन करने के लिए फिर से और फिर अगला . क्लिक करें डिफ़ॉल्ट स्कीमा मैपिंग विकल्पों के साथ जारी रखने के लिए और फिर तुलना करें . क्लिक करें :
बीच में हरे रंग के आइकन पर क्लिक करके स्रोत और लक्ष्य को सिंक्रोनाइज़ करें जैसा कि नीचे दिखाया गया है:
कुछ और चरणों के बाद, सिंक्रनाइज़ करें . क्लिक करें :
इसके बाद, अंत में TechnicalTrainingV1_DEV . बनाने के लिए स्क्रिप्ट निष्पादित करें डेटाबेस स्कीमा स्नैपशॉट से डेटाबेस डेटाबेस के संस्करण 1 का प्रतिनिधित्व करता है:
नव निर्मित डेटाबेस देखें जो कि तकनीकी प्रशिक्षण डेटाबेस संस्करण 1 की एक प्रति है:
स्कीमा स्नैपशॉट संस्करण 2 से देव डेटाबेस बनाना
अब केवल संस्करण 2 डेटाबेस स्कीमा स्नैपशॉट को इंगित करके संस्करण 1 बनाने के लिए बताए गए चरणों का पालन करके डेटाबेस का संस्करण 2 बनाएं TechnicalTraining-Version-002-StudentCourseTrainerCourseType इस बार:
संस्करण 1 और संस्करण 2 की तुलना करना
आइए अंतर देखने के लिए दोनों डेटाबेस की तुलना करें।
बधाई हो! आपने डेटाबेस स्कीमा स्नैपशॉट के माध्यम से डेटाबेस के कई संस्करण सफलतापूर्वक बनाए हैं।
करने के लिए चीज़ें
अब आप डेटाबेस के कई संस्करणों को बनाने और परिनियोजित करने के लिए डेटाबेस स्कीमा स्नैपशॉट का आसानी से उपयोग कर सकते हैं।
- मेरे पिछले लेख में उल्लिखित SQLDevBlogTDD के कई संस्करण बनाएं।
- संस्करण 1 मीटिंग के साथ डेटाबेस के अनेक संस्करण बनाएं प्रति लेखक रिपोर्ट में लेखों की कुल संख्या आवश्यकता और संस्करण 2 मीटिंग प्रति वर्ष लेखों की कुल संख्या रिपोर्ट मेरे पिछले लेख के बाद।
- मेरे पिछले लेख आर्ट ऑफ़ आइसोलेटिंग डिपेंडेंसीज़ और डेटा इन डेटाबेस यूनिट टेस्टिंग को पढ़ें और देखें कि क्या आप डेटाबेस स्कीमा स्नैपशॉट के माध्यम से डेटाबेस के दो अलग-अलग संस्करण बना सकते हैं, एक tSQLt यूनिट टेस्ट के साथ और दूसरा बिना tSQLt यूनिट टेस्ट के।
उपयोगी टूल:
SQL सर्वर के लिए dbForge Studio - SQL सर्वर प्रबंधन, प्रशासन, विकास, डेटा रिपोर्टिंग और विश्लेषण के लिए शक्तिशाली IDE।