Vra

Ek loop dikwels die volgende probleem teë.

Ek werk aan 'n paar veranderinge aan 'n projek wat nuwe tabelle of kolomme in die databasis vereis.Ek maak die databasiswysigings en gaan voort met my werk.Gewoonlik onthou ek om die veranderinge neer te skryf sodat dit op die lewendige stelsel gerepliseer kan word.Ek onthou egter nie altyd wat ek verander het nie en ek onthou nie altyd om dit neer te skryf nie.

So, ek maak 'n druk na die lewendige stelsel en kry 'n groot, ooglopende fout dat daar geen NewColumnX, ugh.

Ongeag die feit dat dit dalk nie die beste praktyk vir hierdie situasie is nie, is daar 'n weergawebeheerstelsel vir databasisse?Ek gee nie om oor die spesifieke databasistegnologie nie.Ek wil net weet of daar een bestaan.As dit toevallig met MS SQL Server werk, dan is dit wonderlik.

Was dit nuttig?

Oplossing

In Ruby on Rails is daar 'n konsep van 'n migrasie -- 'n vinnige skrif om die databasis te verander.

Jy genereer 'n migrasielêer, wat reëls het om die db-weergawe te verhoog (soos die byvoeging van 'n kolom) en reëls om die weergawe af te gradeer (soos om 'n kolom te verwyder).Elke migrasie is genommer, en 'n tabel hou tred met jou huidige db-weergawe.

Om migreer op, voer jy 'n opdrag genaamd "db:migrate" uit wat na jou weergawe kyk en die nodige skrifte toepas.Jy kan op 'n soortgelyke manier af migreer.

Die migrasie skrifte self word in 'n weergawebeheerstelsel gehou -- wanneer jy die databasis verander, meld jy 'n nuwe script in, en enige ontwikkelaar kan dit toepas om hul plaaslike db na die nuutste weergawe te bring.

Ander wenke

Ek is 'n bietjie oud-skool, deurdat ek bronlêers gebruik om die databasis te skep.Daar is eintlik 2 lêers - project-database.sql en project-updates.sql - die eerste vir die skema en standhoudende data, en die tweede vir wysigings.Natuurlik is albei onder bronbeheer.

Wanneer die databasis verander, werk ek eers die hoofskema in project-database.sql op, kopieer dan die relevante inligting na die project-updates.sql, byvoorbeeld ALTER TABLE-stellings.Ek kan dan die opdaterings op die ontwikkelingsdatabasis toepas, toets, herhaal totdat dit goed gedoen is.Gaan dan lêers in, toets weer en pas toe op produksie.

Ek het ook gewoonlik 'n tabel in die db - Config - soos:

SQL

CREATE TABLE Config
(
    cfg_tag VARCHAR(50),
    cfg_value VARCHAR(100)
);

INSERT INTO Config(cfg_tag, cfg_value) VALUES
( 'db_version', '$Revision: $'),
( 'db_revision', '$Revision: $');

Dan voeg ek die volgende by die opdateringsafdeling:

UPDATE Config SET cfg_value='$Revision: $' WHERE cfg_tag='db_revision';

Die db_version word slegs verander wanneer die databasis herskep word, en die db_revision gee my 'n aanduiding hoe ver die db van die basislyn af is.

Ek kon die opdaterings in hul eie aparte lêers hou, maar ek het gekies om hulle almal saam te meng en sny en plak te gebruik om relevante afdelings te onttrek.'n Bietjie meer huishouding is in orde, dit wil sê, verwyder ':' van $Revision 1.1 $ om hulle te vries.

MyBatis (voorheen iBatis) het 'n skema migrasie, hulpmiddel vir gebruik op die opdragreël.Dit is in Java geskryf, maar kan met enige projek gebruik word.

Om 'n goeie databasisveranderingbestuurspraktyk te bereik, moet ons 'n paar sleuteldoelwitte identifiseer.Dus, die MyBatis Schema Migration System (of MyBatis Migrations vir kort) poog om:

  • Werk met enige databasis, nuut of bestaande
  • Gebruik die bronbeheerstelsel (bv.Subversion)
  • Stel gelyktydige ontwikkelaars of spanne in staat om onafhanklik te werk
  • Laat konflikte baie sigbaar en maklik hanteerbaar toe
  • Laat toe vir vorentoe en agtertoe migrasie (ontwikkel, devoleer onderskeidelik)
  • Maak die huidige status van die databasis maklik toeganklik en verstaanbaar
  • Aktiveer migrasies ten spyte van toegangsregte of burokrasie
  • Werk met enige metodologie
  • Moedig goeie, konsekwente praktyke aan

Redgate het 'n produk genaamd SQL Bronbeheer.Dit integreer met TFS, SVN, SourceGear Vault, Vault Pro, Mercurial, Perforce en Git.

Ek beveel sterk aan SQL delta.Ek gebruik dit net om die verskilskrifte te genereer wanneer ek klaar is met die kodering van my kenmerk en kontroleer daardie skrifte in my bronbeheerinstrument (Mercurial :))

