Wersjonowanie bazy danych SQL Server

Chcę, aby moje bazy danych były pod kontrolą wersji. Czy ktoś ma jakieś rady lub Polecane artykuły, które pomogą mi zacząć?

Zawsze będę chciał mieć tam przynajmniej jakieś dane (jak wspomina alumb: typy użytkowników i administratorów). Często będę też potrzebował dużego zbioru wygenerowanych danych testowych do pomiarów wydajności.

Author: Peter Featherstone, 2008-08-01

29 answers

Martin Fowler napisał mój ulubiony artykuł na ten temat, http://martinfowler.com/articles/evodb.html . wybieram nie umieszczać zrzutów schematów pod kontrolą wersji jakoalumb i inni sugerują, ponieważ chcę łatwego sposobu na uaktualnienie mojej produkcyjnej bazy danych.

W przypadku aplikacji webowej, w której będę miał pojedynczą instancję produkcyjnej bazy danych, używam dwóch technik:

Skrypty Aktualizacji Bazy Danych

Skrypty aktualizacji bazy danych sekwencji, które zawierają DDL konieczne jest przeniesienie schematu z wersji N do N+1. (Są one dostępne w systemie kontroli wersji.) A _version_history_ table, coś jak

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

Pobiera nowy wpis za każdym razem, gdy skrypt upgrade uruchamia się, co odpowiada nowej wersji.

To zapewnia, że łatwo jest zobaczyć, jaka wersja schematu bazy danych istnieje i że skrypty aktualizacji bazy danych są uruchamiane tylko raz. Ponownie, Są to , a nie zrzuty baz danych. Zamiast tego każdy skrypt reprezentuje zmiany konieczne, aby przejść z jednej wersji do następnej. Są to skrypty, które stosuje się do bazy danych produkcji, aby ją "uaktualnić".

Developer Sandbox Synchronization

  1. skrypt do tworzenia kopii zapasowych, dezynfekcji i zmniejszania bazy danych produkcji. Uruchom to po każdym uaktualnieniu do DB produkcji.
  2. skrypt przywracający (i w razie potrzeby poprawiający) kopię zapasową na stacji roboczej programisty. Każdy programista uruchamia ten skrypt po każdym uaktualnieniu do produkcji DB.

zastrzeżenie: moje zautomatyzowane testy działają na podstawie poprawnej, ale pustej bazy danych, więc ta rada nie będzie idealnie pasować do Twoich potrzeb.

 171
Author: ESV,
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 17:33:54

Produkt Red Gate SQL Compare nie tylko umożliwia wykonywanie porównań na poziomie obiektów i generowanie skryptów zmiany, ale także pozwala eksportować obiekty bazy danych do hierarchii folderów zorganizowanych według typu obiektu, z jednym [objectname].skrypt tworzenia sql dla każdego obiektu w tych katalogach. Hierarchia typu obiektowego wygląda następująco:

\Functions
\ Bezpieczeństwo
\Bezpieczeństwo \ Role
\Security \ Schemas
\ Security\Users
\Procedury Przechowywane
\Tabele

Jeśli zrzucisz skrypty do tego samego katalogu głównego po wprowadzeniu zmian, możesz użyć tego do aktualizacji repo SVN i zachować historię działania każdego obiektu z osobna.

 42
Author: Dane,
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-06-09 07:57:16

Jest to jeden z "trudnych problemów" otaczających rozwój. Z tego co wiem, nie ma idealnych rozwiązań.

Jeśli potrzebujesz tylko zapisać strukturę bazy danych, a nie DANE, możesz wyeksportować bazę danych jako zapytania SQL. (w Enterprise Manager: kliknij prawym przyciskiem myszy na database - > Generate SQL script. Polecam ustawienie "Utwórz jeden plik Na obiekt" na karcie Opcje) możesz następnie zatwierdzić Te pliki tekstowe do svn i skorzystać z funkcji różnicowania i logowania svn.

Mam jest to powiązane ze skryptem wsadowym, który pobiera kilka parametrów i ustawia bazę danych. Dodałem również kilka dodatkowych zapytań, które wprowadzają domyślne dane, takie jak typy użytkowników i użytkownik Administrator. (Jeśli chcesz więcej informacji na ten temat, napisz coś i mogę umieścić skrypt gdzieś dostępny)

