Vă mulțumim pentru susținere

Versiunea bazei de date SQL Server

Vreau să obțin bazele mele de date sub controlul versiunii. Are cineva sfaturi sau articole recomandate pentru a mă face să încep?

Vreau întotdeauna să aibă cel puțin unele date acolo (așa cum se face alumb : utilizatorul tipuri și administratori). De asemenea, de multe ori vreau o colecție mare de date de testare generate pentru măsurători de performanță.

0
adăugat editat
adăugat autor Marek Grzenkowicz
Aruncați o privire la această întrebare similară. stackoverflow.com/questions/56903/database-changes-versionin‌ g </ a >
adăugat autor stukelly
@ ashy_32bit Logică tipică stackoverflow / stackexchange. Asta nu-mi place despre acest site; o mulțime de lucruri bune sunt închise pentru motive proaste. Aproape niciodată nu pun întrebări din cauza asta. Am permisele moderatorului apropiat de schimbarea stack-ului de securitate și votez pentru a păstra-deschide / redeschide jumătate din firele care primesc voturi aproape.
adăugat autor Luc
154 upvotes și 146 favs și închis? ce este posibil?
adăugat autor ashy_32bit
[Versiuni baze de date - divizare și fuziune] link nou: odetocode.com/blogs/scott/archive/2008/02/03/…
adăugat autor Fil
De asemenea, aruncați o privire la această lucrare albă; Ghidul definitiv pentru controlul versiunii bazei de date www3.dbmaestro.com/&hellip ;
adăugat autor DBAstep

28 răspunsuri

Utilizăm DBGhost pentru a gestiona baza de date SQL. Apoi, puneți scripturile dvs. să construiască o nouă bază de date în controlul versiunii dvs. și fie va construi o nouă bază de date, fie va actualiza orice bază de date existentă la schema de control al versiunii. În acest fel nu trebuie să vă faceți griji cu privire la crearea scripturilor de schimbare (deși puteți face acest lucru, de exemplu, dacă doriți să schimbați tipul de date al unei coloane și trebuie să convertiți datele).

0
adăugat
Am folosit DbGhost timp de 10 ani și niciodată nu mă dezamăgește. Sprijinul pe care îl oferă este cel de-al doilea
adăugat autor penderi

Nu stocăm schița bazei de date, stocăm modificările în baza de date. Ceea ce facem este să stocăm modificările schemelor, astfel încât să construim un script de schimbare pentru orice versiune a bazei de date și să o aplicăm în bazele de date ale clienților noștri. Am scris o aplicație utilitar bază de date care se distribuie cu aplicația noastră principală, care poate citi acel script și cunoaște actualizările care trebuie aplicate. Ea are, de asemenea, suficiente inteligente pentru a reîmprospăta vizualizările și procedurile stocate după cum este necesar.

0
adăugat

Ați putea, de asemenea, să vă uitați la o soluție de migrare. Acestea vă permit să specificați schema bazei de date în codul C # și să vă rotiți versiunea bazei de date în sus și în jos folosind MSBuild.

În prezent, folosesc DbUp și funcționează bine.

0
adăugat

Dacă aveți o bază de date mică și doriți să versiune întregul lucru, poate ajuta. Se detașează, comprimă și verifică un fișier MDF din baza de date MSSQL în subversiune.

Dacă doriți mai mult să schimbați schema dvs. și aveți doar o cantitate mică de date de referință, puteți utiliza Migrații SubSonic pentru a rezolva problema. Beneficiul este că puteți migra cu ușurință în sus sau în jos la orice versiune specifică.

0
adăugat

Martin Fowler a scris articolul meu preferat pe această temă, http://martinfowler.com/articles/evodb.html. Eu aleg să nu pun schemă schematică sub controlul versiunii ca alumb , iar altele sugerează că vreau o modalitate ușoară de a-mi actualiza baza de date de producție.

Pentru o aplicație web unde voi avea o singură instanță de bază de producție, folosesc două tehnici:

Scripturi de upgradare de baze de date

A sequence Scripturi de upgradare de baze de date that contain the DDL necessary to move the schema from version N to N+1. (These go in your version control system.) A _version_history_ table, something like

create table VersionHistory (
    Version int primary key,
    UpgradeStart datetime not null,
    UpgradeEnd datetime
    );

primește o intrare nouă de fiecare dată când rulează un script de upgrade care corespunde cu noua versiune.