Hulle het beide 'n SQL-bediener en Oracle-weergawe.

Ek wonder dat niemand die oopbronhulpmiddel genoem het nie vloeibare basis wat op Java gebaseer is en behoort te werk vir byna elke databasis wat jdbc ondersteun.In vergelyking met relings, gebruik dit xml in plaas daarvan robyn om die skemaveranderings uit te voer.Alhoewel ek nie van xml vir domeinspesifieke tale hou nie, is die baie oulike voordeel van xml dat liquibase weet hoe om sekere bewerkings terug te rol, soos

<createTable tableName="USER"> 
   <column name="firstname" type="varchar(255)"/>
</createTable>

U hoef dit dus nie self te hanteer nie

Suiwer sql-stellings of data-invoer word ook ondersteun.

Die meeste databasis-enjins behoort die storting van jou databasis in 'n lêer te ondersteun.Ek weet in elk geval MySQL doen.Dit sal net 'n tekslêer wees, so jy kan dit by Subversion indien, of wat jy ook al gebruik.Dit sal maklik wees om ook 'n verskil op die lêers uit te voer.

As jy SQL Server gebruik, sal dit moeilik wees om Data Dude (ook bekend as die Database Edition van Visual Studio) te klop.Sodra u dit onder die knie het, is dit 'n briesie om 'n skema te vergelyk tussen u bronbeheerde weergawe van die databasis en die weergawe in produksie.En met 'n klik kan jy jou verskil DDL genereer.

Daar is 'n instruksie video op MSDN is dit baie nuttig.

Ek weet van DBMS_METADATA en Toad, maar as iemand met 'n Data Dude vir Oracle vorendag kan kom, sal die lewe regtig soet wees.

Laat jou aanvanklike tabelstellings in weergawebeheerder skep, voeg dan verandertabelstellings by, maar wysig nooit lêers nie, net meer wysigingslêers wat ideaal opeenvolgend genoem word, of selfs as 'n "veranderingstel", sodat jy al die veranderinge vir 'n spesifieke ontplooiing kan vind.

Die moeilikste deel wat ek kan sien, is die dop van afhanklikhede, bv. vir 'n spesifieke ontplooiing moet tabel B dalk voor tabel A opgedateer word.

Vir Oracle gebruik ek Padda, wat 'n skema na 'n aantal diskrete lêers kan stort (bv. een lêer per tabel).Ek het 'n paar skrifte wat hierdie versameling in Perforce bestuur, maar ek dink dit behoort maklik in omtrent enige hersieningsbeheerstelsel uitvoerbaar te wees.

Kyk na die orakelpakket DBMS_METADATA.

Die volgende metodes is veral nuttig:

  • DBMS_METADATA.GET_DDL
  • DBMS_METADATA.SET_TRANSFORM_PARAM
  • DBMS_METADATA.GET_GRANTED_DDL

Sodra jy vertroud is met hoe hulle werk (redelik selfverduidelikend), kan jy 'n eenvoudige skrif skryf om die resultate van daardie metodes in tekslêers te stort wat onder bronbeheer geplaas kan word.Sterkte!

Nie seker of daar iets so eenvoudig vir MSSQL is nie.

Ek skryf my db vrystelling skrifte parallel met kodering, en hou die vrystelling skrifte in 'n projek spesifieke afdeling in SS.As ek 'n verandering aan die kode maak wat 'n db-verandering vereis, dan werk ek die vrystellingskrip op dieselfde tyd op.Voor vrystelling laat ek die vrystellingskrip op 'n skoon dev-db (struktuurgewys vanaf produksie gekopieer) en doen my finale toetsing daarop.

Ek het dit al jare lank af en aan gedoen -- skemaweergawes bestuur (of probeer bestuur).Die beste benaderings hang af van die gereedskap wat jy het.As jy die Quest Software-instrument "Skemabestuurder" kan kry, sal jy in goeie toestand wees.Oracle het sy eie, minderwaardige hulpmiddel wat ook "Skemabestuurder" genoem word (baie verwarrend?) wat ek nie aanbeveel nie.

Sonder 'n outomatiese hulpmiddel (sien ander opmerkings hier oor Data Dude) dan sal jy skrifte en DDL-lêers direk gebruik.Kies 'n benadering, dokumenteer dit en volg dit streng.Ek hou daarvan om die vermoë te hê om die databasis op enige gegewe oomblik te herskep, so ek verkies om 'n volledige DDL-uitvoer van die hele databasis te hê (as ek die DBA is), of van die ontwikkelaarskema (as ek in die produk is) -ontwikkelingsmodus).

PLSQL Developer, 'n instrument van All Arround Automations, het 'n inprop vir bewaarplekke wat goed werk (maar nie goed nie) met Visual Source Safe.

Van die web af:

Die weergawebeheer-inprop bied 'n noue integrasie tussen die PL/SQL-ontwikkelaar-IDE >>en enige weergawebeheerstelsel wat die Microsoft SCC-koppelvlakspesifikasie ondersteun.>> Dit sluit die gewildste weergawebeheerstelsels in soos Microsoft Visual SourceSafe, >> Merant PVCS en MKS Source Integrity.

http://www.allroundautomations.com/plsvcs.html

ER Studio laat jou toe om jou databasisskema in die instrument om te keer en jy kan dit dan vergelyk met lewendige databasisse.

Voorbeeld:Draai jou ontwikkelingskema om in ER Studio - vergelyk dit met produksie en dit sal al die verskille lys.Dit kan die veranderinge skryf of dit net outomaties deurdruk.

Sodra jy 'n skema in ER Studio het, kan jy óf die skeppingskrip stoor óf dit as 'n eie binêre stoor en dit in weergawebeheer stoor.As jy ooit wil teruggaan na 'n vorige weergawe van die skema, kyk net daarna en druk dit na jou db-platform.

Daar is 'n PHP5 "databasismigrasieraamwerk" genaamd Ruckusing.Ek het dit nie gebruik nie, maar die voorbeelde wys die idee, as jy die taal gebruik om die databasis te skep soos en wanneer nodig, hoef jy net bronlêers op te spoor.

Jy kan gebruik Microsoft SQL Server Data Tools in visuele ateljee om skrifte vir databasisvoorwerpe te genereer as deel van 'n SQL Server-projek.U kan dan die skrifte by bronbeheer voeg deur die bronbeheerintegrasie wat in visuele ateljee ingebou is.Met SQL Server-projekte kan u ook die databasisvoorwerpe met behulp van 'n samesteller verifieer en ontplooiingsskrifte genereer om 'n bestaande databasis op te dateer of 'n nuwe een te skep.

Ons het gebruik MS Team System Database Edition met goeie sukses.Dit integreer min of meer naatloos met TFS-weergawebeheer en Visual Studio en stel ons in staat om gestoorde procs, aansigte, ens., maklik te bestuur.Konflikoplossing kan moeilik wees, maar weergawegeskiedenis is voltooi sodra dit klaar is.Daarna is migrasies na QA en produksie uiters eenvoudig.

Dit is egter billik om te sê dat dit 'n weergawe 1.0-produk is en nie sonder 'n paar probleme is nie.

Skema Vergelyk vir Oracle is 'n instrument wat spesifiek ontwerp is om veranderinge van ons Oracle-databasis na 'n ander te migreer.Besoek asseblief die URL hieronder vir die aflaaiskakel, waar jy die sagteware vir 'n ten volle funksionele proeflopie sal kan gebruik.

http://www.red-gate.com/Products/schema_compare_for_oracle/index.htm

In die afwesigheid van 'n VCS vir tabelveranderinge, het ek dit in 'n wiki aangeteken.Dan kan ek darem sien wanneer en hoekom dit verander is.Dit is ver van perfek, want nie almal doen dit nie en ons het verskeie produkweergawes in gebruik, maar beter as niks.

Ek sal een van twee benaderings aanbeveel.Eerstens, belê in PowerDesigner van Sybase.Ondernemingsuitgawe.Dit laat jou toe om Fisiese datamodelle te ontwerp, en nog baie meer.Maar dit kom met 'n bewaarplek wat jou toelaat om jou modelle in te check.Elke nuwe aanmelding kan 'n nuwe weergawe wees, dit kan enige weergawe met enige ander weergawe vergelyk en selfs met wat op daardie tydstip in jou databasis is.Dit sal dan 'n lys van elke verskil aanbied en vra watter gemigreer moet word ... en dan bou dit die skrif om dit te doen.Dit is nie goedkoop nie, maar dit is 'n winskoop teen twee keer die prys en die ROI is ongeveer 6 maande.

Die ander idee is om DDL-ouditering aan te skakel (werk in Oracle).Dit sal 'n tabel skep met elke verandering wat jy maak.As jy die veranderinge navraag doen vanaf die tydstempel waarna jy laas jou databasisveranderinge na prod geskuif het, sal jy 'n geordende lys hê van alles wat jy gedoen het.'n Paar waar klousules om nul-som veranderinge uit te skakel soos create table foo;gevolg deur drop table foo;en jy kan MAKLIK 'n mod script bou.Hoekom die veranderinge in 'n wiki hou, dit is dubbel die werk.Laat die databasis hulle vir jou opspoor.

Twee boekaanbevelings:"Refactoring Databases" deur Ambler en Sadalage en "Agile Database Techniques" deur Ambler.

Iemand het Rails Migrations genoem.Ek dink hulle werk wonderlik, selfs buite Rails-toepassings.Ek het hulle op 'n ASP-toepassing met SQL Server gebruik wat ons besig was om na Rails te skuif.Jy kontroleer die migrasie skrifte self in die VCS.Hier is 'n plasing deur Pragmatic Dave Thomas op die onderwerp.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top