sql >> Databáze >  >> RDS >> Database

Vytváření a nasazení více verzí databáze prostřednictvím snímků schématu

Přehled

Tento článek pojednává o použití snímků schématu databáze k údržbě různých verzí databáze, které lze nasadit do různých prostředí.

Snímky schématu databáze jsou kopie aktuálního stavu databáze v určitém okamžiku, které se běžně používají k vyrovnání rozdílů při zavádění změn z jednoho prostředí do jiného.

Tento článek se zaměří na konkrétní scénář, kde jsou snímky databázového schématu více než jen kopie databáze v určitém okamžiku, spíše se používají k vytváření nových verzí konkrétních prostředí.

Co je snímek schématu databáze

Snímek schématu databáze je jednoduše uložená kopie databáze v určitém okamžiku.

Jinými slovy, snímek databázového schématu je přesnou kopií struktury databáze, která neobsahuje data v původní podobě.

Schéma databáze se týká všech databázových objektů včetně tabulek, pohledů a uložených procedur. Vytvoříme snímek schématu databáze, abychom zmrazili definice objektů pro pozdější použití.

Proč je nutný snímek schématu databáze

Snímky schématu databáze lze použít pro následující účely:

  1. Kopírování stávajícího stavu databáze pro budoucí použití nebo použití.
  2. Verze databáze prostřednictvím více snímků schématu databáze.
  3. Vytvoření časové kopie struktury databáze pro rychlé obnovení.
  4. Vytvoření kopie schématu cílové databáze před nasazením nových změn.
  5. Vytvoření nejnovější stabilní kopie schématu databáze, než budete pokračovat s dalšími změnami.
  6. Vytváření a sdílení změn databáze s externím členem týmu, který nemá přímý přístup k prostředí databáze.
  7. Snímek schématu databáze lze také použít k porovnání rozdílů mezi současnou prací a prací vykonanou v minulosti.
  8. Snímky schématu databáze lze také použít pro odpojené publikování.

Požadavek na zachování více verzí databáze

Pokud váš vývojový tým databází obdržel speciální požadavek udržovat a udržovat více verzí databáze, které lze nasadit ve více prostředích pak je jedním z řešení použití snímků schématu databáze ke splnění požadavku.

Vytvoření více verzí databáze

Jak již bylo zmíněno dříve, snímky databázového schématu se nepoužívají pouze jako kopie struktury databáze v určitém okamžiku, ale lze je také použít k vytvoření a nasazení více verzí databáze současně.

Ukázkové nastavení databáze (technické školení)

Otevřete dbForge Studio pro SQL Server nebo SSMS (SQL Server Management Studio) a nastavte ukázkovou databázi nazvanou TechnicalTraining který obsahuje informace o technických kurzech, studentech a školitelích s několika tabulkami takto:

-- (1) Vytvoření ukázkové databáze TechnicalTraining CREATE DATABASE TechnicalTraining;GOUSE TechnicalTraining-- (2) Vytvoření tabulky studentůCREATE TABLE Student (Id studenta INT IDENTITY ,Jméno VARCHAR(50) NOT NULL ,Datum registrace DATUMTIME2 NULL(200 VARCH) NULL ,CONSTRAINT PK_Student_StudentId PRIMÁRNÍ KLÍČ SE SLUSTROVANÝM (StudentId))GO-- (3) Vytvoření školící tabulkyCREATE TABLE Trenér ( TrainerId INT IDENTITY ,Jméno VARCHAR(50) NOT NULL ,Kvalifikace VARCHAR00 ,Č. NULL VARCHAR(50) Č. C CONSTRAINT PK_Trainer_TrainerId PRIMÁRNÍ KLÍČ SE SKUPINY (TrainerId))GO-- (4) Vytváření tabulky kurzůCREATE TABLE Kurz (Id kurzu INT IDENTITY ,Název VARCHAR(50) NOT NULL ,CrainerId INT NULL,Podrobnosti VARCHARSE CourseId)) NA [PRIMÁRNÍ] TABULCE BRANKÁŘŮ CourseADD OMEZENÍ FK_Course_TrainerId CIZÍ KLÍČ (TrainerId) REFERENCE dbo.Trainer (TrainerId)GO-- (5) Vytváření tabulky studentských kurzů [CREATE TABLE [dbo] (StudentCourse) rseId] INT IDENTITY(1,1) NOT NULL, [StudentId] INT NULL, [CourseId] INT NULL, [PercentScore] DECIMAL (5, 2) NULL, CONSTRAINT [PK_StudentCourse_StudentCourseId] AKTIVNÍ KLÍČ [tudentCourseId] PRIMARY [FK_StudentCourse_Student_StudentId] CIZÍ KLÍČ ([StudentId]) REFERENCE [dbo].[Student] ([StudentId]), OMEZENÍ [FK_StudentCourse_Course_CourseId] CIZÍ KLÍČ ([FERENCEId]][FERENCEId [CourseD]) REFERENCE GO-- (6) Vytvořte zobrazení pro zobrazení zprávy o pokroku studentaVYTVOŘIT ZOBRAZENÍ StudentProgress asSELECT s.Jmeno AS Jméno studenta,c.Jméno jako Jméno kurzu,t.Jméno AS Trenér,sc.PercentScore FROM StudentCourse sc VNITŘNÍ PŘIPOJENÍ Student syn s.StudentId=sc. StudentIdINNER JOIN Course con c.CourseId=sc.CourseIdINNER JOIN Trainer ton t.TrainerId=c.TrainerIdGO

