Próbuję zdefiniować sposób pracy z testową bazą danych (w SQL Server) na potrzeby naszych testów integracyjnych.
Moim pomysłem było wykonanie następujących kroków podczas uruchamiania zestawu testowego integracji:
- utwórz całkowicie pustą bazę danych
- uruchom skrypt „twórz obiekty bazy danych”, aby utworzyć wszystkie odpowiednie obiekty bazy danych (tabela, widoki, sekwencje itp.)
- wypełnij „dane podstawowe” (wartości wyszukiwania itp.)
- weź migawkę bazy danych o nazwie
(db)_Basis
„linia bazowa” do przyszłych testów integracyjnych
Teraz przed każdą klasą testów (zawierającą testy 1-n) planowałem po prostu wykonać „przywracanie z migawki”, aby wrócić do dobrze zdefiniowanego, mniej lub bardziej „pustego” stanu bazy danych. Jak dotąd działa jak urok.
Istnieje jednak zestaw testów integracyjnych, które muszą działać na dużej bazie testowej - miałem więc nadzieję, że zrobię to przed każdym z tych urządzeń testowych (klasy z n pojedynczymi testami)
- przywróć bazę danych z
(db)_Basis
migawki - wstaw te 50'000 + wierszy danych do bazy danych
- utwórz kolejną
(db)_With_Testdata
migawkę
a następnie dla każdego testu zresetuj bazę danych do dobrze zdefiniowanej (db)_With_Testdata
wersji migawki, uruchom testy, sprawdź wynik i tak dalej.
Problem w tym, że nie mogę mieć dwóch migawek bazy danych jednocześnie - po wykonaniu tej czynności nie mogę przywrócić bazy danych do żadnej z nich ... Nadal pojawia się ten błąd:
Msg 3137, poziom 16, stan 4, wiersz 9
Baza danych nie może zostać przywrócona. Nazwy podstawowe lub migawki są niepoprawnie określone, wszystkie inne migawki nie zostały usunięte lub brakuje plików.Msg 3013, poziom 16, stan 1, wiersz 9
PRZYWRACANIE BAZY DANYCH kończy się nieprawidłowo.
Czy tak naprawdę działają migawki bazy danych SQL Server? Wydaje się okropnie ograniczające ..... Zrozumiałbym, gdybym nie mógł wrócić bezpośrednio do oryginalnej migawki „(db) _Basis” - ale tylko dlatego, że mam teraz dwie migawki, nie mogę nawet wrócić do najnowszej ?!?!?
źródło
Odpowiedzi:
Niestety jest to zgodne z projektem.
Pobrane ze strony BOL „ Przywróć bazę danych do migawki bazy danych ”:
Alternatywnie możesz upuścić pierwszą migawkę
(db)_Basis
. Rozumiem, że wydaje się to bardzo ograniczające, ale spójrz na to w ten sposób: migawki to rzadkie pliki oparte na oryginalnych plikach danych, więc powrót do konkretnej migawki i tak unieważniłby wszystkie migawki (podstawowe pliki danych zostałyby zmienione przez operację przywracania) . Ograniczenie może być denerwujące, ale nie wydaje się nieuzasadnione.źródło
Inną perspektywą będzie tworzenie kopii zapasowych i przywracanie ich - ponieważ tworzysz tylko pustą bazę danych i schemat z pewnymi wartościami odnośników.
Ponadto po wstawieniu 50 000 wierszy baza danych nie będzie tak duża. Jeśli użyjesz kompresji, rozmiar kopii zapasowej również będzie mniejszy.
Możesz mieć zadania agenta TSQL lub po prostu skrypty (może być tak, że możesz utworzyć procedurę składowaną i po prostu wywołać ją po testach na podstawie otrzymanych danych wyjściowych).
(db)_Basis
(db)_With_Testdata
jeśli masz uruchomione skrypty integracyjne i na podstawie ostatecznego wyniku, możesz uruchomić jedno z powyższych zadań, aby powrócić do dowolnego punktu, w którym chcesz.
Uważam, że metoda tworzenia kopii zapasowych / przywracania jest bardzo elegancka w twoim scenariuszu, ponieważ osiągasz ograniczenie migawki bazy danych . Ponadto Paul Randal pisał na blogu o paskudnym błędzie we wszystkich wersjach do SQL Servera 2012 włącznie (nie jestem pewien, czy zostanie to naprawione w późniejszym CU)
źródło