Czy istnieje system kontroli wersji dla zmian struktury bazy danych?

Często napotykam następujący problem.

Pracuję nad kilkoma zmianami w projekcie, które wymagają nowych tabel lub kolumn w bazie danych. Dokonuję modyfikacji bazy danych i kontynuuję pracę. Zazwyczaj pamiętam, aby zapisać zmiany, aby można je było replikować na systemie live. Jednak nie zawsze pamiętam, co zmieniłem i nie zawsze pamiętam, aby to zapisać.

Więc, robię push do systemu live i dostać duży, oczywisty błąd, że nie ma NewColumnX, ugh.

Niezależnie od tego, że może to nie być najlepsza praktyka w tej sytuacji, czy istnieje system kontroli wersji baz danych? Nie obchodzi mnie specyficzna technologia baz danych. Chcę tylko wiedzieć, czy istnieje. Jeśli zdarza się, że działa z MS SQL Server, to świetnie.

Author: Mark Harrison, 2008-08-02

22 answers

W Ruby on Rails istnieje koncepcja migracji - szybkiego skryptu do zmiany bazy danych.

Generowany jest plik migracji, który zawiera reguły zwiększające wersję bazy danych (np. dodawanie kolumny) oraz reguły obniżające wersję (np. usuwanie kolumny). Każda migracja jest ponumerowana, a tabela śledzi bieżącą wersję bazy danych.

To migrate up , uruchamiasz polecenie o nazwie "db: migrate", które sprawdza twoją wersję i stosuje potrzebne Skrypty. Możesz przenieść w dół w podobny sposób.

Same Skrypty migracji są przechowywane w systemie kontroli wersji - za każdym razem, gdy zmieniasz bazę danych, sprawdzasz nowy skrypt, a każdy programista może go zastosować, aby przenieść swoje lokalne bazy danych do najnowszej wersji.

 59
Author: Kalid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-03 04:44:07

Jestem trochę staromodny, ponieważ używam plików źródłowych do tworzenia bazy danych. W rzeczywistości są 2 pliki-projekt-baza danych.sql i project-updates.sql-pierwszy dla schematu i danych trwałych, a drugi dla modyfikacji. Oczywiście oba są pod kontrolą źródła.

Kiedy baza danych się zmienia, najpierw aktualizuję główny schemat w projekcie-baza danych.sql, a następnie skopiować odpowiednie informacje do projektu-aktualizacje.sql, na przykład ALTER TABLE statements. Następnie mogę zastosować aktualizacje do bazy programistycznej, testuj, powtarzaj, dopóki nie zrobisz dobrze. Następnie sprawdź pliki, przetestuj ponownie i zastosuj się do produkcji.

Również, zwykle mam tabelę w db-Config-np.:

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: $');

Następnie dodaję do sekcji update:

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

db_version zmienia się tylko po odtworzeniu bazy danych, a db_revision daje mi wskazanie, jak daleko db jest poza linią bazową.

Mogę przechowywać aktualizacje w osobnych plikach, ale zdecydowałem się zmiażdżyć je wszystkie razem i użyć cut&paste, aby wyodrębnić odpowiednie sekcje. Trochę więcej jest w porządku, np. usuń ': 'z $Revision 1.1 $ aby je zamrozić.

 29
Author: dar7yl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-24 20:36:52

MyBatis (dawniej iBatis) posiada migrację schematu , Narzędzie do użycia w wierszu poleceń. Jest napisany w Javie, ale może być używany z dowolnym projektem.

Aby osiągnąć dobrą praktykę zarządzania zmianami w bazach danych, musimy określić kilka kluczowych celów. Tak więc system migracyjny MyBatis Schema (w skrócie Mybatis Migrations) dąży do:

  • praca z dowolną bazą danych, nową lub istniejącą
  • wykorzystać system kontroli źródła (np. Subversion)
  • umożliwianie współbieżnym programistom lub zespołom samodzielnej pracy
  • pozwalają na bardzo widoczne i łatwe zarządzanie konfliktami
  • Pozwala na migrację do przodu i do tyłu (evolve, devolve)
  • spraw, aby aktualny stan bazy danych był łatwo dostępny i zrozumiały
  • Włącz migracje pomimo uprawnień dostępu lub biurokracji
  • praca z dowolną metodologią
  • zachęca do dobrych, konsekwentnych praktyk
 11
Author: Chadwick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-10 21:56:52

Redgate posiada produkt o nazwie SQL Source Control . Integruje się z TFS, SVN, SourceGear Vault, Vault Pro, Mercurial, Perforce i Git.

 11
Author: EndangeredMassa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-08 14:51:41

Większość silników bazodanowych powinna wspierać wrzucanie bazy danych do pliku. Wiem, że MySQL tak. To będzie tylko plik tekstowy, więc możesz przesłać go do Subversion, czy czegokolwiek innego. Łatwo byłoby też uruchomić diff na plikach.

 10
Author: Ryan Fox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-02 01:56:51

