SlideShare a Scribd company logo
1 of 15
www.xedotnet.org
DbUp: a real case of
database migration
Marco Bortolin & Cirioni Andrea
DbUp
Programma:
26/05/17 2
Prima birra: parliamo di DbUp.
Seconda birra: esempio reale di utilizzo in azienda.
Terza birra: !@*? .
Come aggiornare il Database?
Alcuni metodi :
• Manual - copio tutti i file sul server e lancio “a-man”
tutti gli script per ogni database.
• Scripted - tramite PowerShell, semi-automatizzo
l’esecuzione degli script.
• Automation tools - utilizzo strumenti
come OctopusDeploy o Release Management per
distribuire in modo automatico il codice. Per il
database utilizzo strumenti di terze parti come
RedGate oppure le EF Migration.
26/05/17 3
La soluzione : DbUp
“helps you to deploy changes to SQL Server
databases. It tracks which SQL scripts have been run
already, and runs the change scripts that are needed
to get your database up to date
”
Official project website: http://dbup.github.io
26/05/17 4
La filosofia alla base del progetto
• Transactions, not States
• Database management:
• Source controlled.
• Testability.
• Continuous integration.
• No shared databases.
• Dogfooding upgrades.
• Versions table
• Sample data
• Migration libraries
26/05/17 5
I punti di forza
• Extensibility.
• Logging.
• Journaling.
• Code scripts.
• Pre-processor and variabile substitutions.
• Transactions.
26/05/17 6
Dove metto gli script
Script provider:
• EmbeddedScriptsProvider - SQL scripts as
embedded resources
• FileSystemScriptProvider - SQL scripts from the file
system
• StaticScriptProvider - SQL scripts defined in code
• EmbeddedScriptAndCodeProvider - SQL scripts
defined both as embedded resources and in code
26/05/17 7
Database supportati
Ver. 3.3.5
• SQL Server 2000, 2005, 2008, 2012, 2014, 2016
• SQL Azure
• SQLite
• SQLite.Mono
• SqlCe
• MySql
• PostgreSQL
• Firebird
Ver. 4.0.0 (Beta.1)
• .NET Core
• Coming soon: Xamarin, PCL
26/05/17 8
DEMO
26/05/17 9
DbUp
https://github.com/bortolin/XeDotNet.DbUp.Demo
Come lavoravamo?
Il nostro processo di deployment database, prima di DbUp,
prevedeva l’utilizzo di SourceSafe come repository per gli
script e la generazione di un eseguibile avviato manualmente
permetteva l’aggiornamento della base dati.
I problemi erano diversi, tra cui:
• Esecuzione non transazionale.
• Difficoltà nel riconoscere eventuali errori d’aggiornamento.
• Tracciabilità complessa.
• Rilascio degli script sul server del cliente.
• Utilizzo di un repository datato.
26/05/17 10
Il nostro approccio
La soluzione attuale si basa su alcuni punti chiave:
• Gestione a revisioni.
• Integrazione all'interno della nostra deployment pipeline su
TFS.
• Storicizzazione script all’interno della soluzione.
• Creazione di uno strato di software che facilitasse sia il team
di sviluppo che l'assistenza negli aggiornamenti intermedi
(Developer Mode).
• Provider di logging custom.
26/05/17 11
DEMO
26/05/17 12
Esempi pratici
Approndimenti sulle features
Vediamo ora alcune caratteristiche utili della libreria :
• Helper TemporarySqlDatabase & AdHocSqlRunner : da
utilizzare in ambito unit test.
• Parsing dello script prima che venga eseguito tramite
l’interfaccia IScriptPreprocessor.
• Utilizzo della classe di Journaling NullJournal() per
consentire l’esecuzione di script indipendenti (ex. Pre-Post
processo)
26/05/17 13
Links
• DbUp official project site
http://dbup.github.io/
• DbUp on GitHub
https://github.com/DbUp/DbUp
• Documentazione DbUp
http://dbup.readthedocs.io/en/latest/
• Handling Entity Framework database migrations in production
http://www.thereformedprogrammer.net/handling-entity-framework-
database-migrations-in-production-part-1-applying-the-updates/
• DbUp Package Manager Console Scripts
https://github.com/bradyholt/dbup-consolescripts
• DbUp discussion group google
https://groups.google.com/forum/?fromgroups#!forum/dbup-discuss
26/05/17 14
Fine
Grazie a tutti.
26/05/17 15
Marco Bortolin
m.bortolin@hunext.com
Twitter: @marcobortolin
Andrea Cirioni
a.cirioni@hunext.com
Twitter: @cirio
www.hunext.com

More Related Content

What's hot

Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiAndrea Dottor
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioPar-Tec S.p.A.
 
.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il MobilePietro Libro
 
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...Natale Vinto
 