Jeśli chcesz zachować wszystkie dane, zalecam zachowanie kopii zapasowej bazy danych i użycie Redgate ( http://www.red-gate.com / ) Produkty do porównań. Nie są tanie, ale są warte każdego grosza.

 39
Author: alumb,
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-01 19:28:25

Najpierw musisz wybrać odpowiedni dla Ciebie system kontroli wersji:

  • Scentralizowany system kontroli wersji-standardowy system, w którym użytkownicy sprawdzają / sprawdzają przed / po pracy nad plikami, a pliki są przechowywane na jednym centralnym serwerze

  • Distributed Version Control system - system, w którym repozytorium jest klonowane, a każdy klon jest w rzeczywistości pełną kopią zapasową repozytorium, więc jeśli jakikolwiek serwer ulega awarii, to każde sklonowane repozytorium może być użyty do przywrócenia Po wybraniu odpowiedniego systemu do swoich potrzeb, musisz skonfigurować repozytorium, które jest rdzeniem każdego systemu kontroli wersji Wszystko to wyjaśniono w następującym artykule: http://solutioncenter.apexsql.com/sql-server-source-control-part-i-understanding-source-control-basics/

Po skonfigurowaniu repozytorium, a w przypadku centralnego systemu kontroli wersji folderu roboczego, możesz przeczytać Ten artykuł . Pokazuje jak Konfiguracja kontroli źródła w środowisku deweloperskim za pomocą:

  • SQL Server Management Studio poprzez dostawcę MSSCCI,

  • Narzędzia danych Visual Studio i SQL Server

  • a 3rd party tool ApexSQL Source Control
 37
Author: McRobert,
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
2015-06-24 10:36:56

Tutaj w Red Gate oferujemy Narzędzie, SQL Source Control, które wykorzystuje technologię SQL Compare do łączenia bazy danych z repozytorium TFS lub SVN. To narzędzie integruje się z SSMS i pozwala pracować tak, jak normalnie, z wyjątkiem teraz pozwala zatwierdzać obiekty.

Dla podejścia opartego na migracji (bardziej dostosowanego do zautomatyzowanych wdrożeń), oferujemy ReadyRoll, który tworzy i zarządza zestawem skryptów przyrostowych jako projekt Visual Studio.

W źródle SQL Sterowanie możliwe jest określenie statycznych tabel danych. Są one przechowywane w kontrolce źródłowej jako instrukcje INSERT.

Jeśli mówimy o danych testowych, zalecamy wygenerowanie danych testowych za pomocą narzędzia lub za pomocą zdefiniowanego skryptu po wdrożeniu lub po prostu przywrócenie kopii zapasowej produkcji do środowiska programistycznego.

 22
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
2016-10-01 17:10:04

Możesz spojrzeć na Liquibase ( http://www.liquibase.org/). nawet jeśli nie używasz samego narzędzia, całkiem dobrze radzi sobie z pojęciami zarządzania zmianami w bazie danych lub refaktoryzacji.

 20
Author: jeffjakub,
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-16 18:16:59

+1 dla wszystkich, którzy polecili narzędzia RedGate, z dodatkową rekomendacją i zastrzeżeniem.

SqlCompare ma również przyzwoicie udokumentowane API: możesz więc, na przykład, napisać aplikację konsolową, która synchronizuje twój folder skryptów sterowanych źródłami z bazą testowania integracji Ci w checkin, tak że gdy ktoś sprawdzi zmianę schematu ze swojego folderu skryptów, zostanie ona automatycznie wdrożona wraz ze zmianą dopasowanego kodu aplikacji. To pomaga zamknąć lukę z deweloperami, którzy zapominają o propagowaniu zmian w lokalnym db aż do wspólnego dB rozwoju (około połowa z nas, myślę :)).

Zastrzeżenie jest takie, że przy skryptowym rozwiązaniu lub w inny sposób narzędzia RedGate są na tyle płynne, że łatwo zapomnieć o realiach SQL leżących u podstaw abstrakcji. Jeśli zmienisz nazwę wszystkich kolumn w tabeli, SqlCompare nie ma możliwości mapowania starych kolumn do nowych kolumn i upuści wszystkie dane w tabeli. Wygeneruje Ostrzeżenia ale widziałem, jak ludzie mijają to. Jest tu ogólna uwaga, którą warto zrobić, myślę, że można tylko zautomatyzować wersjonowanie DB I upgrade do tej pory - abstrakcje są bardzo nieszczelne.

 17
Author: alexis.kennedy,
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-10-15 09:44:04

Używamy DBGhost do zarządzania naszą bazą danych SQL. Następnie umieszczasz skrypty, aby zbudować nową bazę danych w swojej kontroli wersji, a to albo zbuduje nową bazę danych, albo uaktualni dowolną istniejącą bazę danych do schematu w kontroli wersji. W ten sposób nie musisz się martwić o tworzenie skryptów zmiany (chociaż nadal możesz to zrobić, jeśli na przykład chcesz zmienić typ danych kolumny i potrzebujesz przekonwertować dane).

 14
Author: Ray,
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-07 21:12:01

Z VS 2010, użyj projektu bazy danych.

  1. Script out your database
  2. dokonać zmian w skryptach lub bezpośrednio na Twój serwer db
  3. Synchronizacja za pomocą danych > Porównanie Schematu

Tworzy idealne rozwiązanie do wersjonowania DB i sprawia, że synchronizacja DB to pestka.

 14
Author: roman m,
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-02-25 20:18:05

Dobrym podejściem jest zapisywanie skryptów bazodanowych do kontroli wersji za pomocą skryptów zmiany, aby można było uaktualnić dowolną bazę danych, którą posiadasz. Możesz również zapisać schematy dla różnych wersji, aby można było utworzyć pełną bazę danych bez konieczności stosowania wszystkich skryptów zmiany. Obsługa skryptów powinna być zautomatyzowana, aby nie trzeba było wykonywać ręcznej pracy.

Myślę, że ważne jest, aby mieć oddzielną bazę danych dla każdego dewelopera, a nie korzystać ze współdzielonej bazy danych. Tędy. deweloperzy mogą tworzyć przypadki testowe i fazy rozwoju niezależnie od innych deweloperów.

Narzędzie do automatyzacji powinno mieć środki do obsługi metadanych bazy danych, które informują, które bazy danych są w jakim stanie rozwoju i które tabele zawierają dane sterowalne dla wersji itd.

 12
Author: Silvercode,
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-24 06:11:22

Nie wspomniałeś o żadnych szczegółach dotyczących docelowego środowiska lub ograniczeń, więc może to nie być w pełni odpowiednie... ale jeśli szukasz sposobu na skuteczne śledzenie rozwijającego się schematu DB i nie jesteś przeciwny idei używania Rubiego, migracje ActiveRecord są na twojej drodze.

Migracje programowo definiują transformacje baz danych za pomocą Ruby DSL; każda transformacja może być zastosowana lub (zazwyczaj) cofnięta, pozwalając przejść do innej wersji twój schemat DB w danym momencie. Plik definiujący te przekształcenia można sprawdzić w kontroli wersji, jak każdy inny fragment kodu źródłowego.

Ponieważ migracje są częścią ActiveRecord, zazwyczaj znajdują zastosowanie w aplikacjach Rails z pełnym stosem; jednak można używać ActiveRecord niezależnie od Rails przy minimalnym wysiłku. Zobacz tutaj aby dowiedzieć się więcej o wykorzystaniu migracji AR poza Rails.

 11
Author: Matt,
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 19:22:50

Możesz również spojrzeć na rozwiązanie migracji. Pozwalają one określić schemat bazy danych w kodzie C#, a następnie przeciągnąć wersję bazy danych w górę iw dół za pomocą MSBuild.

Obecnie używam DbUp i działa dobrze.

 11
Author: Lance Fisher,
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
2017-04-04 17:55:40

Każda baza danych powinna być pod kontrolą kodu źródłowego. Brakuje narzędzia do automatycznego skryptowania wszystkich obiektów bazy danych-i "danych konfiguracyjnych" - do pliku, który następnie można dodać do dowolnego systemu kontroli źródła. Jeśli używasz SQL Server, to moje rozwiązanie jest tutaj: http://dbsourcetools.codeplex.com /. Baw się dobrze. - Nathan.

 9
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
2009-07-07 12:58:34

To proste.

  1. Gdy projekt bazowy jest gotowy, musisz utworzyć pełny skrypt bazy danych. Ten skrypt jest przypisany do SVN. Jest to pierwsza wersja.

  2. Następnie wszyscy programiści tworzą Skrypty zmian (ALTER..., nowe stoły, koła zębate itp.).

  3. Gdy potrzebujesz bieżącej wersji, powinieneś wykonać wszystkie nowe skrypty zmiany.

  4. Gdy aplikacja zostanie wydana do produkcji, to wrócisz do 1 (ale wtedy będzie to kolejna wersja oczywiście).

Nant pomoże Ci wykonać te skrypty zmian. :)

