Czy istnieje system kontroli wersji dla zmiany struktury bazy danych?

głosy
104

Często napotkasz następujący problem.

Pracuję na pewnych zmian do projektu, które wymagają nowych tabel lub kolumn w bazie danych. I dokonać modyfikacji bazy danych i kontynuować swoją pracę. Zazwyczaj pamiętam zapisać zmiany, tak, że mogą być replikowane w systemie na żywo. Jednak nie zawsze pamięta, co ja się zmieniłam, a ja nie zawsze pamiętać, aby go zapisać.

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

Niezależnie od faktu, że to może nie być najlepsze praktyki dla tej sytuacji, czy istnieje system kontroli wersji dla bazy danych? Nie dbam o konkretnej technologii bazy danych. Chcę tylko wiedzieć, czy taka istnieje. Jeśli okaże się, do pracy z MS SQL Server, a następnie wielki.

Utwórz 02/08/2008 o 02:52
źródło użytkownik
W innych językach...                            


22 odpowiedzi

głosy
56

W Ruby on Rails, istnieje pojęcie migracji - szybki skrypt do zmiany bazy danych.

Wygenerować plik migracji, która ma na celu zwiększenie zasady wersję dB (takie jak dodanie kolumny) oraz zasady downgrade wersji (takie jak usunięcie kolumna). Każda migracja jest numerowany i stół śledzi aktualnej wersji db.

Aby przeprowadzić migrację w górę , należy uruchomić polecenie o nazwie „db: migrować”, który patrzy na swojej wersji i stosuje potrzebne skrypty. Można migrować w podobny sposób.

Same skrypty migracyjne są przechowywane w systemie kontroli wersji - przy każdej zmianie bazy danych można sprawdzić w nowym skrypcie, i każdy programista może zastosować go wnieść swoje lokalne db do najnowszej wersji.

Odpowiedział 02/08/2008 o 07:23
źródło użytkownik

głosy
29

Jestem trochę starej szkoły, w które mogę używać pliki źródłowe do tworzenia bazy danych. Istnieje rzeczywiście 2 pliki - projekt-database.sql i projekt-updates.sql - pierwszy dla schematu i danych Persistant, a drugi do modyfikacji. Oczywiście, oba są pod kontrolą źródła.

Gdy zmiany bazy danych, najpierw zaktualizować głównego schematu w projekcie-database.sql, skopiuj odpowiednie informacje do projektu-updates.sql, na przykład ALTER TABLE. Mogę wtedy zastosować aktualizacje do bazy rozwoju, testowania, iteracyjne dopóki dobrze. Następnie sprawdzić w pliki, test ponownie, i stosuje się do produkcji.

Ponadto, zazwyczaj mam tabelę w DB - config - takich jak:

SQL

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

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

Potem dodać następujące części dotyczącej aktualizacji:

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

db_versionZostaje tylko zmieniony, gdy baza danych jest odtwarzany, a db_revisiondaje mi wskazówkę, jak daleko dB przy bazowej.

Mogłem zachować aktualizacje w swoich oddzielnych plikach, ale wybrałem się rozgnieść je wszystkie razem i użyć cięcia i wklejania, aby wyodrębnić odpowiednie sekcje. Trochę więcej sprzątania jest w porządku, to znaczy usunąć „:” od $ Revision 1.1 $ do ich zamrażać.

Odpowiedział 26/09/2008 o 21:29
źródło użytkownik

głosy
11

Redgate ma produktu o nazwie SQL Źródło sterowania . Integruje się z TFS, SVN, SourceGear Vault, sklepienie Pro, Mercurial, Perforce i Git.

Odpowiedział 08/07/2011 o 15:51
źródło użytkownik

głosy
11

MyBatis (dawniej iBatis) ma migrację schematu , narzędzie do użytku w wierszu poleceń. Jest napisany w języku Java, choć może być używany z dowolnym projekcie.