I linguaggi di programmazione e il mondo open-source
I linguaggi di programmazione e il mondo open-sourceI linguaggi di programmazione e il mondo open-source
I linguaggi di programmazione e il mondo open-sourceBergamo Linux Users Group
 
Progetto Linux va a scuola - Descrizione tecnica
Progetto Linux va a scuola - Descrizione tecnicaProgetto Linux va a scuola - Descrizione tecnica
Progetto Linux va a scuola - Descrizione tecnicaBergamo Linux Users Group
 
ASP.NET Core Web Framework Benchmarks
ASP.NET Core Web Framework BenchmarksASP.NET Core Web Framework Benchmarks
ASP.NET Core Web Framework BenchmarksNicolò Carandini
 

What's hot (11)

Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi reali
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studio
 
.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile
 
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
 
I linguaggi di programmazione e il mondo open-source
I linguaggi di programmazione e il mondo open-sourceI linguaggi di programmazione e il mondo open-source
I linguaggi di programmazione e il mondo open-source
 
Progetto Linux va a scuola - Descrizione tecnica
Progetto Linux va a scuola - Descrizione tecnicaProgetto Linux va a scuola - Descrizione tecnica
Progetto Linux va a scuola - Descrizione tecnica
 
Progetto Linux va a scuola
Progetto Linux va a scuolaProgetto Linux va a scuola
Progetto Linux va a scuola
 
Tile server
Tile serverTile server
Tile server
 
ASP.NET Core Web Framework Benchmarks
ASP.NET Core Web Framework BenchmarksASP.NET Core Web Framework Benchmarks
ASP.NET Core Web Framework Benchmarks
 
Anatomia di un progetto open-source
Anatomia di un progetto open-sourceAnatomia di un progetto open-source
Anatomia di un progetto open-source
 
Introduzione a Docker
Introduzione a DockerIntroduzione a Docker
Introduzione a Docker
 

Similar to DbUp - A real case of database migration

Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Andrea Dottor
 
Database project alla riscossa
Database project alla riscossaDatabase project alla riscossa
Database project alla riscossaGian Maria Ricci
 
Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web AppsAndrea Dottor
 
ASP.NET Core Services e Linux per il Mobile - Pietro Libro - Codemotion Rome...
ASP.NET Core Services e Linux per il Mobile  - Pietro Libro - Codemotion Rome...ASP.NET Core Services e Linux per il Mobile  - Pietro Libro - Codemotion Rome...
ASP.NET Core Services e Linux per il Mobile - Pietro Libro - Codemotion Rome...Codemotion
 
Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Mauro Servienti
 
Il "rilascio" con Octopus Deploy (visto dagli occhi di un dev)
Il "rilascio" con Octopus Deploy (visto dagli occhi di un dev)Il "rilascio" con Octopus Deploy (visto dagli occhi di un dev)
Il "rilascio" con Octopus Deploy (visto dagli occhi di un dev)Carlo Fedeli
 
Node.js - Server Side Javascript
Node.js - Server Side JavascriptNode.js - Server Side Javascript
Node.js - Server Side JavascriptMatteo Napolitano
 
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-servicePower BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-serviceMarco Pozzan
 
Crea servizi REST per la tua App con ASP.NET 5
Crea servizi REST per la tua App con ASP.NET 5Crea servizi REST per la tua App con ASP.NET 5
Crea servizi REST per la tua App con ASP.NET 5Andrea Dottor
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Wellnet srl
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Eugenio Minardi
 
Applicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore RomeoApplicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore Romeomarcocasario
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaXPeppers
 

Similar to DbUp - A real case of database migration (20)

Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
 
Database project alla riscossa
Database project alla riscossaDatabase project alla riscossa
Database project alla riscossa
 
Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
Containerized Liferay
Containerized LiferayContainerized Liferay
Containerized Liferay
 
Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web Apps
 
Tesi8
Tesi8Tesi8
Tesi8
 
Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
ASP.NET Core Services e Linux per il Mobile - Pietro Libro - Codemotion Rome...
ASP.NET Core Services e Linux per il Mobile  - Pietro Libro - Codemotion Rome...ASP.NET Core Services e Linux per il Mobile  - Pietro Libro - Codemotion Rome...
ASP.NET Core Services e Linux per il Mobile - Pietro Libro - Codemotion Rome...
 
Docker & DevOps
Docker  & DevOpsDocker  & DevOps
Docker & DevOps
 
Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010
 
Infrastructure as Data
Infrastructure as DataInfrastructure as Data
Infrastructure as Data
 
Il "rilascio" con Octopus Deploy (visto dagli occhi di un dev)
Il "rilascio" con Octopus Deploy (visto dagli occhi di un dev)Il "rilascio" con Octopus Deploy (visto dagli occhi di un dev)
Il "rilascio" con Octopus Deploy (visto dagli occhi di un dev)
 
Node.js - Server Side Javascript
Node.js - Server Side JavascriptNode.js - Server Side Javascript
Node.js - Server Side Javascript
 
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-servicePower BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
 