This ensures that it's easy to see what version of the database schema exists and that Scripturi de upgradare de baze de date are run only once. Again, these are not database dumps. Rather, each script represents the changes necessary to move from one version to the next. They're the script that you apply to your production database to "upgrade" it.

Sincronizarea Sandbox pentru dezvoltator

  1. Un script pentru copierea de rezervă, dezinfectarea și micșorarea unei baze de date de producție. Rulați acest lucru după fiecare upgrade la DB de producție.
  2. Un script pentru restaurarea (și optimizarea, dacă este necesar) a copiei de siguranță pe o stație de lucru a dezvoltatorului. Fiecare dezvoltator execută acest script după fiecare upgrade la DB de producție.

O avertizare: testele mele automate rulează împotriva unei baze de date corecte, dar corectă, astfel încât acest sfat nu se va potrivi perfect nevoilor dvs.

0
adăugat
Ceea ce este foarte frustrant este că un proiect de bază de date VS poate genera scripturile necesare pentru aceste actualizări de schemă, dar le va aplica în mod direct. Nu se va ocupa de lucrurile din istoria versiunii. Trebuie să faceți acest lucru manual și dacă chiar o dată uitați să adăugați manual scriptul de actualizare, sunteți înșurubat deoarece DB-ul dvs. va fi deja actualizat și proiectul DB nu va genera acel același script de actualizare din nou. Doresc să fi existat un tip de proiect care să gestioneze gestionarea bazei de date versiune .
adăugat autor Jez
@ răspunsul lui nikc.org, plus cârlige post-commit pentru automatizare.
adăugat autor Silviu-Marian
Am un obicei de a menține un script complet de creare și plasare, precum și de script-uri delta pentru actualizarea actualizărilor db existente la zi. Ambele merg în controlul versiunilor. Scripturile delta sunt numite în funcție de numerele de revizie. În acest fel este ușor să automatizezi patch-urile db cu un script de actualizare.
adăugat autor nikc.org
Spui că ai pus script-uri de upgrade în controlul sursei, nu-i pui niște răsturnări acolo?
adăugat autor A-K
Versiunea care controlează scripturile complete de schemă este foarte utilă în scopuri de referință. De exemplu, este imposibil să vedem exact ce a fost schimbat într-o procedură stocată prin examinarea instrucțiunii ALTER PROCEDURE.
adăugat autor Constantin
Dumping (și versiunea) schema DB completă după rularea de noi scripturi de upgrade este o modalitate bună de a face informații disponibile altor instrumente în procesul de construire / implementare. De asemenea, având schema completă într-un scenariu, înseamnă să puteți "roti" o nouă bază de date fără a trece prin toate etapele de migrare. De asemenea, face posibilă difuzarea versiunii curente împotriva versiunilor anterioare acumulate.
adăugat autor mlibby
Și eu fac asta, dar păstrez un fișier de backup obișnuit în controlul sursei în locul unui script de generație completă. Mai rapid și mai puțin predispus la probleme, din experiența mea. Ea face ușor mai ușor să difere între versiuni arbitrare, dar din nou, acest lucru nu se întâmplă adesea, iar scripturile de actualizare sunt perfect căutate, oricum, care ar fi suficiente, deoarece toate schimbările trec prin ele. De asemenea, pentru numerele de versiuni din interiorul DB-ului, am pus o Property Extended pe obiectul bazei de date. În acest fel, face parte din schemă în loc de o parte a datelo
adăugat autor Atario

E simplu.

  1. Când proiectul de bază este gata, atunci trebuie să creați un script complet de bază de date. Acest script este comis la SVN. Este prima versiune.

  2. După aceea toți dezvoltatorii creează scripturi de schimbare (ALTER ..., tabele noi, sproșuri etc.).

  3. Când aveți nevoie de versiunea curentă, atunci ar trebui să executați toate noile scripturi de modificare.

  4. Când aplicația este lansată la producție, atunci vă întoarceți la 1 (dar atunci va fi o versiune succesivă).

Nant vă va ajuta să executați acele scripturi de schimbare. :)

Si amintesteti. Totul funcționează bine atunci când există disciplină. De fiecare dată când se efectuează schimbarea bazei de date, atunci sunt comise și funcțiile corespunzătoare din cod.