I pamiętaj. Wszystko działa dobrze, gdy jest dyscyplina. Za każdym razem, gdy zmiana bazy danych jest commitowana, odpowiednie funkcje w kodzie są również commitowane.

 8
Author: dariol,
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-16 11:37:32

Jeśli masz małą bazę danych i chcesz wersję całej rzeczy, Ten skrypt wsadowy może pomóc. Odłącza, kompresuje i sprawdza bazę danych MSSQL plik MDF w Subversion.

Jeśli chcesz głównie wersję schematu i tylko niewielką ilość danych referencyjnych, możesz użyć SubSonic Migrations do obsługi tego. Zaletą jest to, że można łatwo przenieść w górę lub w dół do dowolnej konkretnej wersji.

 7
Author: Jon Galloway,
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-07 21:21:01

Aby zrzut do systemu kontroli kodu źródłowego był nieco szybszy, możesz zobaczyć, które obiekty zmieniły się od ostatniego czasu, używając informacji o wersji w obiektach sysobjects.

Setup: Utwórz tabelę w każdej bazie danych, którą chcesz sprawdzić stopniowo, aby przechowywać informacje o wersji z ostatniego sprawdzenia (pustą przy pierwszym uruchomieniu). Wyczyść tę tabelę, jeśli chcesz ponownie zeskanować całą strukturę danych.

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)
)