Aby osiągnąć dobre praktyki zarządzania zmianą bazy danych, musimy zidentyfikować kilka kluczowych bramek. Zatem Schemat systemu MyBatis Migracji (lub MyBatis Migracje w skrócie) ma na celu:

  • Praca z dowolnej bazy danych, nowych lub istniejących
  • Wykorzystać układ sterowania źródłem (np Subversion)
  • Włącz jednoczesnych twórcom lub zespołom pracować niezależnie
  • Pozostawić konflikty bardzo widoczne i łatwe do opanowania
  • Pozostawić do przodu i do tyłu migracji (ewoluują, przechodzą odpowiednio)
  • Sprawiają, że obecny stan bazy danych łatwo dostępny i zrozumiały
  • Włącz migracje mimo przywilejów dostępu lub biurokracji
  • Współpracować z każdym metodologii
  • Zachęca dobre, spójnych praktyk
Odpowiedział 10/07/2010 o 22:56
źródło użytkownik

głosy
10

Zastanawiam się, że nikt nie wspomniał narzędzia open source liquibase który jest Java i powinny działać na prawie każdej bazy danych, która obsługuje JDBC. W porównaniu do szyn używa XML zamiast ruby do wykonywania zmian schematu. Chociaż lubię XML dla języków specyficznych domen bardzo fajne zaletą jest to, że liquibase xml wie jak przywrócić pewne operacje, takie jak

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

Więc nie trzeba się tym zająć od własnych

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

Odpowiedział 10/07/2010 o 22:26
źródło użytkownik

głosy
10

Gorąco polecam SQL deltę . Ja po prostu go używać do generowania skryptów diff gdy skończę moją funkcję kodowania i sprawdzić te skrypty w moim narzędzie kontroli źródła (Mercurial :))

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

Odpowiedział 28/05/2009 o 03:12
źródło użytkownik

głosy
9

Większość silników baz danych powinny wspierać dumping bazy danych do pliku. Wiem, że MySQL nie, w każdym razie. Będzie to po prostu plik tekstowy, więc można twierdzą, że do Subversion, czy cokolwiek innego wykorzystania. Byłoby łatwo uruchomić diff na plikach zbyt.

Odpowiedział 02/08/2008 o 02:56
źródło użytkownik

głosy
8

Jeśli używasz SQL Server byłoby trudno pokonać danych Dude (aka Database Edition Visual Studio). Gdy pojawi się zawiesić go, robi schematu porównanie między źródłowym kontrolowane wersji bazy danych i wersji produkcji jest bardzo proste. I jednym kliknięciem można wygenerować diff DDL.

Jest takie instruktażowe wideo na MSDN to bardzo pomocne.

Wiem o DBMS_METADATA i Toad, ale jeśli ktoś mógłby wymyślić Dude danych Oracle wtedy życie byłoby naprawdę słodkie.

Odpowiedział 10/09/2008 o 20:49
źródło użytkownik

głosy
7

Spójrz na DBMS_METADATA pakietu Oracle.

W szczególności, następujące sposoby są szczególnie użyteczne:

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

Po zapoznaniu się z tym, jak one działają (dość wymowne) można napisać prosty skrypt, aby zrzucić wyników tych metod w plikach tekstowych, które można umieścić pod kontrolą źródła. Powodzenia!

Nie wiem, czy coś jest to proste dla MSSQL.

Odpowiedział 01/09/2008 o 21:57
źródło użytkownik

głosy
7

Wyraź swoją początkową CREATE tabela w sterowniku wersji, następnie dodać ALTER tabeli, ale nigdy edytować pliki, po prostu bardziej zmieniać pliki idealnie nazwanych kolejno, lub nawet jako „zbiór zmian”, dzięki czemu można znaleźć wszystkie zmiany dla danego wdrożenia.

Najsilniejsze część, że widzę, jest śledzenie zależności, na przykład, dla konkretnego wdrożenia tabeli B może trzeba zaktualizować przed tabeli A.

