[MSSQL] Vergelijken, kopiëren en upgraden tussen 2 databases

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
Ik merk regelmatig dat we bij het publishen van een .Net-(web)applicatie naar een andere server (zoals de live of testserver) regelmatig tegen de zelfde problemen aanlopen. Het feit dat verschillende servers verschillende settings kunnen hebben, hebben we redelijk getackeld. Maar de achilleshiel van het hele systeem is de database. Wat gewoon heel vaak gebeurt is dat developer A een publish doet en dan blijkt dat developer B in een obscuur tabelletje nog een kolommetje heeft toegevoegd, of een stored procedure is aangepast of toegevoegd, etcetera. Bij de software zelf ondervang je dat door een bepaalde vorm van source control, maar dat heb je niet in die vorm bij databases. Ook loop je tegen problemen aan als de doeldatabase al live data bevat.

Voor mij zou de ideale procedure er als volgt uit zien:

- Een vergelijking van alle objecten in de database zowel qua structuur als inhoud
- Aangeven wat je wilt overschrijven / toevoegen / verwijderen (nieuwe sprocs, nieuwe tabellen, oude tabellen er uit)
- Aanpassen van bepaalde tabellen (kolom er bij of er af of nieuwe foreign key bijvoorbeeld) en hoe dat te doen (eerst leeggooien, dummy waardes in nieuwe verplichte kolommen, etc.)
- Kopieren van gegevens (inhoud van steuntabellen bijvoorbeeld)
- Nogmaals vergelijken qua structuur en inhoud om te zien of het klopt

SQL Manager biedt naar mijn weten geen echte mogelijkheid om databases te vergelijken, laat staan op een gracieuze manier een upgrade te doen, zeker als er al data in zit. Er zijn wel een shitload een 3rd party tools maar voordat ik die allemaal geïnstalleerd en getest heb. En ik weet ook niet precies hoe alle features genoemd worden die ik zoek.

Wie heeft er wat meer ervaring mee?

iOS developer


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Je weet dat er al wat topics over bestaan?

[ Voor 76% gewijzigd door RobIII op 19-08-2009 09:21 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Evilbee
  • Registratie: November 2002
  • Laatst online: 10:42
Ik heb hetzelfde probleem gehad met MySQL databases.

De uiteindelijke oplossing was zelf een script schrijven die de complete structuur van de database uitleest en gaat vergelijken. Volgens mij hadden we dit in twee uurtjes voor elkaar (in PHP).

Hiervoor bestaande tools vinden, die ook nog deden wat wij wilden bleek lastig...

LinkedIn - Collega worden?


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Ga eens naar de website van Red-gate. Die hebben producten zoals SQL Compare (database schema) en SQL Data Compare (inhoud van tabellen). Beide programma's werken erg simpel. Je geeft de source en target database op en klikt op 'compare'. Nadat de analyse is voltooid kun je kiezen of je Sql (data) compare zelf de wijzigingen wil laten doorvoeren (op de target) of dat deze naar meerdere .sql bestanden geschreven moeten worden. Dat laatste is vooral handig als je niet allen klant database kunt updaten.

Maar dit soort tools zijn natuurlijk slechts een workaround. Database wijzigingen zijn onderdeel van het project en elke keer als een developer een wijziging maakt aan de database, moet ie gewoon even op het 'script' icon klikken (of beter deze optie standaard aanzetten via options) en het .sql script toevoegen aan een Visual Studio database project liefst nog met een soort van version control zoals TFS, SourceSafe of SVN.

Wij gebruiken SQL Compare eigenlijk alleen als er bij de klant een probleem is en men niet direct een verschil in de database kan ontdekken. SQL Data compare is iets lastiger te gebruiken omdat je als snel in klant data aan het vergelijken bent en je dus zeer precies moet aangeven welke tabellen wel en niet vergeleken moeten worden op inhoud.

Maar hebben jullie dan geen software architect / development manager welke bepaald wat er gemaakt moet worden en op welke manier? Een developer behoort daarnaast ook geen release te doen. Dat is de taak van de development manager / architect. Deze dient ook vervolgens is de issue database aan te geven welke issue met deze release zijn opgelost (anders weet het test team niet wat ze extra moeten testen).

Ik denk dat jullie gewoon eens even met z'n allen bij elkaar moeten gaan zitten en wat procedures omtrent development moeten afspreken. In vaktermen noemen we dat Application Lifecycle Management (ALM).

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Voor datacompare heb ik een simpel excel sheet gemaakt.

Je geeft twee connecties string op selecteert een van de predefined queries of voert handmatig een query in. En dan laad de excel sheet automatisch de data in twee sheets. Vergelijkt de sheets en markeert alles wat is gewijzigd en markeert ook de column naam.

Daarna maakt hij nog een derde sheet waar alleen de wijzigingen in staan.

Dit gebruik ik om test en live data te testen.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:51
Ik ga er van uit dat je een manier zoekt om je database (die evt bij klatnen staat) makkelijk te kunnen upgraden ?

Voor een vorig project gebruikte ik de RedGate tools zoals Niemand_Anders al zei.
We hielden ons 'baseline' script bij en alle patches.
Als er een aanpassing in de DB moest gebeuren (qua structuur), maakten we een nieuwe database (baseline script uitvoeren en alle patches vanaf die versie uitvoeren).
Dit deden we 2x.
De eerste DB die hieruit voortvloeide lieten we ongemoeid. Op de tweede DB gingen we de nodige aanpassingen gaan doen.
Nadien gebruikten we RedGate SQL Compare om deze 2 DB's te vergelijken, en lieten we die RedGate tool ook een script genereren zodanig dat we een script (patch) hadden om de vorige versie naar de nieuwe versie te krijgen.

Voor m'n huidige project gebruik ik de Migrator.NET library.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
We gaan Red-Gate testen en dbForge, die zag er zo op het eerste ook goed uit en is 450 euro goedkoper dan de twee Red-Gate pakketten samen. Ik denk in ieder geval dat we zo op het goede spoor zitten nu. De reden dat we nog niet met dit soort tools werkten is omdat we eigenlijk nog een beetje op de ouderwetse asp-methodiek niveau zaten en we nu echt naar een volwassen ontwikkelstraat gaan.

Bedankt voor jullie antwoorden, ik ben geholpen :)