0
adăugat
După câțiva ani spun: Utilizați FluentMigrator (sau un instrument similar pentru platforma dvs.).
adăugat autor dariol

De asemenea, folosesc o versiune în baza de date stocată prin familia de proceduri bazate pe baza de date extinsă. Aplicația mea are scripturi pentru fiecare etapă a versiunii (de ex. Treci de la 1.1 la 1.2). Când este implementat, se uită la versiunea curentă și apoi rulează scripturile unul câte unul până când ajunge la ultima versiune de aplicație. Nu există nici un script care să aibă versiunea directă "finală", chiar să implementeze pe un DB curat se implementează printr-o serie de etape de upgrade.

Now what I like to add is that I've seen two days ago a presentation on the MS campus about the new and upcoming VS DB edition. The presentation was focused specifically on this topic and I was blown out of the water. You should definitely check it out, the new facilities are focused on keeping schema definition in T-SQL scripts (CREATEs), a runtime delta engine to compare deployment schema with defined schema and doing the delta ALTERs and integration with source code integration, up to and including MSBUILD continuous integration for automated build drops. The drop will contain a new file type, the .dbschema files, that can be taken to the deployment site and a command line tool can do the actual 'deltas' and run the deployment. I have a blog entry on this topic with links to the VSDE downloads, you should check them out: http://rusanu.com/2009/05/15/version-control-and-your-database/

0
adăugat

Aveam nevoie de versiunea bazei de date SQL după ce am migrat pe o platformă x64 și versiunea veche a rupt cu migrarea. Am scris o aplicație C # care a folosit SQLDMO pentru a mapa toate obiectele SQL într-un dosar:

                Root
                    ServerName
                       DatabaseName
                          Schema Objects
                             Database Triggers*
                                .ddltrigger.sql
                             Functions
                                ..function.sql
                             Security
                                Roles
                                   Application Roles
                                      .approle.sql
                                   Database Roles
                                      .role.sql
                                Schemas*
                                   .schema.sql
                                Users
                                   .user.sql
                             Storage
                                Full Text Catalogs*
                                   .fulltext.sql
                             Stored Procedures
                                ..proc.sql
                             Synonyms*
                                .synonym.sql
                             Tables
                                ..table.sql
                                Constraints
                                   ...chkconst.sql
                                   ...defconst.sql
                                Indexes
                                   ...index.sql
                                Keys
                                   ...fkey.sql
                                   ...pkey.sql
                                   ...ukey.sql
                                Triggers
                                   ...trigger.sql
                             Types
                                User-defined Data Types
                                   ..uddt.sql
                                XML Schema Collections*
                                   ..xmlschema.sql
                             Views
                                ..view.sql
                                Indexes
                                   ...index.sql
                                Triggers
                                   ...trigger.sql

Aplicația va compara apoi noua versiune scrisă cu versiunea stocată în SVN și dacă ar exista diferențe pe care le-ar actualiza SVN. Am stabilit că executarea procesului o singură noapte a fost suficientă, deoarece nu facem multe modificări la SQL. Ne permite să urmărim modificările aduse tuturor obiectelor care ne interesează și ne permite să reconstruim schema noastră completă în cazul unei probleme grave.

0
adăugat
Oooh, ar fi grozav să-i faci publicului.
adăugat autor Chris Charabaruk

Am scris această aplicație cu ceva timp în urmă, http://sqlschemasourcectrl.codeplex.com/ care va scana SQL-ul dvs. MSFT db-urile sunt de câte ori doriți și dați automat obiectele (tabele, vizualizări, procs, funcții, setări sql) în SVN. Funcționează ca un farmec. Îl folosesc cu Unfuddle (care îmi permite să primesc alerte la checkins)

0
adăugat

Aici, la Red Gate oferim un instrument, SQL Source Control , care utilizează tehnologia SQL Compare pentru a vă conecta baza de date cu un depozit TFS sau SVN. Acest instrument se integrează în SSMS și vă permite să lucrați așa cum ați proceda în mod normal, cu excepția faptului că acum vă permite să vă angajați obiectele.

Pentru o abordare bazată pe migrații (mai potrivită pentru implementări automate), oferim ReadyRoll , care creează și gestionează un set de scripturi incrementale ca un proiect Visual Studio.

În SQL Source Control este posibilă specificarea tabelelor de date statice. Acestea sunt stocate în controlul sursă ca declarații INSERT.

