SQL Server Continuous Deployment

Ake nastroje a postupy pouzivate na vyvoj a udrziavanie databazovych projektov, najma ak databaza je uz v produkcii?

  1. SQL Management Studio + ukladanie change scriptov ma nevyhodu, ze update ide iba jednyn smerom a hoci je vyvoch super jednoduchy, vsetko ostatne je uz tazkopadne. V minulosti som to skombinoval zo skvelym nastrojom SQL Delta, ktory vizualne prezentoval zmeny v scheme aj datach a vygenerovat migracne skripty.

  2. Entity Framework Core Migrations funguje celkom fajn, ale iba pri Code First. Vacsinu limitacii sa mi podarilo obist jednoduchym skriptom, ktory som spusal vzdy pred, alebo po migracii. Napriklad zapnutie fulltext search. Na existujuce projekty to ale nieje v ziadnom pripade cesta.

  3. Visual Studio Database Project je super, ale nikdy sa mi nepodarilo spravit schopny automatizovany deployment.

Chcelo by to nejaky podobny nastroj ako Database Project, ale s migraciami namiesto porovnavania.

Ja kedže RavenDB je objektová databáza a týchto problémov máme už pomenej, tak som kedysi dávno používal dva tooly.

  1. NHibernate Schema Update, ten mam pocit vedel vygenerovat updaty sam
  2. RedGate sql compare https://www.red-gate.com/products/sql-development/sql-compare/

V produkcii som sa zatial stretol s generovanim SQL skriptov s EF, pretoze administratori chcu mat uplnu konktrolu nad tym, co sa nad databazou spusta.

Entity Framework Core Migrations - vies priamo do migracii pridat vygenerovanie fulltextu a podobnych veci, mne to zatial na sukromnych projektoch fungovalo (samozrejme nemusi ist len o fulltext).
https://github.com/dotnet/efcore/issues/11488#issuecomment-570398993

Visual Studio Database Project, ak ide o zlozitejsie operacie ako len zmena struktury, tak by to slo heknut cez tabulku migracii a pre-skriptom (trie sa myslim vykonavaju vzdy). No suhlasim, ze to nie je nativne riesnie.

  1. NHibernate Schema Update, ten mam pocit vedel vygenerovat updaty sam

To je to iste ako Entity Framework Core Migrations?

  1. RedGate sql compare https://www.red-gate.com/products/sql-development/sql-compare/
    V com je to ine, ako deploy .dacpac (output s Database Projectu)

RedGate mal VS projekt velmi podobny ako staremu dobremu Database Projectu, ale namiesto schema compare sa tam pisali migracie: Redgate SQL Change Automation. Ale nikdy som to nepouzil, navyse je to teraz to stoji 3000 eur

No praveze mne to nefungovalo, rovnako ako kopec inych veci, lebo:

But there is an issue with Web Deploy not honoring suppressTransaction .

Ad EF migrations: neviem, nemam skusenosti s EF, ako pisem bolo to uz davno, nam ale update schema v NHibernate fungoval, ono to malo dva mody, jeden, ze si isiel oproti live databaze a druhy, ze ti predgeneroval sql prikazy na update, a ty si ich mohol vytunovat a aplikovat manualne.
ad RedGate: mam licenciu v ramci starych MVP benefitov, takze pre mna to az tak drahe nebolo, ale fungovalo to celkom pekne dal si prod db a devel db a vygenerovalo potrebne scripty, ty si ich uz len zaintegroval do aplikacie.

Vratme sa ale k teme migracii db. Co som mal zatial skusenosti, tak sa najlepsie osvedcil sposob zapisovat verziu db do db a robit update podla verzie db, to znamena, ze sa program/service nespustil ak verzia databazy nezodpovedala verzii, pre ktoru bola aplikacia vyvinuta. To samozrejme predpoklada osobitny DB updater, ktory ak je win aplikacia mohol byt sucastou aplikacie, v pripade service/web aplikacii bol osobitnym projektom.
A najlepsie sa osvedcilo upgrade cez predgenerovane sql scripty, nejaky magic zavanal casom problemami.

Prave sa na WUG-u objavila prednaska na tuto temu (este som ju nevidel).

https://wug.cz/zaznamy/620-SQL-Server-Bootcamp-2020-Jak-dostat-zdrojovy-kod-databaze-pod-kontrolu-migration-nebo-state-based

1 Like

Prednaska je velmi relevantna k teme, diky. Prislo ako na zavolanie.

V skratke:
SSDT (Database Project)

  • :+1: super pre vyvojarov
  • :+1: odhalenie chyb, kedze pri builde sa validuje cely projekt. Napriklad pri premenovani stlpca sa zvaliduju vsety views
  • :+1: lahsi code review
  • :disappointed: lahko moze z produkcie zmiznut napr nejaky index, ak ho tam admin manualne pridal
  • :disappointed: tazsie sa do pipelineny intergruje review change scriptov

DpUp, FlyWay:

  • automatizuju deployovanie migracii
  • :+1: uplna kontrola nad skriptami, ktore sa spustaju
  • :+1: jednoduche a rychle
  • :disappointed: nachylnejsie na chyby: po spusteni migracie sa databaza lahko dostane nevalidneho stavu. Napr po premenovani stlpca zabudneme updatnut views
  • :disappointed: ak migracie pise viacero ludi naraz, jedna migracia moze prepisat zmeny v druhej a velmi tazko sa to odhaluje v code review, kedze nevznikde ziadny conflikt v source controle

Redgate Sql Change Automation:

  • :+1: Kombinuje state a migration based pristupy - to najlepsie z oboch pristupov
  • :+1: Podobne ako SSDT validuje vysledny stav, zaroven umoznuje pisat alebo customizovat migracie.
  • :disappointed: cena 3500 USD