Odpowiedział 31/08/2008 o 12:25
źródło użytkownik

głosy
7

Dla Oracle, używam Toad , który może zrzucić schematu do liczby plików dyskretnych (np jeden plik na stole). Mam kilka skryptów, które zarządzają tę kolekcję w Perforce, ale myślę, że powinno być łatwo wykonalne w niemal każdym systemie kontroli wersji.

Odpowiedział 02/08/2008 o 07:05
źródło użytkownik

głosy
6

PLSQL Twórca, narzędzie z wszystkich arround automatyzacje, ma wtyczki dla repozytoriów, który działa OK (ale nie wielki) z Visual Source Safe.

Z sieci:

Version sterowania Plug-In zapewnia ścisłą integrację pomiędzy PL / SQL Developer IDE >> A dowolnej wersji systemu sterowania, który obsługuje SCC Specyfikacja interfejsu Microsoft. >> ta obejmuje najbardziej popularne systemy kontroli wersji, takich jak Microsoft Visual SourceSafe, >> Merant PVC i MKS Źródło Integrity.

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

Odpowiedział 17/09/2008 o 16:50
źródło użytkownik

głosy
6

Zrobiłem to z przerwami od lat - zarządzanie (lub próbuje zarządzać) wersje schematu. Najlepsze sposoby zależą od narzędzi masz. Jeśli można uzyskać narzędzie Quest Software „Schema Manager” będziesz w dobrej formie. Oracle ma swój własny, gorszy narzędzie, które jest również nazywany „Menedżer Schema” (mylące dużo?), Że nie polecam.

Bez zautomatyzowanego narzędzia (zobacz inne komentarze na temat danych Dude) wtedy będziesz bezpośrednio za pomocą skryptów i plików DDL. Odbiór podejście, dokumentować je, a następnie ją rygorystycznie. Lubię mieć możliwość ponownego tworzenia bazy danych w dowolnym momencie, więc wolę mieć pełny eksport DDL całej bazy danych (jeśli jestem DBA) lub schematu deweloperskim (jeśli jestem w produkcie -Tryb rozwoju).

Odpowiedział 15/09/2008 o 16:01
źródło użytkownik

głosy
6

Piszę skrypty zwalniające db równolegle z kodowaniem i zachować skrypty zwalniające w sekcji konkretnego projektu w SS. Gdybym wprowadzić zmiany w kodzie, który wymaga zmiany db, a następnie zaktualizować skrypt zwalniającą w tym samym czasie. Przed zwolnieniem, uruchomić skrypt zwalniający na czystym dev dB (kopiowane struktury mądry z produkcji) i zrobić mój ostateczny test na nim.

Odpowiedział 30/08/2008 o 19:58
źródło użytkownik

głosy
5

ER Studio pozwala na odwrócenie schematu bazy danych w narzędziu można następnie porównać go do życia baz danych.

Przykład: Rewers schematu rozwoju do ER Studio - porównaj go do produkcji i będzie to lista wszystkich różnic. Może on skrypt zmiany lub po prostu wcisnąć je poprzez automatycznie.

Gdy masz schematu ER Studio, można zapisać skrypt tworzenia lub zapisać go jako plik binarny zastrzeżonych i zapisać go w kontroli wersji. Jeśli kiedykolwiek chciał wrócić do przeszłości wersji programu, po prostu to sprawdzić i pchnąć go do swojej platformy db.

Odpowiedział 17/09/2008 o 19:04
źródło użytkownik

głosy
5

Jest PHP5 „ramy migracji bazy danych” o nazwie Ruckusing. Nie używałem go, ale przykłady pokazują pomysł, jeśli użyć języka, aby utworzyć bazę danych, jak i kiedy trzeba, trzeba tylko śledzić pliki źródłowe.

Odpowiedział 02/08/2008 o 08:48
źródło użytkownik

głosy
3

