Jaki jest dobry sposób na migrację zmian DB z programowania do kontroli jakości do środowisk produkcyjnych? Obecnie my:
- Skryptuj zmianę w pliku SQL i dołącz ją do elementu pracy TFS.
- Praca jest recenzowana
- Gdy praca jest gotowa do testowania, SQL jest uruchamiany w ramach kontroli jakości.
- Praca jest testowana pod kątem jakości
- Gdy praca jest gotowa do produkcji, SQL jest uruchamiany w produkcyjnych bazach danych.
Problem polega na tym, że jest to bardzo ręczne. Polega on na tym, że deweloper pamięta, aby dołączyć sql lub recenzenta łapiąc go, jeśli programista zapomni. Czasami kończy się to testerem lub wdrażającym QA, który odkrywa problem.
Drugi problem polega na tym, że czasami trzeba ręcznie koordynować zmiany, jeśli dwa oddzielne zadania zmieniają ten sam obiekt bazy danych. Może tak po prostu jest, ale nadal wydaje się, że powinien istnieć jakiś zautomatyzowany sposób „oflagowania” tych problemów lub coś takiego.
Nasza konfiguracja: nasz sklep deweloperski jest pełen programistów z dużym doświadczeniem w zakresie DB. Nasze projekty są bardzo zorientowane na DB. Jesteśmy głównie sklepem .NET i MS SQL. Obecnie używamy elementów roboczych MS TFS do śledzenia naszej pracy. Jest to przydatne w przypadku zmian kodu, ponieważ łączy zestawy zmian z elementami pracy, dzięki czemu mogę dowiedzieć się dokładnie, jakie zmiany muszę wprowadzić podczas migracji do środowisk QA i produkcyjnych. Obecnie nie korzystamy z projektu DB, ale możemy przejść do niego w przyszłości (być może jest to część odpowiedzi).
Jestem bardzo przyzwyczajony do mojego systemu kontroli źródła, który zajmuje się takimi rzeczami dla mnie i chciałbym mieć to samo dla mojego SQL.
źródło
Odpowiedzi:
W środowisku VS zawsze korzystałem z projektów baz danych w celu wdrożenia skryptów aktualizacji. W swoich skryptach używam niewyobrażalnych nazw, takich jak „DatabaseUpdate17.sql” lub „PriceUpdateFeb February2010.sql”. Posiadanie ich jako projektów baz danych pozwala mi powiązać je z zadaniami Team Server, błędami (i jeśli zrobiliśmy recenzje kodu, również z nimi). Do każdej bazy danych (nad którą mam uprawnienia) dołączam również tabelę specjalnie do zbierania zmian w schemacie.
Dobrze, że troszczy się o 3 z 6 Ws .
Do instrukcji dołączam instrukcję insert, która rejestruje początek i koniec łatki. Wydarzenia, które mają miejsce poza łatkami, są warte uwagi.
Na przykład wstawka „rozpocznij łatkę” dla „poprawki 17” wyglądałaby następująco:
Ponieważ wyłapuje się również przy przebudowywaniu indeksów, musisz co miesiąc uruchamiać następujące czynności, aby usunąć te zdarzenia:
Wcześniejsza wersja opublikowana wcześniej w usłudze Server Fault .
W środowisku zgodnym z SOX i PCI-DSS nigdy nie będziesz mieć dostępu do serwerów produkcyjnych. Dlatego skrypty muszą być jasne i wykonane wcześniej. Komentarze u góry skryptów aktualizacji zawierają listy nowych tabel, przechowywane procy, funkcje itp., A także listy zmodyfikowanych tabel, przechowywane procy, funkcje itp. Jeśli dane zostaną zmodyfikowane, wyjaśnij, co jest modyfikowane i dlaczego.
Nigdy nie spotkałem narzędzia, które pozwala nam to śledzić automatycznie. Poprzedni pracodawcy stosowali zasadę „właściciela bazy danych” - jednej i tylko jednej osoby, która jest osobiście odpowiedzialna za bazę danych. Ta osoba nie będzie jedynym programistą działającym przeciwko tej bazie danych, ale raczej wszystkie zmiany muszą przez nią przejść. Działało to dość dobrze, aby zapobiec wzajemnym zderzeniom i szkodom.
źródło
Czy spojrzałeś na SQL Source Control? Możesz go użyć do połączenia SQL Servera z TFS / SVN / Vault lub VSS - http://www.red-gate.com/products/sql-development/sql-source-control/
źródło
Innym rozwiązaniem jest użycie czegoś takiego jak PowerDesigner, ERWin itp. Do projektowania i zarządzania zmianami w bazie danych.
Zaczynamy przechodzić do zasad, w których bazy danych są modelowane w PowerDesigner. Wszystkie zmiany w strukturze / kodzie bazy danych są wprowadzane w modelu, sprawdzane w kontroli źródła, a następnie generowane są skrypty zmian z modeli w celu zaimplementowania zmian w bazie danych. Te skrypty zmian są również rejestrowane w celu kontroli źródła. Duże zmiany są recenzowane, a PowerDesigner bardzo ułatwia korzystanie z wbudowanych funkcji.
PowerDesigner to ogólne narzędzie do modelowania obsługujące więcej niż tylko bazy danych, więc zaczynamy go używać do zarządzania wymaganiami, tworzenia schematów koncepcyjnych, fizycznych i architektury (także OOM) itp. Zasadniczo używamy go do zapewnienia szkieletu naszej proces inżynierii oprogramowania.
(Nie jestem w żaden sposób związany z Sybase, która opracowała PowerDesigner - pomyślałem, że wrzucę to tam).
źródło
DB Ghost
DB Ghost to moje ulubione narzędzie do zarządzania bazami danych.
Korzyści
[4] jest szczególnie przydatny do wprowadzania lokalnych zmian lub tworzenia osobnych instancji dla różnych środowisk. W rzeczywistości jest to tak łatwe, że tworzę osobną bazę danych dla każdej funkcji lub błędu, nad którym pracuję, który wpływa na bazę danych.
Detale
Główną zaletą korzystania z niego nad utrzymywaniem jawnych skryptów zmian lub migracji jest to, że w większości przypadków nie trzeba utrzymywać jawnych skryptów zmian lub migracji - zazwyczaj można zachować tylko „bieżącą wersję” bazy danych. Jednym z irytujących aspektów zarządzania skryptami migracji jest to, że nie ma łatwego sposobu na zobaczenie, np. Listy kolumn w tabeli (na podstawie skryptów migracji). Oczywiście, niektóre zmiany należy wprowadzić jako jawne migracje, ale są one wystarczająco łatwe do obsługi jako osobne skrypty.
Szczególnie miłą konsekwencją zarządzania bazami danych (zestawem skryptów), a także szybkiego tworzenia nowych instancji jest to, że testowanie ważnego kodu bazy danych jest bardzo łatwe (i bardzo przyjemne). Używam tSQLt do testowania jednostek.
Żałuję tylko, że nie było podobnego narzędzia dla innych DBMS-ów.
źródło
Wiem, że to brzmi zbyt przesadnie w stosunku do większości DBA:
Czy rozważałeś użycie Ruby on Rails do śledzenia zmian w Bazie danych (i tylko zmian w DB). Nie musisz uruchamiać żadnej aplikacji ani pisać kodu ruby itp. Ale uważam, że styl migracji (tak to nazywają) jest dość przydatny: http://guides.rubyonrails.org/migrations.html
Obsługiwany jest także serwer SQL, może być konieczne użycie JRuby + JDBC.
źródło