Upozorňujeme, že databáze TechnicalTraining je strukturována takovým způsobem, že mnoho studentů může absolvovat mnoho kurzů, přičemž každý kurz může mít pouze jednoho školitele, jak je uvedeno níže:

Vezměte prosím na vědomí, že používám dbForge Studio pro SQL Server, takže vzhled výstupu se může lišit, pokud stejný kód spustíte v SSMS (SQL Server Management Studio). Mezi skripty a jejich výsledky však není žádný rozdíl.

Naplňte databázi pomocí následujícího skriptu:

USE TechnicalTraining-- (1) Vyplnění tabulky TrainSET IDENTITY_INSERT [dbo].[Trainer] ONINSERT INTO [dbo].[Trainer] ([TrainerId], [Jméno], [Kvalifikace], [Poznámky]) HODNOTY (1 , N'George', N'MSc Computer Science', NULL)INSERT INTO [dbo].[Trainer] ([TrainerId], [Jméno], [Kvalifikace], [Poznámky]) VALUES (2, N'Akeel', N'MSc Database Management', NULL)INSERT INTO [dbo].[Trainer] ([TrainerId], [Jméno], [Kvalifikace], [Poznámky]) VALUES (3, N'Sarah', N'MSc Data Science' [ dbo][Tréner] VYP-- (2) Vyplňování tabulky kurzuSET IDENTITY_INSERT [dbo].[Kurz] ONINSERT DO [dbo].[Kurz] ([Id kurzu], [Jméno], [Id trenéra], [Detail]) HODNOTY (1, N'Database Development', 1, NULL)INSERT INTO [dbo].[Course] ([CourseId], [Name], [TrainerId], [Detail]) VALUES (2, N'Data Analysis ', 2 , NULL)INSERT INTO [dbo].[Course] ([CourseId], [Name], [TrainerId], [Det ail]) VALUES (3, N'Data Reports Development', 2, NULL)INSERT INTO [dbo].[Course] ([CourseId], [Name], [TrainerId], [Detail]) VALUES (4, N' Basics of Business Intelligence', 3, NULL)INSERT INTO [dbo].[Course] ([CourseId], [Name], [TrainerId], [Detail]) VALUES (5, N'Big Data Fundamentals', 4, NULL )SET IDENTITY_INSERT [dbo].[Kurz] VYPNUTO-- (3) Vyplňování studentské tabulkySET IDENTITY_INSERT [dbo].[Student] ONINSERT DO [dbo].[Student] ([StudentId], [Jméno], [Datum registrace], [ Poznámky]) VALUES (1, N'Asif', N'2017-01-01 00:00:00', NULL)INSERT INTO [dbo].[Student] ([StudentId], [Name], [RegistrationDate], [Notes]) VALUES (2, N'Mike', N'2017-02-01 00:00:00', NULL)INSERT INTO [dbo].[Student] ([StudentId], [Name], [RegistrationDate] , [Notes]) VALUES (3, N'Naveed', N'2017-03-10 00:00:00', NULL)INSERT INTO [dbo].[Student] ([StudentId], [Name], [RegistrationDate ], [Poznámky]) VALUES (4, N'Sam', N'2017-04-15 00:00:00', NULL)INSERT INTO [dbo].[Student] ([StudentId], [Jméno], [ Datum registrace], [Poznámky]) HODNOTY (5, N'Mona', N'2017-07-10 00:00:00', NULL)SET IDENTITY_INSERT [dbo].[Student] OFF-- (4) Vyplňování tabulky StudentCourseSET IDENTITY_INSERT [dbo].[StudentCourse ] ONINSERT INTO [dbo].[StudentCourse] ([StudentCourseId], [StudentId], [CourseId], [PercentScore]) VALUES (1, 1, 1, CAST(72,00 AS Decimal(5, 2)))INSERT INTO [ dbo].[StudentCourse] ([StudentCourseId], [StudentId], [CourseId], [PercentScore]) VALUES (2, 1, 2, CAST(75,00 AS Decimal(5, 2)))INSERT INTO [dbo].[ StudentCourse] ([StudentCourseId], [StudentId], [CourseId], [PercentScore]) VALUES (3, 2, 2, CAST(80,00 AS Decimal(5, 2)))INSERT INTO [dbo].[StudentCourse] ([ 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

Kontrola databáze

Klikněte pravým tlačítkem na StudentProgress v části Zobrazení a klikněte na Obnovit data nebo případně zadejte následující kód T-SQL:

-- Zobrazit postup studentůSELECT s.Name,c.Name jako CourseName,t.Name,sc.PercentScore FROM StudentCourse scINNER JOIN Student son s.StudentId=sc.StudentIdINNER JOIN Course con c.CourseId=sc.CourseIdINNER JOIN Trainer ton t.TrainerId=c.TrainerIdorder by s.Name

Výstup je následující:

Nastavení verze 1 vytvořením snímku schématu databáze

Toto je čas na uložení kopie databázového schématu k určitému okamžiku, protože aktuální struktura databáze splňuje požadavky pro verzi 1 databáze.

Vytvořit snímek schématu verze 1

Klikněte pravým tlačítkem na Technické školení databáze v Průzkumníku databáze z dbForge Studio pro SQL Server (nebo můžete použít jakýkoli podobný nástroj podle vašeho výběru, který je schopen vytvořit snímek schématu databáze), klikněte na Úlohy a poté klikněte na Vytvořit složku skriptů nebo snímek… jak je uvedeno níže:

Vytvořte snímek na požadovaném místě a pojmenujte jej TechnicalTraining-Version-001-StudentCourseTrainer.snap takto:

Zkontrolujte snímek schématu verze 1

Zkontrolujte složku a zobrazte nedávno vytvořený snímek schématu databáze verze 1:

Přidat nový typ kurzu tabulky

Nyní přidáme další tabulku s názvem CourseType do existující databáze pomocí následujícího skriptu:

-- Přidání tabulky CourseType CREATE TABLE CourseType ( CourseTypeId INT IDENTITY ,Název VARCHAR(50) NOT NULL ,Detail VARCHAR(250) NULL ,CONSTRAINT PK_CourseType_CourseId PRIMARY KEY CLUSTERED (PRIMÁRNÍ KEY CLUSTERED);

Vložte data do tabulky následovně:

SET IDENTITY_INSERT [dbo].[CourseType] ONINSERT DO [dbo].[CourseType] ([CourseTypeId], [Name], [Detail]) VALUES (1, N'Basic', NULL)INSERT INTO [dbo] [CourseType] ([CourseTypeId], [Name], [Detail]) VALUES (2, N'Intermediate', NULL)INSERT INTO [dbo].[CourseType] ([CourseTypeId], [Name], [Detail]) VALUES (3, N'Advanced', NULL)SET IDENTITY_INSERT [dbo].[CourseType] VYPNUTO

Upravte tabulku kurzů a přidejte sloupec Typ kurzu

Aktualizujte tabulku Course a přidejte cizí klíč CourseType:

-- Zrušit omezení cizího klíčeALTER TABLE Omezení studentCourseDrop [FK_StudentCourse_Course_CourseId]-- Zrušit tabulku kurzuDROP TABLE Kurz-- Vytvořit tabulku kurzu s novým sloupcem CourseTypeIdCREATE TABLE [dbo].[Kurz] ( [CourseId, 1 ID kurzu] NOT NULL, [CourseTypeId] INT, [Name] VARCHAR (50) NOT NULL, [TrainerId] INT NULL, [Detail] VARCHAR (200) NULL, CONSTRAINT [PK_Course_CourseId] PRIMARY KEY CLUSTERED ([CourseFrainer_d] AINTSC_CourseFIKIerd) ] CIZÍ KLÍČ ([TrainerId]) REFERENCE [dbo].[Trainer] ([TrainerId]), OMEZENÍ [FK_Course_CourseTypeId] CIZÍ KLÍČ ([CourseTypeId]) REFERENCE [CourseType]([CourseTypeId]);); 

Přidejte data do nově upravené tabulky kurzů následovně:

-- Přidejte data do tabulky kurzuSET IDENTITY_INSERT [dbo].[Kurz] ONINSERT DO [dbo].[Kurz] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) HODNOTY (1, 1, N'Database Development', 1, NULL)INSERT INTO [dbo].[Course] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) VALUES (2, 3 , N'Data Analysis ', 2, NULL)INSERT INTO [dbo].[Course] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) VALUES (3, 2, N'Data Reports Development', 2, NULL)INSERT INTO [dbo].[Course] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) VALUES (4, 1, N'Basics of Business Intelligence ', 3, NULL)INSERT INTO [dbo].[Course] ([CourseId], [CourseTypeId], [Name], [TrainerId], [Detail]) VALUES (5, 1, N'Big Data Fundamentals', 4 , NULL)SET IDENTITY_INSERT [dbo].[Kurz] VYPNUTO-- Přidat omezení cizího klíče zpět do tabulky StudentCourseALTER TABLE StudentCourse PŘIDAT OMEZENÍ [FK_StudentCourse_Course_CourseId] CIZÍ KLÍČ ([CourseId]]) REFERENCE [Coursedbo] REFERENCE [Coursedbo] 