Można użyć narzędzia Microsoft SQL Server danych w visual studio, aby wygenerować skrypty dla obiektów bazy danych jako część projektu SQL Server. Następnie można dodać skrypty do kontroli źródła przy użyciu integracji kontroli źródła, który jest wbudowany w visual studio. Ponadto SQL Server Projekty pozwalają zweryfikować obiekty bazy danych przy użyciu kompilatora i wygenerować skrypty wdrażania do zaktualizowania istniejącej bazy danych lub utworzyć nową.

Odpowiedział 22/12/2014 o 11:58
źródło użytkownik

głosy
2

Porównaj schemat dla Oracle jest narzędziem specjalnie zaprojektowany, aby przenieść zmiany z naszej bazy danych Oracle na inny. Proszę odwiedzić poniższy adres URL na odnośnik pobierania, gdzie będzie można korzystać z oprogramowania na rozprawie w pełni funkcjonalna.

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

Odpowiedział 10/01/2010 o 03:59
źródło użytkownik

głosy
2

Użyliśmy MS Team System Database Edition z bardzo dobrym wynikiem. Integruje się z TFS kontroli wersji i Visual Studio bardziej lub mniej płynnie i pozwala nam udaje przechowywanych procs, widoki itp łatwo. Rozwiązywanie konfliktów może być ból, ale historia jest pełna wersja po to się robi. Następnie, migracje do kontroli jakości i produkcji są niezwykle proste.

Można śmiało powiedzieć, że jest to produkt w wersji 1.0, choć i nie jest bez kilku kwestiach.

Odpowiedział 26/09/2008 o 19:12
źródło użytkownik

głosy
1

Polecam jeden z dwóch podejść. Po pierwsze, zainwestować w PowerDesigner z Sybase. Enterprise Edition. To pozwala na zaprojektowanie datamodels fizyczne, a także wiele więcej. Ale to jest z repozytorium, które pozwala sprawdzić w swoich modelach. Każda nowa zameldowanie może być nowa wersja, można ją porównać dowolną wersję do każdej innej wersji, a nawet to, co jest w bazie danych w tym czasie. Będzie on następnie przedstawić listę wszystkich różnic i zapytać, które powinny być przeniesione ... a potem buduje skrypt, aby to zrobić. Nie jest tani, ale jest to okazja na dwukrotność ceny i to ROI wynosi około 6 miesięcy.

Drugim pomysłem jest włączenie audytu DDL (działa w Oracle). Pozwoli to stworzyć tabelę z każdą zmianę można zrobić. Jeśli kwerendy zmiany z datownika ostatnio przeniósł swoje zmiany do bazy danych do prod teraz, będziesz mieć uporządkowaną listę wszystkiego, co zrobiłeś. Kilka gdzie klauzule wyeliminować sumie zerowej zmienia jak create table foo; następnie tabeli spadek foo; i można łatwo zbudować mod skrypt. Dlaczego zachować zmiany w wiki, to podwójna praca. Niech w bazie zapisuje je dla Ciebie.

Odpowiedział 26/09/2008 o 18:53
źródło użytkownik

głosy
1

Dwa zalecenia książki „Bazy danych Refaktoryzacja” przez Ambler i Sadalage i „agile techniki baz danych” przez Ambler.

Ktoś wspomniał Rails migracje. Myślę, że one działają świetnie, nawet na zewnątrz aplikacji Rails. Kiedyś je na aplikacji ASP z SQL Server, które byliśmy w procesie przechodzenia do Rails. Sprawdzić skrypty migracja się w VCS. Oto post przez Pragmatic Dave Thomas na ten temat.

Odpowiedział 22/09/2008 o 19:17
źródło użytkownik

głosy
1

W przypadku braku VCS dla zmian tabeli Byłem zalogowaniu je w wiki. Przynajmniej wtedy widzę, kiedy i dlaczego został zmieniony. Jest to dalekie od doskonałości, że nie każdy to robi i mamy wielu wersji produktu w użyciu, ale lepsze to niż nic.

Odpowiedział 01/09/2008 o 08:29
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more