[ Voor 6% gewijzigd door BikkelZ op 19-08-2009 11:17 ]

iOS developer


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Overigens is dbForge slechts 300 euro goedkoper dan de twee RedGate pakketten samen. DbForge Data en Schema compare kosten ieder 149 euro echter ben je dan wel beperkt tot drie database engines (mssql, oracle en mysql). RedGate werkt met elke database waarvoor een ado.net driver is geïnstalleerd.

Echter het prijs argument wat nu al naar voren komt stemt mij een beetje somber. Zeker tools zoals Resharper, Sql data Compare, (RG) Ants, memory profilers, etc zijn hun geld dubbel en dwars waard. Dat zijn investeringen voor de toekomst. Op het moment dat je het eigen zak moet betalen kan ik het prijs argument wel begrijpen, maar niet bij bedrijven.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Wij werken regelmatig met erg veel software engineers aan grote projecten, bij ons is er hele simpele regel, alles qua database dient netjes gescript te worden, dus als een tabel, of wat dan ook wijzigt, dan dient dit via een alter table script te gebeuren, moet ook wel op deze manier want onze applicatie beheerders gaan echt niet handmatig table's lopen te editen op productie omgevingen. Die hebben gewoon 1 script, waarin alle db wijzigingen zitten. Volgens mij is het trouwens ook mogelijk om automatisch versie controle te doen op je database objecten.

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
Twee dingen die ik buiten de tools hier nog ga voorstellen zijn:

- Een release manager aanstellen (al zal dat toch een van de developers zijn voorlopig)
- Alles met update scripts proberen te doen (ondersteund door door de tools)

Tja en Visual Studio voelt bij mij gewoon 'kapot' aan zonder ReSharper, volgens mij zijn echt meer dan de helft van de handelingen die ik doe binnen Visual Studio verbetered of alleen mogelijk met ReSharper _/-\o_

Maar als we inderdaad alleen maar Oracle en MSSQL gebruiken hier, is dat geen reden om een duurder pakket te nemen. Het moet gewoon doen wat het moet doen. Maar daar komen we de komende periode wel uit :)

[ Voor 18% gewijzigd door BikkelZ op 20-08-2009 08:55 ]

iOS developer


Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
Wat dbForge wel lekker deed was het genereren van een script voordat hij daadwerkelijk aan de gang ging met synchroniseren, ik mis die optie een beetje bij Red Gate. Of moet ik daar een andere tool voor gebruiken dan Comparer?

iOS developer


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

BikkelZ schreef op vrijdag 18 september 2009 @ 10:53:
Wat dbForge wel lekker deed was het genereren van een script voordat hij daadwerkelijk aan de gang ging met synchroniseren, ik mis die optie een beetje bij Red Gate. Of moet ik daar een andere tool voor gebruiken dan Comparer?
Bij redgate heb je bij vanaf stap 3 van de 'synchronisation wizard' de mogelijkheid om links onderin op 'view SQL script' te klikken. Dit werkt zowel voor Sql Compare en Sql Data Compare. Ik denk dat wat betreft features beide elkaar weinig zullen ontlopen.

RedGate onderhoud ook een andere (gratis) tool welke ik vaak gebruik, namelijk reflector.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • d00d
  • Registratie: September 2003
  • Laatst online: 16-09 13:23

d00d

geen matches

Er is ook nog een tool die wordt meegeleverd met SQL Server genaamd tablediff.exe.
Werkt uiteraard alleen op table niveau, hier is de output van "tablediff.exe /?", vooral de -f optie is mooi:

Microsoft (R) SQL Server Replication Diff Tool
Copyright (c) 2008 Microsoft Corporation

User-specified agent parameter values:
/?

Replication Diff Tool Command Line Options

usage: tablediff

-- Source Options --
-sourceserver Source Host
-sourcedatabase Source Database
-sourceschema Source Schema Name
-sourcetable Source Table or View
-sourceuser Source Login
-sourcepassword Source Password
-sourcelocked Lock the source table/view durring tablediff

-- Destination Options --
-destinationserver Destination Host
-destinationdatabase Destination Database
-destinationschema Destination Schema Name
-destinationtable Destination Table or View
-destinationuser Destination Login
-destinationpassword Destination Password
-destinationlocked Lock the destination table/view durring tablediff

-- Misc Options --
-t Timeout
-c Column Level Diff
-f Generate Fix SQL (You may also specify a file name and path)
-q Quick Row Count
-et Specify a table to put the errors into
-dt Drop the error table if it exists
-o Output file
-b Number of bytes to read for blob data types
-strict Strict compare of source and destination schema
-rc Number of retries
-ri Retry interval

42.7 percent of all statistics are made up on the spot.


Acties:
  • 0 Henk 'm!

  • HansvDr
  • Registratie: Augustus 2009
  • Niet online
Wij gebruiken AdeptSQLDiff ( http://www.adeptsql.com/ ) werkt perfect en is niet zo duur (320 dollar compleet)
Pagina: 1