Dacă vorbiți despre date de testare, vă recomandăm fie să generați date de testare cu un instrument sau printr-un script post-implementare pe care îl definiți, fie pur și simplu să restaurați o copie de siguranță a producției în mediul dev.

0
adăugat
Acest răspuns este un duplicat al răspunsului lui Dane postat cu doi ani mai devreme.
adăugat autor Knickerless-Noggins
Produs interesant (un pic de decalaj pe piață), dar deltas stocat ca "CREATE ..." mă sperie. Cum vă ramificați / fuzionați?
adăugat autor annakata
Stocăm definițiile obiectului ca CREATE, dar dacă "obțineți cele mai recente" sau, de exemplu, utilizați SQL Compare Pro pentru a genera scripturi de sincronizare, acestea se schimbă la comenzile corespunzătoare, cum ar fi ALTER. Pentru a ramifica sau a fuziona, pur și simplu ați folosi sistemul de control al sursei la fel ca în prezent.
adăugat autor David Atkinson
Este un răspuns diferit. Compararea SQL nu permite controlul versiunilor de baze de date, în timp ce SQL Source Control a fost proiectat special pentru aceasta.
adăugat autor David Atkinson

Cu VS 2010, utilizați proiectul Baze de date.

  1. Script out your database
  2. Make changes to scripts or directly on your db server
  3. Sync up using Data > Schema Compare

Efectuează o soluție perfectă de versiune DB, și face sincronizarea DB-ului o briză.

0
adăugat
Da, dar, din păcate, trebuie să vă amintiți să "generați scenariu" de fiecare dată. Dacă actualizați direct baza de date, veți pierde capacitatea de a genera scriptul de actualizare pentru acel delta. Dacă numai proiectele de bază de date ar avea unele funcții integrate pentru versiuni.
adăugat autor Jez

Vizitați DBGhost http://www.innovartis.co.uk/ . Am folosit într-un mod automat de 2 ani și funcționează excelent. Aceasta permite construirii bazelor de date DB să se întâmple ca o construcție Java sau C, cu excepția bazei de date. Ştii ce vreau să spun.

0
adăugat

Pentru a face ca depozitul într-un sistem de control al codului sursă să fie puțin mai rapid, puteți vedea care obiecte s-au schimbat de la ultima dată, utilizând informațiile despre versiuni în sysobjects.

Setup: Create a table in each database you want to check incrementally to hold the version information from the last time you checked it (empty on the first run). Clear this table if you want to re-scan your whole data structure.

IF ISNULL(OBJECT_ID('last_run_sysversions'), 0) <> 0 DROP TABLE last_run_sysversions
CREATE TABLE last_run_sysversions (
    name varchar(128), 
    id int, base_schema_ver int,
    schema_ver int,
    type char(2)
)

Normal running mode: You can take the results from this sql, and generate sql scripts for just the ones you're interested in, and put them into a source control of your choice.

IF ISNULL(OBJECT_ID('tempdb.dbo.#tmp'), 0) <> 0 DROP TABLE #tmp
CREATE TABLE #tmp (
    name varchar(128), 
    id int, base_schema_ver int,
    schema_ver int,
    type char(2)
)

SET NOCOUNT ON

-- Insert the values from the end of the last run into #tmp
INSERT #tmp (name, id, base_schema_ver, schema_ver, type) 
SELECT name, id, base_schema_ver, schema_ver, type FROM last_run_sysversions

DELETE last_run_sysversions
INSERT last_run_sysversions (name, id, base_schema_ver, schema_ver, type)
SELECT name, id, base_schema_ver, schema_ver, type FROM sysobjects

-- This next bit lists all differences to scripts.
SET NOCOUNT OFF

--Renamed.
SELECT 'renamed' AS ChangeType, t.name, o.name AS extra_info, 1 AS Priority
FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id
WHERE o.name <> t.name /*COLLATE*/
AND o.type IN ('TR', 'P' ,'U' ,'V')
UNION 

--Changed (using alter)
SELECT 'changed' AS ChangeType, o.name /*COLLATE*/, 
       'altered' AS extra_info, 2 AS Priority
