Dziś chciałbym napisać parę słów na temat porównania dwóch baz danych pod kątem różnic w definicji obiektów. Jest to dosyć częsta praktyka gdy chcemy porównać bazy pomiędzy np. środowiskiem deweloperskim i produkcyjnym. Kiedyś do tego typu operacji potrzebowaliśmy narzędzi firm trzecich, obecnie możemy do tego wykorzystać standardową funkcjonalność Visual Studio.
Na samym początku musimy mieć co porównywać dlatego też stwórzmy sobie dwie bazy danych. Skrypt pierwszej z nich przedstawia się następująco:
USE master GO CREATE DATABASE Database1 GO USE Database1 GO CREATE TABLE dbo.Table1 ( Id int, Name varchar(200), BirthDate datetime, IsEmployee bit ) GO CREATE VIEW dbo.View1 AS SELECT ID, Name, BirthDate FROM dbo.Table1 WHERE IsEmployee=1 GO CREATE PROC dbo.Proc1 @Id int, @Name varchar(200),@BirthDate datetime AS Insert Into dbo.Table1 (Id,Name,BirthDate) VALUES ( @Id,@Name,@BirthDate ) GO CREATE TABLE dbo.Table0 ( Id int, Name varchar(200), BirthDate datetime ) GO
Skrypt drugiej bazy wygląda następująco:
USE master GO CREATE DATABASE Database2 GO USE Database2 GO CREATE TABLE dbo.Table1 ( Id int, Name varchar(200), BirthDate datetime ) GO CREATE VIEW dbo.View1 AS SELECT ID, Name, BirthDate FROM dbo.Table1 GO CREATE PROC dbo.Proc1 @Id int, @Name varchar(200),@BirthDate date AS Insert Into dbo.Table1 (Id,Name,BirthDate) VALUES ( @Id,@Name,@BirthDate ) --Ta procedura wstawia rekordy do tabeli dbo.Table1 GO CREATE TABLE dbo.Table2 ( Id int, Name varchar(200), BirthDate datetime ) GO CREATE TABLE dbo.Table3 ( Id int, Name varchar(200), BirthDate datetime ) GO
W niniejszym artykule będę używał Data Tools for Visual Studio 2015. Podstawą do zrobienia porównania będzie stworzenie nowego projektu bazodanowego – czyli z sekcji Templates wybieramy SQL Server tak jak zostało to przedstawione na poniższym zrzucie ekranowym.
Po krótkiej chwili projekt zostanie utworzony – wtedy też wybieramy Tools->SQL Server->New Schema Comparison:
Naszym oczom powinien ukazać się ekran porównywania schematów baz danych. Na początku musimy ustawić połączenie do pierwszej bazy wybierając z listy rozwijanej Select Source…
Bardzo ważne jest zdefiniowanie tego co ma być źródłem (Source), a co miejscem docelowym (Target). Jest to istotne dlatego, iż w późniejszym czasie będziemy mogli wygenerować skrypt różnicowy, który zmodyfikuje bazę docelową aby była taka sama jak baza źródłowa. Możemy połączyć się do projektu bazodanowego stworzonego właśnie w Visual Studio, bezpośrednio do bazy danych lub też do pliku aplikacji Data-tier. Na ten moment interesuje nas połączenie bezpośrednie dlatego też klikamy Select connection
Samo nawiązanie połączenia jest dosyć proste – wystarczy wpisać adres serwera, sposób uwierzytelnienia i bazę danych:
Po nawiązaniu połączenia możemy przejść do opcji porównywania klikając Compare. Wcześniej jednak polecam kliknąć przycisk opcji oznaczony poniżej, który pozwoli zaznaczyć ważne opcje jak np. to aby skrypt różnicowy nie generował skryptu, który może powodować stratę danych, usunięcie wyzwalaczy czy indeksów itp. Na ten moment zaufajmy domyślnym ustawieniom i kliknijmy Compare.
Po krótkiej chwili naszym oczom pojawi się zestawienie różnic pomiędzy bazami podobne do poniższego:
Jak widać każda różnica została zakwalifikowana do trzech grup:
- Delete – w bazie docelowej trzeba usunąć obiekty z tej grupy,
- Change – w bazie docelowej trzeba zmienić obiekty z tej grupy
- Add – w bazie docelowej trzeba dodać obiekty z tej grupy
Jeżeli chcemy zobaczyć czym określone elementy w sekcji Change się różnią, to po kliknięciu na konkretny obiekt w dolnej części ekranu pojawi się podkreślenie dokładnie w którym miejscu dany element się różni:
W przypadku długich skryptów każda zmiana jest oznaczona na pasku po lewej stronie. Dodatkowo jeśli użyjemy paska przewijania to oba podglądy zostaną w przewinięte synchronicznie – co nieco upraszcza pracę. Gdy już wiemy które obiekty chcemy zsynchronizować to zaznaczamy checkboxa przy ich nazwie i klikamy przycisk generowania skryptu różnicowego:
w rezultacie otrzymamy skrypt różnicowy synchronizujący bazę docelową z bazą źródłową.
Tego typu podejście do wrzucania skryptów na serwer docelowy bywa użyteczne. Mimo wszystko jednak pamiętajmy o tym, że jest to “automat” więc nie należy mu bezgranicznie ufać i podejść do tego rozsądnie. Osobiście bardzo często używam tego narzędzia do porównywania bazy danych pomiędzy środowiskiem developerskim a produkcyjnym – wam również to zalecam gdyż jest to o wiele bardziej ustandaryzowane podejście niż własne skrypty porównujące lub (o zgrozo) ręczne sprawdzanie zmian.
- Avoiding Issues: Monitoring Query Pushdowns in Databricks Federated Queries - October 27, 2024
- Microsoft Fabric: Using Workspace Identity for Authentication - September 25, 2024
- Executing SQL queries from Azure DevOps using Service Connection credentials - August 28, 2024
Last comments