Gorąco polecam SQL delta. Po prostu używam go do generowania skryptów diff po zakończeniu kodowania mojej funkcji i sprawdzania tych skryptów w moim narzędziu kontroli źródła (Mercurial :))

Mają zarówno wersję SQL server i Oracle.

 10
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-28 02:12:15

Zastanawiam się, że nikt nie wspomniał o narzędziu open source liquibase , które jest oparte na Javie i powinno działać dla prawie każdej bazy danych obsługującej jdbc. W porównaniu do rails używa xml zamiast ruby do wykonywania zmian w schemacie. Chociaż nie lubię xml dla języków specyficznych dla domeny, bardzo fajną zaletą xml jest to, że liquibase wie, jak cofnąć pewne operacje, takie jak

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

Więc nie musisz sam sobie z tym radzić

Czyste instrukcje sql lub import danych są również obsługiwane.

 10
Author: Karussell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-10 21:26:04

Jeśli używasz SQL Server, trudno byłoby pokonać Data Dude ' a (aka Database Edition Visual Studio). Gdy już się przyzwyczaisz, porównywanie schematu między kontrolowaną wersją źródłową bazy danych a wersją produkcyjną jest bardzo proste. Za pomocą jednego kliknięcia możesz wygenerować swój diff DDL.

Jest film instruktażowy na MSDN, który jest bardzo pomocny.

Wiem o DBMS_METADATA i Toad, ale gdyby ktoś mógł wymyślić dane dla Wyrocznio wtedy życie byłoby naprawdę słodkie.

 8
Author: Perry Tribolet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-10 19:49:15

Dla Oracle, używam Toad , który może zrzucić schemat do wielu dyskretnych plików (np. jeden plik na tabelę). Mam kilka skryptów, które zarządzają tą kolekcją w Perforce, ale myślę, że powinno to być łatwe do wykonania w prawie każdym systemie kontroli wersji.

 8
Author: Mark Harrison,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-21 16:07:11

Utwórz początkowe instrukcje table w kontrolerze wersji, a następnie dodaj instrukcje alter table, ale nigdy nie edytuj plików, po prostu więcej zmienionych plików najlepiej nazwanych sekwencyjnie lub nawet jako "zestaw zmian", aby można było znaleźć wszystkie zmiany dla danego wdrożenia.

Najtrudniejszą częścią, jaką widzę, jest śledzenie zależności, np. dla konkretnego wdrożenia tabela B może wymagać aktualizacji przed tabelą A.

 7
Author: Matthew Watson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-31 11:25:21

Spójrz na pakiet Oracle DBMS_METADATA.

Szczególnie przydatne są następujące metody:

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

Po zapoznaniu się z ich działaniem (dość oczywiste), możesz napisać prosty skrypt, aby zrzucać wyniki tych metod do plików tekstowych, które można umieścić pod kontrolą źródła. Powodzenia!

Nie wiem, czy jest coś tak prostego dla MSSQL.

 7
Author: Mike Farmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-20 05:32:42

Istnieje PHP5 "database migration framework" o nazwie Ruckusing. Nie używałem go, ale przykłady pokazują pomysł, jeśli używasz języka do tworzenia bazy danych w razie potrzeby, musisz tylko śledzić pliki źródłowe.

 6
Author: Peter Coulton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-02 07:48:56

Piszę moje Skrypty wydania db równolegle z kodowaniem i przechowuję Skrypty wydania w sekcji specyficznej dla projektu w SS. Jeśli dokonam zmiany w kodzie, która wymaga zmiany db, zaktualizuję skrypt release w tym samym czasie. Przed wydaniem uruchamiam skrypt release na czystym dev db (skopiowałem strukturę z produkcji) i wykonuję na nim ostateczne testy.

 6
Author: hamishmcn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-30 18:58:40

Robiłem to od lat -- zarządzając (lub próbując zarządzać) wersjami schematu. Najlepsze podejścia zależą od posiadanych narzędzi. Jeśli można uzyskać Quest oprogramowanie narzędzie "Schema Manager" będziesz w dobrej formie. Oracle ma własne, gorsze narzędzie, które jest również nazywane "menedżerem schematów" (mylące?), którego nie polecam.

Bez automatycznego narzędzia (zobacz inne komentarze tutaj o Data Dude) będziesz używał skryptów i plików DDL bezpośrednio. Wybierz podejście, udokumentuj to i rygorystycznie podążaj za tym. Lubię mieć możliwość ponownego utworzenia bazy danych w danym momencie, więc wolę mieć pełny eksport DDL całej bazy danych (jeśli jestem DBA), lub schematu programisty (jeśli jestem w trybie rozwoju produktu).

 6
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 15:01:05

PLSQL Developer, narzędzie ze wszystkich automatyzacji Arround, ma wtyczkę do repozytoriów, która działa OK (ale nie świetnie) z Visual Source Safe.

From the web:

Wtyczka kontroli wersji zapewnia ścisłą integrację pomiędzy PL / SQL Developer IDE >>a dowolnym systemem kontroli wersji obsługującym specyfikację interfejsu Microsoft SCC. > > Dotyczy to najpopularniejszych systemów kontroli wersji, takich jak Microsoft Visual SourceSafe, > > Merant PVCS i MKS Integralność Źródła.

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

 6
Author: borjab,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-17 15:50:33

ER Studio umożliwia odwrócenie schematu bazy danych do Narzędzia, a następnie porównanie go z żywymi bazami danych.

Przykład: Odwróć schemat rozwoju do ER Studio-porównaj go z produkcją, a wyświetli się lista wszystkich różnic. Może skryptować zmiany lub po prostu przepychać je automatycznie.

Gdy masz schemat w ER Studio, możesz zapisać skrypt tworzenia lub zapisać go jako własny plik binarny i zapisać go w kontroli wersji. Jeśli jeśli chcesz wrócić do poprzedniej wersji schematu, po prostu sprawdź go i wypchnij na swoją platformę db.

 5
Author: Bob Probst,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-21 16:08:58

Możesz użyć Microsoft SQL Server Data Tools w visual studio do generowania skryptów dla obiektów bazy danych w ramach projektu SQL Server. Następnie można dodać skrypty do kontroli źródła za pomocą integracji kontroli źródła, która jest wbudowana w visual studio. Ponadto projekty SQL Server umożliwiają weryfikację obiektów bazy danych za pomocą kompilatora i generowanie skryptów wdrażania w celu aktualizacji istniejącej bazy danych lub utworzenia nowej.

 3
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-22 11:58:25

Użyliśmy MS Team System Database Edition z całkiem dużym sukcesem. Integruje się z TFS version control i Visual Studio mniej lub bardziej bezproblemowo i pozwala nam zarządzać przechowywanymi procami, widokami itp., łatwo. Rozwiązywanie konfliktów może być trudne, ale historia wersji jest kompletna po zakończeniu. Następnie migracje do kontroli jakości i produkcji są niezwykle proste.

Można jednak powiedzieć, że jest to produkt w wersji 1.0 i nie jest bez kilku problemów.

 2
Author: marc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-21 16:08:21

Schema Compare for Oracle to narzędzie zaprojektowane specjalnie do migracji zmian z naszej bazy danych Oracle do innej. Odwiedź poniższy adres URL, aby uzyskać link do pobrania, gdzie będziesz mógł korzystać z oprogramowania w pełni funkcjonalnej wersji próbnej.

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

 2
Author: David Atkinson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-11 22:15:37

W przypadku braku VCS dla zmian w tabelach logowałem je na wiki. Przynajmniej wtedy widzę, kiedy i dlaczego została zmieniona. Jest daleki od doskonałości, ponieważ nie wszyscy to robią i mamy wiele wersji produktów w użyciu, ale lepiej niż nic.

 1
Author: steevc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-01 07:29:33

Dwie rekomendacje książkowe:" Refaktoryzacja baz danych "autorstwa Ambler i Sadalage oraz" zwinne techniki baz danych " autorstwa Ambler.

Ktoś wspomniał o migracjach Rails. Myślę, że działają świetnie, nawet poza aplikacjami Rails. Użyłem ich na aplikacji ASP z SQL serverem, którą byliśmy w trakcie przechodzenia na Rails. Sam sprawdzasz Skrypty migracji do VCS. Oto post autorstwa Pragmatic Dave Thomas w tym temacie.

 1
Author: MattMcKnight,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-22 18:17:48

Polecam jedno z dwóch podejść. Po pierwsze, zainwestuj w PowerDesigner od Sybase. Enterprise Edition. Pozwala na projektowanie fizycznych modeli danych i wiele więcej. Ale jest wyposażony w repozytorium, które pozwala sprawdzić modele. Każda nowa odprawa może być nową wersją, może porównać dowolną wersję z dowolną inną wersją, a nawet z tym, co znajduje się w Twojej bazie danych w tym czasie. Następnie przedstawi listę wszystkich różnic i zapyta, które powinny zostać przeniesione... a następnie buduje scenariusz, by to zrobić. Nie jest tani, ale to okazja za dwa razy cenę i ROI wynosi około 6 miesięcy.

Innym pomysłem jest włączenie audytu DDL (działa w Oracle). Spowoduje to utworzenie tabeli z każdą wprowadzoną zmianą. Jeśli zapytasz o zmiany od znacznika czasu, który ostatnio przenieśliście zmiany bazy danych do prod, otrzymasz uporządkowaną listę wszystkiego, co zrobiłeś. Kilka klauzul eliminujących zmiany o sumie zerowej, takich jak create table foo; następnie drop table foo; I ty można łatwo zbudować skrypt mod. Po co trzymać zmiany w wiki, to Podwójna praca. Niech baza danych śledzi je za Ciebie.

 1
Author: 2 revs, 2 users 83%Mark Brady,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-21 16:05:45