FROM sysobjects o INNER JOIN #tmp t ON o.id = t.id 
WHERE (
   o.base_schema_ver <> t.base_schema_ver
OR o.schema_ver      <> t.schema_ver
)
AND  o.type IN ('TR', 'P' ,'U' ,'V')
AND  o.name NOT IN ( SELECT oi.name 
         FROM sysobjects oi INNER JOIN #tmp ti ON oi.id = ti.id
         WHERE oi.name <> ti.name /*COLLATE*/
         AND oi.type IN ('TR', 'P' ,'U' ,'V')) 
UNION

--Changed (actually dropped and recreated [but not renamed])
SELECT 'changed' AS ChangeType, t.name, 'dropped' AS extra_info, 2 AS Priority
FROM #tmp t
WHERE    t.name IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti
         WHERE NOT EXISTS (SELECT * FROM sysobjects oi
                           WHERE oi.id = ti.id))
AND  t.name IN ( SELECT oi.name /*COLLATE*/ FROM sysobjects oi
         WHERE NOT EXISTS (SELECT * FROM #tmp ti
                           WHERE oi.id = ti.id)
         AND   oi.type  IN ('TR', 'P' ,'U' ,'V'))
UNION

--Deleted
SELECT 'deleted' AS ChangeType, t.name, '' AS extra_info, 0 AS Priority
FROM #tmp t
WHERE NOT EXISTS (SELECT * FROM sysobjects o
                  WHERE o.id = t.id)
AND t.name NOT IN (  SELECT oi.name /*COLLATE*/ FROM sysobjects oi
         WHERE NOT EXISTS (SELECT * FROM #tmp ti
                           WHERE oi.id = ti.id)
         AND   oi.type  IN ('TR', 'P' ,'U' ,'V'))
UNION

--Added
SELECT 'added' AS ChangeType, o.name /*COLLATE*/, '' AS extra_info, 4 AS Priority
FROM sysobjects o
WHERE NOT EXISTS (SELECT * FROM #tmp t
                  WHERE o.id = t.id)
AND      o.type  IN ('TR', 'P' ,'U' ,'V')
AND  o.name NOT IN ( SELECT ti.name /*COLLATE*/ FROM #tmp ti
         WHERE NOT EXISTS (SELECT * FROM sysobjects oi
                           WHERE oi.id = ti.id))
ORDER BY Priority ASC

Note: If you use a non-standard collation in any of your databases, you will need to replace /* COLLATE */ with your database collation. i.e. COLLATE Latin1_General_CI_AI

0
adăugat
Foarte util script, mulțumesc.
adăugat autor pmcilreavy

Nu ați menționat niciun fel de specificații despre mediul țintă sau despre constrângerile dvs., deci este posibil să nu fie în întregime aplicabilă ... dar dacă sunteți în căutarea unei modalități de a urmări în mod eficient o schemă DB în evoluție și nu vă faceți rău ideii de utilizare Ruby, migrația ActiveRecord este chiar pe alee.

Migrările definesc programatic transformările bazei de date utilizând un Ruby DSL; fiecare transformare poate fi aplicată sau (în mod obișnuit) derulată înapoi, permițându-vă să treceți la o altă versiune a schemei DB în orice moment dat. Fișierul care definește aceste transformări poate fi verificat în controlul versiunii ca orice altă piesă a codului sursă.

Deoarece migrațiile fac parte din ActiveRecord , ele se găsesc, de obicei, în aplicațiile full-stack Rails; cu toate acestea, puteți utiliza ActiveRecord independent de Rails cu un efort minim. Consultați aici pentru un tratament mai detaliat al utilizării AR migrații în afara Rails.

0
adăugat

Aceasta este una dintre "problemele dificile" din jurul dezvoltării. Din câte știu, nu există soluții perfecte.

If you only need to store the database structure and not the data you can export the database as SQL queries. (in Enterprise Manager: Right click on database -> Generate SQL script. I recommend setting the "create one file per object" on the options tab) You can then commit these text files to svn and make use of svn's diff and logging functions.

Am legat acest lucru împreună cu un script Batch care ia câțiva parametri și stabilește baza de date. De asemenea, am adăugat câteva interogări suplimentare care introduc date implicite, cum ar fi tipurile de utilizatori și utilizatorul de admin. (Dacă doriți mai multe informații despre acest lucru, postați ceva și pot pune scenariul undeva accesibil)

