Distribuer automatisk og versjon din SQL Server-database med SSDT

Av Keith Schreiner

Jeg har lest og blitt fortalt mange ganger at det er en "beste praksis" å versjonskontrollere databasen min. For å gjøre det har jeg prøvd tidligere verktøy fra Microsoft, RedGate og andre, men ingen har virkelig fanget på for meg. Jeg har ikke mislikt den “rotete” prosessen med å måtte administrere flere SQL-skript når jeg oppgraderer en produksjonsdatabase. Men Microsofts siste (gratis) verktøy, SQL Server Data Tools (SSDT), har gjenopprettet min tro på at versjon av databasen ikke skal være en fryktelig oppgave.

Definere

SSDT tilfører Visual Studio mye funksjonalitet for å jobbe med SQL Server-databaser. De viktigste tingene den legger til er et "SQL Server Database Project" og noe som kalles en DACPAC (Data-Tier Application Package). En DACPAC er en enkelt distribusjonsfil som inneholder hele databaseskjemaet og noen relaterte SQL-filer (som oppslagsdata), i utgangspunktet alt for å distribuere en ny versjon av databasen i en fil. Det ligner på en BACPAK, som er en DACPAC pluss alle dataene i hver tabell (som en standard database-sikkerhetskopi). Men før vi snakker mer om DACPAC, la oss diskutere hva SSDT legger til med SQL Server Database Project.

Utvikle

I Visual Studio har du, etter å ha opprettet et nytt SQL Server Database Project, et alternativ å importere en database, som fint lager SQL-skript av alle dine databaseobjekter (tabeller, visninger, lagrede prosedyrer og mer). Det neste trinnet jeg gjør er å lage en "Data" -mappe og legge til et SQL-skript etter distribusjon for å fylle oppslagsdataene og eventuelt lage noen testdata.

I et databaseprosjekt kan du bare ha en post-distribusjon og en pre-distribusjonsfil, så det er en god praksis å bruke SQLCMD-syntaks for å inkludere andre filer i hovedfilen for å hjelpe til med organisering og vedlikehold. Når du lager disse SQL-skriptene, eller redigerer SQL for tabellene eller lagrede prosedyrer, vil du begynne å legge merke til alt det andre SSDT legger til Visual Studio: SQL IntelliSense, SQL-kodnavigasjon, en SQL Server Object Explorer, feilsøking av SP, enhetstester for SP, en visuell tabelldesigner, et skjema Sammenlign verktøy, et Data Sammenlign verktøy og mer. Alle disse funksjonene gjør at databaseutvikling og vedlikehold føles naturlig i Visual Studio.

Utplassere

Etter å ha gjort databaserendringene, er neste trinn å distribuere dem, og SSDT gir flere måter. Den første måten er "Publiser", som fungerer bra hvis du har en direkte forbindelse til databasen fra Visual Studio-maskinen din (som til din lokale eller "Dev" -database). Høyreklikk på databaseprosjektet og velg "Publiser ..." som åpner en dialog for å lagre en profil. Når en profil er lagret som en del av prosjektet ditt, kan du bare dobbeltklikke på det for å publisere databaseprosjektet ditt direkte i databasen eller bare for å generere et skript med endringene som den vil kjøre.

Den andre måten er å bruke en DACPAC, som vi snakket om over, når utviklere ikke har tilgang til måldatabasen (som for Produksjon). For å lage en DACPAC, høyreklikk bare på databaseprosjektet og velg “Snapshot Project”, som deretter oppretter en DACPAC i prosjektets “Snapshots” -mappe. Så for å distribuere denne DACPAC har du flere alternativer. Hvis du har en DBA som alltid bruker databaseoppdateringer, kan du gi ham eller henne DACPAC til å bruke ved hjelp av SSMS (SQL Server Management Studio), som har en innebygd "Upgrade Data-tier Application" -oppgave; den bruker en veiviser for å bruke endringene (og lar alle endringer bli vurdert for problemer, som mulig tap av data, på hvert trinn).