Tryb pracy normalnej: można wziąć wyniki z tego sql, i generować skrypty sql tylko dla tych, które Cię interesują, i umieścić je w kontroli źródła wyboru.

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

Uwaga: Jeśli używasz niestandardowego zestawienia w którejkolwiek ze swoich baz danych, musisz zastąpić /* COLLATE */ swoją bazą danych. tj. COLLATE Latin1_General_CI_AI

 7
Author: Jonathan,
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-24 12:53:48

Ponieważ nasza aplikacja musi działać w wielu RDBMSs, przechowujemy naszą definicję schematu w kontroli wersji przy użyciu neutralnego dla bazy danych formatu Torque (XML). Kontrolujemy również dane referencyjne dla naszej bazy danych w formacie XML w następujący sposób (gdzie "relacja" jest jedną z tabel referencyjnych):

  <Relationship RelationshipID="1" InternalName="Manager"/>
  <Relationship RelationshipID="2" InternalName="Delegate"/>
  etc.

Następnie używamy domowych narzędzi do generowania skryptów upgrade schema i reference data upgrade, które są wymagane, aby przejść z wersji X bazy danych do wersji X + 1.

 7
Author: Andrew Swan,
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
2015-06-22 05:26:57

Nie przechowujemy schematu bazy danych, przechowujemy zmiany w bazie danych. To, co robimy, to Przechowywanie zmian w schemacie, tak aby zbudować skrypt zmiany dla dowolnej wersji bazy danych i zastosować go do baz danych naszych klientów. Napisałem aplikację narzędziową bazy danych, która jest dystrybuowana z naszą główną aplikacją, która może odczytać ten skrypt i wiedzieć, które aktualizacje należy zastosować. Ma również wystarczająco dużo sprytu, aby odświeżyć widoki i procedury przechowywane w razie potrzeby.

 6
Author: Chris Miller,
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-06 23:00:16

Mieliśmy potrzebę wersji naszej bazy danych SQL po migracji do platformy x64 i nasza stara wersja zerwała z migracją. Napisaliśmy aplikację C#, która używała SQLDMO do mapowania wszystkich obiektów SQL do folderu:

                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

Aplikacja porównałaby nowo zapisaną wersję z wersją zapisaną w SVN i gdyby były różnice, zaktualizowałaby SVN. Ustaliliśmy, że uruchamianie procesu raz w nocy było wystarczające, ponieważ nie wprowadzamy tak wielu zmian w SQL. Pozwala nam to śledzić zmiany we wszystkich obiektach, na których nam zależy, a także pozwala nam odbudować nasz pełny schemat w przypadku poważnego problemu.

 6
Author: Christopher Klein,
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-10-09 14:54:12

Napisałem tę aplikację jakiś czas temu, http://sqlschemasourcectrl.codeplex.com/ który skanuje Twoje bazy danych MSFT Sql tak często, jak chcesz i automatycznie zrzeka twoje obiekty (tabele, widoki, procs, funkcje, Ustawienia sql) do SVN. Działa jak urok. Używam go z Unfuddle (co pozwala mi uzyskać alerty na checkins)

 6
