W jaki sposób można śledzić zmiany w bazie danych w kontroli źródła?

głosy
22

Używamy SQL Server 2000/2005 oraz Vault lub SVN na większość naszych projektów. Nie znalazłem godnej roztwór do przechwytywania zmian w bazie schematu / proc w obu systemach kontroli źródła.

Nasze obecne rozwiązanie jest dość kłopotliwe i trudne do wyegzekwowania (skrypt się obiekt, który zmienia i zobowiązać go do bazy danych).

Mamy wiele pomysłów, jak rozwiązać ten problem z jakimś niestandardowym rozwoju, ale wolałbym zainstalować istniejącego narzędzia (płatne narzędzia są w porządku).

Tak: jak można śledzić zmiany kodu bazy danych? Czy masz jakieś zalecanych narzędzi?


Edytować:

Dzięki za wszystkie sugestie. Ze względu na ograniczenia czasowe, ja raczej nie toczą tu moje własne. I większość sugestii mają wadę, że wymagają one dev przestrzegać pewnych procedur.

Zamiast idealnym rozwiązaniem byłoby monitorowanie bazy danych SQL dla zmian i popełnić żadnych wykrytych zmian w SCM. Na przykład, jeśli SQL Server miał dodatek, który może nagrywać żadnych zmian DML z użytkownikiem że dokonane zmiany, a następnie popełnić skrypt tego obiektu do SCM, byłbym zachwycony.

Rozmawialiśmy wewnętrznie około dwóch systemach: 1. W SQL 2005, należy użyć obiektu, aby ograniczyć uprawnienia cię od zmiany przedmiotu dopóki nie zrobił „Zamówienie”. Następnie procedura zameldowania by skrypt go do SCM. 2. Uruchom zaplanowane zadanie wykryć wszelkie zmiany i zobowiązać je (anonimowo) do SCM.

Byłoby miło, gdybym mógł pominąć część działań użytkownika i mają system obsługi to wszystko automatycznie.

Utwórz 09/12/2008 o 14:57
źródło użytkownik
W innych językach...                            


14 odpowiedzi

głosy
3

Rozwiązanie pierwsze biedaka byłoby dodać pre-commit skrypt haka że wysypisk obecnie najnowszą schematu db do pliku i mieć ten plik popełnione do repozytorium SVN wraz z kodem. Następnie można różn pliki schematu db od jakiejkolwiek rewizji.

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

głosy
1

Ja po prostu popełnić SQL-alter-Statement dodatkowy do pełnego SQL createdb-deklaracji.

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

głosy
1

Oto Jeff Atwood na Get Your Database ramach kontroli wersji .

Odpowiedział 09/12/2008 o 15:03
źródło użytkownik

głosy
15

Użyj edycję programu Visual Studio do bazy danych skryptu z bazą danych. Działa jak czar i można użyć dowolnego systemu kontroli źródła, oczywiście najlepiej, jeśli ma wtyczek VS. Narzędzie posiada również szereg innych przydatnych funkcji. Sprawdź je tutaj, w tym wielkim poście

http://www.vitalygorn.com/blog/post/2008/01/Handling-Database-easily-with-Visual-Studio-2008.aspx

lub sprawdzić MSDN dla oficjalnej dokumentacji

Odpowiedział 09/12/2008 o 15:03
źródło użytkownik

głosy
1

W SQL2000 generować każdy przedmiot w jego własnym pliku , a następnie sprawdzić je wszystkie pod kontrolą źródła. Niech obsługiwać kontrola źródło historii zmian.

W SQL 2005, trzeba napisać kawałek kodu, aby wygenerować wszystkie obiekty w oddzielnych plikach.

Odpowiedział 09/12/2008 o 15:04
źródło użytkownik

głosy
5

Muszę powiedzieć, myślę, że projekt bazy danych visual studio jest również rozsądne rozwiązanie dylematu kontroli źródła. Jeśli jest prawidłowo skonfigurowane można uruchamiać skrypty przeciwko bazy danych z IDE. Jeśli skrypt jest stary, uzyskać najnowszym, uruchom go na DB. Mieć skrypt, który odtwarza wszystkie obiekty, a także, jeśli trzeba, nowe obiekty należy dodać do tego skryptu, jak również ręcznie, ale tylko raz

Lubię każdy stół, Proc i funkcjonować będzie w jego własnym pliku.

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

głosy
0

Nasze DBA okresowo sprawdzać prod przeciwko temu, co jest w SVN i usunąć wszystkie przedmioty nie pod kontrolą źródła. To zajmuje tylko raz przed devlopers nigdy zapomnieć ponownie umieścić coś w kontroli źródła.

My również nie pozwala nikomu przenieść obiekty do prod bez scenariusza jak nasi deweloperzy nie mają prawa prod jest to łatwe do wyegzekwowania.

Odpowiedział 09/12/2008 o 15:31
źródło użytkownik

głosy
1

Toczenia własne od podstaw nie byłoby bardzo wykonalne, ale jeśli używasz SQL porównanie narzędzia takie jak Redgate SQL Porównaj SDK do generowania plików zmiana dla ciebie to nie zajmie bardzo długo do połowy walca, co chcesz, a potem po prostu sprawdzić te pliki do kontroli źródła. Przewróciłam coś podobnego do siebie, aby zaktualizować zmiany z naszych systemów rozwojowych dla naszych żywych systemów, w ciągu zaledwie kilku godzin.

Odpowiedział 09/12/2008 o 15:34
źródło użytkownik

głosy
1