Et annet DACPAC-distribusjonsalternativ er å kalle “SqlPackage.exe” (med kommandolinjeparametere) eller å skrive noen C # -koder (fra Microsoft.SqlServer.Dac-navneområdet) som distribuerer selve DACPAC. Dette gjør distribusjonen automatisk, nesten til et punkt der du ikke trenger å bekymre deg for det.

Virkelighetseksempel

På det første prosjektet jeg brukte SSDT (et nytt MVC-nettsted) møtte jeg tre problemer med SSDT. Slik løste jeg dem og forenklet databaseutviklingen kraftig. Først ville jeg bare distribuere DACPAC automatisk på nettstedets Application_Start når databasen faktisk hadde endret seg. Så jeg la til et stykke logikk for å se etter et nytt versjonsnummer i den siste DACPAC før jeg brukte den. Versjonsnummeret til DACPAC er angitt i databaseprosjektegenskapene -> Prosjektinnstillinger -> Egenskaper-dialogboksen, og den nåværende databaseversjonen er lagret i systemtabellen, msdb.dbo.sysdac_instances_internal . Når dette versjonsnummeret ikke bare gjorde oppstarten raskere, gjorde det andre oppmerksom på en "databaseversjon".

Det andre problemet var hvordan du konfigurerte databaseprosjektet for å inkludere "testdata" for Dev-databasen, men ekskluderer det for Produksjon. Dette ble oppnådd ved å lage et andre databaseprosjekt (DatabaseAndTestData), som hadde en "databasehenvisning" til det første prosjektet. I dette andre prosjektet inkluderer skriptet etter distribusjon det første prosjektets skript etter distribusjon og deretter alle testdataene. Jeg brukte det første prosjektet (uten testdata) for å lage DACPAC for Produksjon, og publiserte så det andre prosjektet (med testdata) direkte til Dev.

Til slutt klagde noen utviklere over at de etter å ha oppdatert skjemaet eller oppslagsdata, fortsatt må gjøre flere kjedelige og repeterende oppgaver for å få DACPAC klar til å bli distribuert. For å løse dette skrev jeg et enkelt program (UpdateDatabaseVersion.exe) som kan kalles fra “Solution Explorer” i databaseprosjektet ved hjelp av Visual Studio-utvidelsen, “VSCommands”. Det øker databaseversjonsnummeret, oppretter DACPAC og legger det deretter i riktig mappe for distribusjon. Ved å implementere disse SSDT-prosessene effektiviserte det teamets databaserelaterte oppgaver, slik at vi kunne bruke mer tid på andre oppgaver.

Konklusjon

I det siste føltes det å gjøre en endring i en database som en lang, komplisert prosess med å gjøre et skjemaendring (forhåpentligvis riktig databaseversjon), manuelt opprette et endringsskript, minne på distribusjonspersonen om databaserendringen og krysse fingrene mine at alt gikk riktig. Med SSDT har all denne usikkerheten forsvunnet. SSDT er et flott verktøy som gjør det enkelt å lage, distribuere og versjon dine SQL Server-databaseoppdateringer. For å lære mer, last ned prøvekoden, som viser hvordan du automatisk distribuerer og versjonerer en SQL Server-database.

Merknader:

  • SSDT-nettsted: http://msdn.microsoft.com/en-us/data/tools
  • SSDT installert i: C: \ Program Files (x86) \ Microsoft SQL Server \ 110 \ DAC \ bin \
  • SSDT-versjon brukt: juli 2013 med Visual Studio 2012
  • VSCommands Extension: http://vscommands.squaredinfinity.com/

Keith Schreiner er programvarearkitekt med Geneca, et tilpasset programvareutviklingsselskap med base i Chicago. Han har over 15 års erfaring med å jobbe i programvareutviklingsindustrien.

© Copyright 2021 | pepebotifarra.com