Crea servizi REST per la tua App con ASP.NET 5
Crea servizi REST per la tua App con ASP.NET 5Crea servizi REST per la tua App con ASP.NET 5
Crea servizi REST per la tua App con ASP.NET 5
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Database Data Aggregator
Database Data AggregatorDatabase Data Aggregator
Database Data Aggregator
 
Applicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore RomeoApplicazioni HTML5 Superveloci - Salvatore Romeo
Applicazioni HTML5 Superveloci - Salvatore Romeo
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastruttura
 

DbUp - A real case of database migration

  • 1. www.xedotnet.org DbUp: a real case of database migration Marco Bortolin & Cirioni Andrea
  • 2. DbUp Programma: 26/05/17 2 Prima birra: parliamo di DbUp. Seconda birra: esempio reale di utilizzo in azienda. Terza birra: !@*? .
  • 3. Come aggiornare il Database? Alcuni metodi : • Manual - copio tutti i file sul server e lancio “a-man” tutti gli script per ogni database. • Scripted - tramite PowerShell, semi-automatizzo l’esecuzione degli script. • Automation tools - utilizzo strumenti come OctopusDeploy o Release Management per distribuire in modo automatico il codice. Per il database utilizzo strumenti di terze parti come RedGate oppure le EF Migration. 26/05/17 3
  • 4. La soluzione : DbUp “helps you to deploy changes to SQL Server databases. It tracks which SQL scripts have been run already, and runs the change scripts that are needed to get your database up to date ” Official project website: http://dbup.github.io 26/05/17 4
  • 5. La filosofia alla base del progetto • Transactions, not States • Database management: • Source controlled. • Testability. • Continuous integration. • No shared databases. • Dogfooding upgrades. • Versions table • Sample data • Migration libraries 26/05/17 5
  • 6. I punti di forza • Extensibility. • Logging. • Journaling. • Code scripts. • Pre-processor and variabile substitutions. • Transactions. 26/05/17 6
  • 7. Dove metto gli script Script provider: • EmbeddedScriptsProvider - SQL scripts as embedded resources • FileSystemScriptProvider - SQL scripts from the file system • StaticScriptProvider - SQL scripts defined in code • EmbeddedScriptAndCodeProvider - SQL scripts defined both as embedded resources and in code 26/05/17 7
  • 8. Database supportati Ver. 3.3.5 • SQL Server 2000, 2005, 2008, 2012, 2014, 2016 • SQL Azure • SQLite • SQLite.Mono • SqlCe • MySql • PostgreSQL • Firebird Ver. 4.0.0 (Beta.1) • .NET Core • Coming soon: Xamarin, PCL 26/05/17 8
  • 10. Come lavoravamo? Il nostro processo di deployment database, prima di DbUp, prevedeva l’utilizzo di SourceSafe come repository per gli script e la generazione di un eseguibile avviato manualmente permetteva l’aggiornamento della base dati. I problemi erano diversi, tra cui: • Esecuzione non transazionale. • Difficoltà nel riconoscere eventuali errori d’aggiornamento. • Tracciabilità complessa. • Rilascio degli script sul server del cliente. • Utilizzo di un repository datato. 26/05/17 10
  • 11. Il nostro approccio La soluzione attuale si basa su alcuni punti chiave: • Gestione a revisioni. • Integrazione all'interno della nostra deployment pipeline su TFS. • Storicizzazione script all’interno della soluzione. • Creazione di uno strato di software che facilitasse sia il team di sviluppo che l'assistenza negli aggiornamenti intermedi (Developer Mode). • Provider di logging custom. 26/05/17 11
  • 13. Approndimenti sulle features Vediamo ora alcune caratteristiche utili della libreria : • Helper TemporarySqlDatabase & AdHocSqlRunner : da utilizzare in ambito unit test. • Parsing dello script prima che venga eseguito tramite l’interfaccia IScriptPreprocessor. • Utilizzo della classe di Journaling NullJournal() per consentire l’esecuzione di script indipendenti (ex. Pre-Post processo) 26/05/17 13
  • 14. Links • DbUp official project site http://dbup.github.io/ • DbUp on GitHub https://github.com/DbUp/DbUp • Documentazione DbUp http://dbup.readthedocs.io/en/latest/ • Handling Entity Framework database migrations in production http://www.thereformedprogrammer.net/handling-entity-framework- database-migrations-in-production-part-1-applying-the-updates/ • DbUp Package Manager Console Scripts https://github.com/bradyholt/dbup-consolescripts • DbUp discussion group google https://groups.google.com/forum/?fromgroups#!forum/dbup-discuss 26/05/17 14
  • 15. Fine Grazie a tutti. 26/05/17 15 Marco Bortolin m.bortolin@hunext.com Twitter: @marcobortolin Andrea Cirioni a.cirioni@hunext.com Twitter: @cirio www.hunext.com