Author: ScaleOvenStove,
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-09-23 02:35:41

Typowym rozwiązaniem jest zrzut bazy danych w razie potrzeby i kopia zapasowa tych plików.

W zależności od platformy programistycznej mogą być dostępne wtyczki opensource. Toczenie własnego kodu w tym celu jest zwykle dość trywialne.

Uwaga: możesz chcieć wykonać kopię zapasową zrzutu bazy danych zamiast umieszczać go w kontroli wersji. Pliki mogą stać się ogromne szybko w kontroli wersji i spowodować, że cały system kontroli źródeł stanie się powolny (przypominam sobie horror CVs na moment).

 5
Author: engtech,
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 01:49:58

Właśnie zaczęliśmy używać serwera Team Foundation. Jeśli twoja baza danych jest średniej wielkości, visual studio ma kilka ciekawych integracji projektów z wbudowanymi w porównaniu, porównanie danych, narzędzia do refaktoryzacji baz danych, Framework testowania baz danych, a nawet narzędzia do generowania danych.

Ale ten model nie pasuje do bardzo dużych lub zewnętrznych baz danych (które szyfrują obiekty) bardzo dobrze. Więc to, co zrobiliśmy, to Przechowywanie tylko naszych spersonalizowanych przedmiotów. Visual Studio / Team foundation server działa bardzo dobrze dla to.

Szef bazy TFS arch. blog

MS TFS site

 5
Author: TheEmirOfGroofunkistan,
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-22 17:13:23

Zgadzam się z ESV answer i z tego właśnie powodu jakiś czas temu rozpocząłem mały projekt, aby pomóc w utrzymaniu aktualizacji bazy danych w bardzo prostym pliku, który następnie mógłby być utrzymywany na długiej stronie kodu źródłowego. Umożliwia łatwe aktualizacje dla programistów, a także UAT i produkcji. Narzędzie działa na but SQL Server i MySql.

Niektóre funkcje projektu:

  • pozwala na zmiany schematu
  • pozwala na populację drzewa wartości
  • umożliwia oddzielne wstawki danych testowych dla np. UAT
  • pozwala na cofanie (Nie automatyczne)
  • utrzymuje wsparcie dla SQL server i Mysql
  • ma możliwość zaimportowania istniejącej bazy danych do kontroli wersji za pomocą jednego prostego polecenia (tylko sql server ... nadal działa na mysql)

Kod jest hostowany w Google code. Sprawdź kod Google, aby uzyskać więcej informacji

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

 5
Author: Rolf Wessels,
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-02-24 18:28:51

Jakiś czas temu znalazłem moduł VB bas, który używał obiektów DMO i VSS, aby uzyskać cały skrypt db off I do VSS. Zamieniłem go na skrypt VB i zamieściłem tutaj. Możesz łatwo wyjąć wywołania VSS i użyć rzeczy DMO do wygenerowania wszystkich skryptów, a następnie wywołać SVN z tego samego pliku wsadowego, który wywołuje VBScript, aby je sprawdzić?

Dave J

 4
Author: Dave Jackson,
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-16 17:55:32

Używam również wersji w bazie danych przechowywanej przez rodzinę procedur database extended properties. Moja aplikacja ma skrypty dla każdego kroku wersji (np. zmiana z 1.1 na 1.2). Po wdrożeniu patrzy na bieżącą wersję, a następnie uruchamia skrypty jeden po drugim, aż osiągnie ostatnią wersję aplikacji. Nie ma skryptu, który ma prostą 'ostateczną' wersję, nawet wdrożenie na czystym DB odbywa się poprzez szereg kroków aktualizacji.

Teraz to co lubię dodać to to, że widziałem dwa dni temu prezentacja na MS campus o nowej i nadchodzącej edycji VS DB. Prezentacja była skoncentrowana specjalnie na tym temacie i zostałem zdmuchnięty z wody. Zdecydowanie powinieneś to sprawdzić, nowe udogodnienia koncentrują się na zachowaniu definicji schematu w skryptach T-SQL( tworzy), uruchomieniowym silniku delta do porównywania schematu wdrożenia z zdefiniowanym schematem i robieniu zmian delta i integracji z integracją kodu źródłowego, aż do ciągłej integracji MSBUILD włącznie dla automatycznych zrzutów kompilacji. Drop będzie zawierał nowy typ pliku, the .pliki dbschema, które mogą być pobrane do witryny wdrażania i narzędzie wiersza poleceń może zrobić rzeczywiste "delty" i uruchomić wdrożenie. Mam wpis na blogu na ten temat z linkami do pobierania VSDE, powinieneś je sprawdzić: http://rusanu.com/2009/05/15/version-control-and-your-database/

 4