Dacă trebuie să păstrați și toate datele, vă recomand să păstrați o copie de rezervă a bazei de date și să utilizați Redgate ( http : //www.red-gate.com/ ) produse pentru a face comparațiile. Ele nu vin ieftine, dar merită fiecare bănuț.

0
adăugat
@Taichman: DataGrove nu pare să suporte serverul SQL și, ca atare, nu are relevanță pentru întrebare.
adăugat autor Neolisk
Cum procedați pentru a rula scripturile bazei de date dacă utilizați opțiunea "un fișier pe obiect"?
adăugat autor Jamie Kitson
în ceea ce privește datele - puteți utiliza OffScale DataGrove pentru a salva versiuni ale întregii DB (date incluse). Puteți să-l utilizați mai târziu pentru a crea două copii virtuale ale DB care pot fi comparate cu produsul roșu-poarta. De asemenea, vă scutește necesitatea de a genera date de testare - puteți salva doar versiunile DB pentru a se potrivi cu diferitele cazuri de testare (din nou, copii complete, virtuale ale întregii DB)
adăugat autor Taichman

Soluția tipică este de a șterge baza de date după cum este necesar și de a salva aceste fișiere.

În funcție de platforma de dezvoltare, pot fi disponibile pluginuri open source. Deplasarea propriului cod pentru a face acest lucru este de obicei destul de banal.

Notă: Poate doriți să salvați o copie de rezervă a bazei de date a bazei de date în loc să o puneți în controlul versiunilor. Fișierele pot deveni uriașe în controlul versiunilor și pot provoca încetinirea întregului sistem de control al sursei (amintesc acum o poveste de groază despre CVS).

0
adăugat

Tocmai am început să folosim Team Foundation Server. Dacă baza dvs. de date este de dimensiuni medii, atunci studioul vizual are câteva integrate de proiect frumos cu comparație construită, comparare date, instrumente de refactorizare a bazelor de date, cadru de testare a bazelor de date și chiar instrumente de generare de date.

Dar, acest model nu se potrivește foarte bine bazelor de date foarte mari sau terțelor părți (care criptează obiectele). Deci, ceea ce am făcut este să stocăm doar obiectele personalizate. Serverul Visual Studio / Team Foundation funcționează foarte bine pentru asta.

Arhitectură de bază a bazei de date TFS. blogul

Site-ul MS TFS

0
adăugat

Sistemul de comparare a produsului SQL Gate nu vă permite doar să faceți comparații la nivel de obiect și să generați scripturi de schimbare, dar vă permite de asemenea să exportați obiectele de bază de date într-o ierarhie de directoare organizată de tipul de obiect, cu o [objectname] .sql creation script pentru fiecare obiect din aceste directoare. Ierarhia de tip obiect este astfel:

\ Funcții
\ Securitate
\ Security \ Roluri
\ Security \ Schemas
\ Security \ Users
\ Proceduri stocate
\Mese

Dacă dați script-urile dvs. în același director rădăcină după ce faceți modificări, puteți utiliza acest lucru pentru a vă actualiza repo-ul SVN și păstrați istoricul fiecărui obiect în parte.

0
adăugat
Tocmai am lansat SQL Source Control, care integrează comportamentul SQL Compare pe care îl descrie în SSMS și linkuri către SVN și TFS. Am adăugat un răspuns separat la această întrebare, care descrie în detaliu ceea ce face. red-gate.com/products/SQL_Source_Control/index.htm
adăugat autor David Atkinson

Cu ceva timp in urma am gasit un modul bazat pe VB care a folosit obiectele DMO si VSS pentru a obtine un db intreg scripted off si in VSS. Am transformat-o într-un script VB și l-am postat aici . Ați putea să eliminați cu ușurință apelurile VSS și să utilizați chestiile DMO pentru a genera toate scripturile și apoi apelați SVN din același fișier de grup care sună VBScript pentru a le verifica?

Dave J

0
adăugat

Poate doriți să vă uitați la Liquibase ( http://www.liquibase.org/ ). Chiar dacă nu utilizați instrumentul în sine, acesta se ocupă de conceptele de gestionare a schimbării bazelor de date sau refactorizării destul de bine.

0
adăugat
Folosim Liquibase în 5 echipe distribuite pe o singură ramură pentru livrare continuă și funcționează excelent. Avem 10+ aplicații de bază de date instalate în mai multe medii diferite. Îl folosim pentru a gestiona schema, indexarea, partiționarea, codul, datele de căutare, grupurile și permisiunile de grup. Îl folosim pentru Oracle, Postgresql și MSSQL.
adăugat autor Peter Henell
Dacă înțeleg corect în baza introducerii, este necesar să știți că există limbaj xml propriu pentru a declara obiectele în loc de SQL? Nu e fan.
adăugat autor JDPeckham

Este o metodă bună de a salva scripturile bazei de date în controlul versiunilor cu scripturi de schimbare, astfel încât să puteți actualiza orice bază de date pe care o aveți. De asemenea, este posibil să doriți să salvați scheme pentru diferite versiuni, astfel încât să puteți crea o bază de date completă fără a fi nevoie să aplicați toate scripturile de schimbare. Manipularea scripturilor ar trebui automatizată, astfel încât să nu trebuiască să lucrați manual.

Cred că este important să ai o bază de date separată pentru fiecare dezvoltator și să nu folosești o bază de date partajată. În acest fel, dezvoltatorii pot crea cazuri de testare și faze de dezvoltare independent de alți dezvoltatori.

Instrumentul de automatizare ar trebui să aibă mijloace pentru manipularea metadatelor bazei de date, care să indice ce baze de date sunt în ce stare de dezvoltare și care tabele conțin date controlabile de versiune și așa mai departe.

0
adăugat

+1 pentru toți cei care au recomandat instrumentele RedGate, cu o recomandare suplimentară și o avertizare.

SqlCompare are, de asemenea, un API documentat decent: astfel încât să puteți scrie, de exemplu, o aplicație consola care să sincronizeze folderul script-urilor controlate de sursă cu o bază de date de testare de integrare CI la checkin, astfel încât atunci când cineva verifică o schimbare a schemei din folderul de script-uri este implementat automat împreună cu modificarea codului aplicației care se potrivește. Acest lucru ajută la reducerea decalajului cu dezvoltatorii care uită de propagarea schimbărilor în db-ul lor local până la un DB de dezvoltare comună (aproximativ jumătate dintre noi, cred că :)).

O avertizare este că, cu o soluție scripted sau altfel, instrumentele RedGate sunt suficient de netede încât este ușor să uiți de realitățile SQL care stau la baza abstractizării. Dacă redenumiți toate coloanele dintr-un tabel, SqlCompare nu are posibilitatea de a cartografia coloanele vechi în coloanele noi și va renunța la toate datele din tabel. Va genera avertismente, dar am văzut că oamenii fac clic pe asta. Există un punct general care merită făcut, cred, că puteți automatiza doar versiunea DB și actualizarea până acum - abstracțiile sunt foarte scurgeri.

0
adăugat
Merită să ținem cont de faptul că pentru modificările bazei de date care au ambiguitate (și, prin urmare, au nevoie de un element de "intenție de dezvoltator"), soluția adecvată este o soluție bazată pe migrații. Redgate are acum ReadyRoll care satisface această abordare de versiune.
adăugat autor David Atkinson
Deci, ar trebui să existe un sistem care să urmărească coloanele pe care le schimbați și să vă amintiți mapările de la numele vechilor coloane la numele noilor coloane.
adăugat autor Silvercode

Din experiența mea soluția este dublă:

  1. Trebuie să rezolvați modificările din baza de date de dezvoltare care sunt efectuate de mai mulți dezvoltatori în timpul dezvoltării.

  2. Trebuie să gestionați actualizările bazei de date pe site-urile clienților.

Pentru a putea gestiona numărul 1, veți avea nevoie de un instrument puternic de diff / combinare a bazei de date. Cel mai bun instrument ar trebui să fie capabil să efectueze îmbinarea automată cât mai mult posibil, permițându-vă să rezolvați manual conflictele nefolosite.

Instrumentul perfect ar trebui să gestioneze operațiile de îmbinare utilizând un algoritm de îmbinare în trei direcții care să țină cont de modificările efectuate în baza de date THEIRS și baza de date MINE, în raport cu baza de date BASE.

I wrote a commercial tool that provides manual merge support for SQLite databases and I'm currently adding support for 3-way merge algorithm for SQLite. Check it out at http://www.sqlitecompare.com

Pentru a face față # 2, veți avea nevoie de un cadru de actualizare.

Ideea de bază este de a dezvolta un cadru automat de actualizare care știe cum să faceți upgrade de la o schemă SQL existentă la schema SQL mai recentă și puteți construi o cale de upgrade pentru fiecare instalare DB existentă.

Consultați articolul meu pe această temă în http://www.codeproject.com/KB/ baza de date / sqlite_upgrade.aspx pentru a obține o idee generală despre ceea ce vorbesc.

Mult noroc

Liron Levi

0
adăugat

Sunt de acord cu ESV răspuns și din acest motiv exact am început un proiect puțin o înapoi în timp pentru a ajuta la menținerea actualizarea bazei de date într-un fișier foarte simplu, care ar putea fi apoi menținută o latură lungă în codul sursă. Acesta permite actualizări ușoare pentru dezvoltatori, precum și pentru UAT și producție. Instrumentul funcționează pe serverul Sql și MySql.

Unele caracteristici ale proiectului:

  • Permite modificările schemei
  • Permite populația de arbori de valoare
  • Permite inserarea separată a datelor de testare pentru ex. UAT
  • Permite opțiunea de returnare (nu automată)
  • Menține suportul pentru serverul SQL și Mysql
  • Are capacitatea de a importa baza de date existentă în controlul versiunii cu o singură comandă (doar serverul sql ... încă funcționează pe mysql)

Codul este găzduit pe codul Google. Verificați codul Google pentru mai multe informații

http://code.google.com/p/databaseversioncontrol/

0
adăugat

Este o întrebare foarte veche, oricât de mulți încearcă să rezolve acest lucru chiar acum. Tot ce trebuie să facă este să cerceteze despre Proiectele de baze de date Visual Studio. Fără aceasta, orice dezvoltare de baze de date pare foarte slabă. De la organizarea codului la implementarea la versiune, simplifică totul.

0
adăugat

În primul rând, trebuie să alegeți sistemul de control al versiunilor potrivit pentru dvs.:

  • Sistemul de control al versiunii centralizate - un sistem standard în care utilizatorii fac check / check înainte sau după ce lucrează la fișiere, iar fișierele sunt păstrate într-un singur server central

  • Sistemul de control al versiunii distribuite - un sistem în care depozitul este clonat și fiecare clonă este de fapt copia de rezervă completă a depozitului, astfel încât în ​​cazul în care un server se blochează, atunci orice depozit clonat poate fi folosit pentru a-l restabili După alegerea sistemului potrivit pentru nevoile dvs., va trebui să configurați depozitul care este nucleul fiecărui sistem de control al versiunilor Toate acestea sunt explicate în următorul articol: http://solutioncenter.apexsql.com/sql-server-source-control-part-i-understanding-source-control-basics/

După configurarea unui depozit, iar în cazul unui sistem central de control al versiunilor un dosar de lucru, puteți citi acest articol . Acesta arată cum să configurați controlul sursă într-un mediu de dezvoltare utilizând:

  • SQL Server Management Studio prin intermediul furnizorului MSSCCI,

  • Instrumentele de date Visual Studio și SQL Server

  • Un instrument al părții terțe ApexSQL Source Control
0
adăugat

I would suggest using comparison tools to improvise a version control system for your database. A good alternative are xSQL Schema Compare and xSQL Data Compare.

Acum, dacă obiectivul tău este să ai doar schema bazei de date sub controlul versiunii, poți pur și simplu să utilizezi Schema Compare pentru a genera snapshot-urile xSQL ale schemei și să adaugi aceste fișiere în controlul versiunii. Apoi, pentru a reveni sau a actualiza la o versiune specifică, comparați versiunea curentă a bazei de date cu instantaneul pentru versiunea destinație.

Din păcate, dacă doriți să aveți și datele sub controlul versiunii, puteți utiliza datele xSQL Data Compare pentru a genera scripturi de schimbare pentru baza de date și pentru a adăuga fișierele .sql în controlul versiunii. Puteți executa apoi aceste scripturi pentru a reveni / actualiza la orice versiune doriți. Rețineți că pentru funcția "revert" trebuie să generați scripturi de schimbare care, atunci când vor fi executate, vor face Versiunea 3 la fel ca Versiunea 2 și pentru funcția de "actualizare", trebuie să generați scripturi de schimbare care fac contrariul.

În cele din urmă, cu câteva abilități de programare bazate pe batch, puteți automatiza întregul proces utilizând versiunile de linie de comandă ale xSQL Schema Compare și xSQL Data Compare

Disclaimer: Sunt afiliat la xSQL.

0
adăugat