W naszym środowisku, nigdy nie ręcznie zmienić DB: wszystkie zmiany są wykonywane przez skrypty w czasie zwolnienia, a skrypty są przechowywane w systemie kontroli wersji. Ważnym elementem tej procedury jest, aby mieć pewność, że wszystkie skrypty można uruchamiać ponownie na tym samym DB skrypty są idempotent?) Bez utraty danych. Na przykład, jeśli dodać kolumnę, upewnij się, że nic nie zrobisz, jeśli kolumna jest już tam.

Twój komentarz o „propozycje mają wadę, że wymagają one dev przestrzegać pewnych procedur” jest naprawdę ostrzegawcze. Nie jest to wada, to funkcja. kontroli wersji pomaga deweloperom w następujących procedurach i sprawia, że ​​zabiegi mniej bolesne. Jeśli nie chcesz, aby przestrzegać procedur, nie ma potrzeby kontroli wersji.

Odpowiedział 09/12/2008 o 17:32
źródło użytkownik

głosy
0

W jednym projekcie organizowane przez dbałością w zakresie projektowania, że ​​wszystkie ważne dane w bazie danych mogą być automatycznie odtworzone z miejsc zewnętrznych. Podczas uruchamiania aplikacji tworzy bazę danych, jeśli go brakuje, i wypełnia je od zewnętrznych źródeł danych, z wykorzystaniem schematu w kodzie źródłowym aplikacji (a więc z wersjami aplikacji). Nazwa sklepu bazy danych (SQLite filename chociaż większość menedżerów baz danych pozwalają wielu baz danych) zawiera wersję schematu i zwiększamy wersji schematu, gdy angażujemy zmianę schematu. Oznacza to, kiedy ponownie uruchomić aplikację do nowej wersji z innego schematu, że nowy sklep baza danych jest automatycznie utworzony i zaludnionych. Trzeba by przywrócić instalację do starego schematu następnie nowy przebieg starej wersji będą przy użyciu starego magazynu bazy danych, więc dostać się do szybkich umniejsza w razie kłopotów.

Zasadniczo, baza danych działa jak tradycyjny sterty aplikacji, z zaletami trwałości, bezpieczeństwa transakcji typowania statyczne (przydatne, ponieważ używamy Python) i niepowtarzalność ograniczeń. Jednak nie martw się o usunięcie z bazy danych i zaczyna od nowa, a ludzie wiedzą, że jeśli spróbować ręcznego siekać w bazie danych, a następnie zostanie on powrócił następnego rozmieszczenia, podobnie jak hacki o stanie procesu dostanie powrócił następnego restartu.

Nie potrzebujemy żadnych skryptów migracyjnych, ponieważ po prostu przełączyć pliku bazy danych i ponownie uruchomić aplikację i odbudowuje się. To pomaga, że ​​instancje aplikacji są sharded używać jednej bazy danych na kliencie. Zmniejsza to także konieczność tworzenia kopii zapasowych baz danych.

Podejście to nie będzie działać, jeśli budować bazy danych ze źródeł zewnętrznych trwa dłużej niż można zezwolić aplikacji należy pozostać w dół.

Odpowiedział 15/12/2008 o 14:14
źródło użytkownik

głosy
0

Jeśli używasz .NET i jak Rails Podejście to z migracji, to polecam Migrator.Net .

Znalazłem ładny poradnik , który poprowadzi przez ustawienie go w Visual Studio. Zapewnia on również przykładowy projekt do referencyjnego.

Odpowiedział 18/09/2009 o 19:03
źródło użytkownik

głosy
0

Opracowaliśmy narzędzie niestandardowy, który aktualizuje naszych baz danych. Schemat bazy danych jest przechowywana w pliku XML bazy neutralny, który jest następnie odczytywane i przetwarzane przez narzędzie. Schemat dostaje przechowywane w SVN i dodać odpowiedni komentarz, aby zobaczyć, co się zmieniło. To działa bardzo dobrze dla nas.

Choć tego rodzaju rozwiązanie jest na pewno przesadą dla większości projektów, to z pewnością ułatwia życie w czasie.

Odpowiedział 18/09/2009 o 19:15
źródło użytkownik

głosy
0

Aby śledzić wszystkie zmiany jak aktualizacji Wstawianie i usuwanie tam będzie dużo napowietrznych dla SVN. Lepiej jest, aby śledzić tylko zmiany DDL jak (alter, drop, tworzenie), który zmienia schemat. Można to zrobić poprzez tworzenie tracking łatwo stół i trgger wstawić dane do tej tabeli schematu. Za każdym razem chcesz u mogą uzyskać status zmian poprzez odpytywanie z tej tabeli Istnieje wiele przykład tutaj i tutaj

Odpowiedział 26/06/2012 o 16:02
źródło użytkownik

głosy
5

Śledzenie zmian w bazie danych bezpośrednio z SSMS jest możliwe przy użyciu różnych narzędzi 3rd party. ApexSQL kontroli źródła automatycznie skrypty dowolnego obiektu bazy danych, który jest zawarty w wersjonowanie. Zobowiązuje nie mogą być automatycznie wykonywane przez narzędzie. Zamiast tego, użytkownik musi wybrać, które zostaną popełnione zmiany.

Kiedy się zmiany z repozytorium, ApexSQL Source Control jest świadomy więzy integralności bazy danych SQL. W ten sposób będzie on tworzyć skrypty synchronizacji w tym wszystkich obiektów zależnych, które zostaną zapakowane w transakcji tak, wszystkie zmiany będą stosowane w przypadku napotkania błędu nie, albo żaden z wybranych zmian jest stosowana. W każdym przypadku, integralność bazy danych pozostaje nienaruszona.

Odpowiedział 07/12/2017 o 15:12
źródło użytkownik

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