Author: Remus Rusanu,
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-15 19:26:32

To bardzo stare pytanie, jednak wielu próbuje rozwiązać to nawet teraz. Wszystko, co muszą zrobić, to zbadać projekty baz danych Visual Studio. Bez tego rozwój bazy danych wygląda bardzo słabo. Od organizacji kodu przez wdrożenie po wersjonowanie-wszystko upraszcza.

 3
Author: Srivathsa Harish Venkataramana,
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
2015-06-23 11:26:15

Z mojego doświadczenia wynika, że rozwiązanie jest dwojakie:

  1. Musisz zająć się zmianami w bazie danych deweloperskich, które są wykonywane przez wielu programistów podczas tworzenia.

  2. Musisz obsługiwać aktualizacje baz danych w witrynach klientów.

Aby obsłużyć #1, potrzebujesz silnego narzędzia do różnicowania/scalania baz danych. Najlepsze narzędzie powinno być w stanie wykonać automatyczne scalanie w jak największym stopniu, jednocześnie umożliwiając ręczne rozwiązywanie nieobsługiwanych konfliktów.

Doskonałe narzędzie powinno obsługiwać operacje scalania za pomocą 3-drożnego algorytmu scalania, który uwzględnia zmiany, które zostały dokonane w ich bazie danych i w bazie danych kopalni, w stosunku do bazy bazowej.

Napisałem komercyjne narzędzie, które zapewnia ręczne mergowanie baz danych SQLite i obecnie dodaję wsparcie dla 3-way merge algorithm dla SQLite. Sprawdź to na http://www.sqlitecompare.com

Aby obsłużyć #2 będziesz potrzebował upgrade Framework na miejscu.

Podstawową ideą jest opracowanie automatycznego systemu aktualizacji, który wie, jak uaktualnić istniejący schemat SQL do nowszego schematu SQL i może zbudować ścieżkę aktualizacji dla każdej istniejącej instalacji DB.

Zobacz mój artykuł na ten temat w http://www.codeproject.com/KB/database/sqlite_upgrade.aspx aby dowiedzieć się, o czym mówię.

Powodzenia

Liron Levi

 2
Author: Liron Levi,
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-08-06 10:28:36

Sprawdź DBGhost http://www.innovartis.co.uk / . używam w sposób zautomatyzowany od 2 lat i działa świetnie. Pozwala to, aby nasze Kompilacje DB dzieliły się podobnie jak Kompilacje Javy lub C, z wyjątkiem bazy danych. Wiesz, co mam na myśli.

 2
Author: Kuberchaun,
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-11-02 22:17:17

Sugerowałbym użycie narzędzi do porównywania, aby zaimprowizować system kontroli wersji dla twojej bazy danych. Dobrą alternatywą są XSQL Schema Comparei XSQL Data Compare .

Teraz, jeśli twoim celem jest mieć tylko schemat bazy danych pod kontrolą wersji, możesz po prostu użyć XSQL Schema Compare, aby wygenerować migawki XSQL schematu i dodać te pliki do kontroli wersji. Niż, aby przywrócić lub zaktualizować do określonej wersji wystarczy porównać bieżącą wersję baza danych z migawką dla wersji docelowej.

Niestety, jeśli chcesz mieć dane pod kontrolą wersji, możesz użyć porównania danych xSQL do wygenerowania skryptów zmiany dla twojej bazy danych i dodać .pliki sql w twojej kontroli wersji. Możesz następnie wykonać te skrypty, aby przywrócić / zaktualizować do dowolnej wersji. Należy pamiętać, że dla funkcji 'revert' należy wygenerować Skrypty zmian, które po wykonaniu sprawią, że Wersja 3 będzie taka sama jak Wersja 2 i dla funkcjonalność "Aktualizuj", musisz wygenerować Skrypty zmian, które robią odwrotnie.

Wreszcie, z kilkoma podstawowymi umiejętnościami programowania wsadowego można zautomatyzować cały proces za pomocą wersji wiersza poleceń XSQL Schema Compare i XSQL Data Compare

Zastrzeżenie: jestem związany z xSQL.

 1
Author: Endi Zhupani,
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
2017-01-10 16:16:55