Přidat nové zobrazení CoursesWithTypes

Nyní přidejte nové zobrazení, abyste viděli všechny kurzy s jejich typy následovně:

-- Vytvoření zobrazení pro zobrazení kurzů s jejich typyCreate VIEW CoursesWithTypes ASSELECT c.CourseId,c.Name jako CousreName,ct.Name jako CourseType FROM dbo.Course c vnitřní spojení dbo.CourseType cton c.CourseTypeId=ct.Course;GO

Kontrola databáze

Prohlédněte si strukturu databáze, abyste viděli nejnovější změny:

Spusťte zobrazení CoursesWithTypes:

Nastavení verze 2 vytvořením snímku schématu databáze

Vytvořte další kopii struktury databáze k určitému časovému okamžiku, abyste označili verzi 2 databáze.

Vytvořte snímek schématu databáze a nazvěte jej TechnicalTraining-Version-002-StudentCourseTrainerCourseType.snap takto:

Nasazení více verzí databáze

Po úspěšném vytvoření snímků schématu databáze pro verzi 1 a verzi 2 můžeme nyní nasadit jakoukoli verzi do libovolného prostředí podle požadavků.

Vytvoření Dev databáze ze schématu Snapshot verze 1

Klikněte na Porovnání-> Porovnání nového schématu z panelu nabídek v dbForge Studio pro SQL Server:

Dále nastavte typ zdroje jako Snímek a vyhledejte snímek schématu databáze verze 1 TechnicalTraining-Version-001-StudentCourseTrainer.snap vytvořili jsme dříve a kliknutím na symbol plus vytvořte cílovou databázi za běhu:

Zadejte název databáze TechnicalTrainingV1_DEV a klikněte na OK:

Klikněte na Další :

Klikněte na Další znovu a vyberte výchozí Možnosti a poté klikněte na Další pokračujte s výchozími možnostmi mapování schématu a poté klikněte na Porovnat :

Synchronizujte zdroj a cíl kliknutím na zelenou ikonu uprostřed, jak je znázorněno níže:

Po několika dalších krocích klikněte na Synchronizovat :

Dále spusťte skript, abyste nakonec vytvořili TechnicalTrainingV1_DEV databáze ze snímku schématu databáze představující verzi 1 databáze:

Prohlédněte si nově vytvořenou databázi, která je kopií databáze TechnicalTraining verze 1:

Vytvoření Dev databáze ze schématu Snapshot verze 2

Nyní vytvořte verzi 2 databáze podle kroků uvedených pro vytvoření verze 1 jednoduše tak, že ukážete na Snímek schématu databáze verze 2 TechnicalTraining-Version-002-StudentCourseTrainerCourseType tentokrát:

Porovnání verze 1 a verze 2

Pojďme rychle porovnat obě databáze, abychom viděli rozdíly.

Gratulujeme! Úspěšně jste vytvořili několik verzí databáze prostřednictvím snímků schématu databáze.

Co dělat

Nyní můžete snadno používat snímky schématu databáze k vytvoření a nasazení více verzí databáze.

  1. Vytvořte více verzí SQLDevBlogTDD uvedených v mém předchozím článku.
  2. Vytvořte více verzí databáze se schůzkou verze 1 Celkový počet článků na zprávu autora požadavek a splnění verze 2 Celkový počet článků za roční zprávu v návaznosti na můj předchozí článek.
  3. Projděte si můj předchozí článek Umění izolace závislostí a dat v testování databázových jednotek a zjistěte, zda můžete vytvořit dvě různé verze databáze prostřednictvím snímků schématu databáze, jednu s jednotkovými testy tSQLt a druhou bez jednotkových testů tSQLt.

Užitečný nástroj:

dbForge Studio pro SQL Server – výkonné IDE pro správu, administraci, vývoj, sestavování dat a analýzu SQL Serveru.


  1. CHYBA 1148:Použitý příkaz není u této verze MySQL povolen

  2. Při otevírání spojení Oracle je objekt spojení null

  3. SQL kurz pro začátečníky

  4. Argumenty příkazového řádku PSQL ve skriptu DO