Narzędzia danych programu SQL Server i funkcje partycji

16

Tworzę scenariusz ładowania okna przesuwnego, a funkcje partycji z czasem zmienią swoje granice.

Utworzyłem niektóre funkcje partycji w moim projekcie bazy danych SQL Server Data Tools (SSDT) ​​z pewnymi początkowymi granicami zakodowanymi na stałe.

Jednak wraz z upływem czasu i zmianami granic funkcji partycji przyszłe publikacje bazy danych SSDT cofną granice do pierwotnych.

Czy istnieje jakiś sposób, aby poradzić sobie z tym scenariuszem z wdziękiem, być może poprzez wyłączenie publikowania funkcji partycji?

Próbowałem zmienić właściwość Build Action funkcji partycji w SSDT, z domyślnej Buildna None, ale potem projekt nie buduje się z powodu braku odniesienia w zależnych obiektach.

gonsalu
źródło
4
Zawsze mówiłem, że wdrożenie oparte na różnicach jest zasadniczo zepsute. Migracje to tak znakomita metafora wdrażania !
Remus Rusanu
W „Ignoruj opcje na indeksy” powinno być ustawione również w celu uniknięcia SSDT odbudowy indeksu podzielony na partycje za każdym razem, rozmieszczenie jest wyzwalany.

Odpowiedzi:

16

Udało mi się znaleźć rozwiązanie mojego problemu - mam nadzieję, że to pomoże komuś innemu.

Aby uniknąć ponownego tworzenia funkcji partycji przez każdą publikację bazy danych, możesz zaznaczyć opcję Ignoruj ​​schematy partycji w oknie dialogowym Zaawansowane ustawienia publikowania ( Zaawansowane ... przycisk w oknie dialogowym Publikowanie bazy danych).

Z opisu opcji (moje podkreślenie):

Określa, czy różnice w schematach partycji i funkcjach powinny być ignorowane lub aktualizowane podczas publikowania w bazie danych.

Jeśli jednak zdefiniowałeś partycjonowany obiekt (tabelę lub indeks) z kompresją strony lub wiersza, chociaż schematy partycji Ignoruj opcja nie odtwarza już funkcji partycji, obiekt partycjonowany i tak zostanie odtworzony.

Dzieje się tak, ponieważ partycjonowany obiekt jest skryptowany ze zdefiniowaną kompresją dla każdej partycji , a ponieważ obiekt ma inną liczbę partycji niż pierwotnie zdefiniowano, SSDT odtwarza obiekt po opublikowaniu. Np. (Sformatowany):

WITH ( DATA_COMPRESSION = PAGE ON PARTITIONS (1)
     , DATA_COMPRESSION = PAGE ON PARTITIONS (2)
     , ...

Aby tak się nie stało, możesz również zaznaczyć opcję Ignoruj ​​opcje tabeli w tym samym oknie dialogowym Zaawansowane ustawienia publikowania - pamiętaj, że będziesz ignorować inne opcje, takie jak ALLOW_ROW_LOCKSi ALLOW_PAGE_LOCKS( odniesienie do opcji tabeli ).

Okno dialogowe Zaawansowane ustawienia publikowania

gonsalu
źródło
1
Google właśnie mnie tu zaprowadziło. Niesamowite informacje, dziękuję za udostępnienie.
jamiet
Pamiętaj, że jeśli używasz podobnego okna dialogowego we właściwościach projektu -> Strona debugowania, zmiany zostaną zapisane w pliku .sqlproj.user, ALE tylko przy rozładowaniu projektu.
Taran
3

To nie jest dobra sytuacja. O ile wiem SSDT nie obsługuje tego. Najlepszym obejściem, jakie mogę wymyślić, jest użycie skryptu przedwdrożeniowego do przechowywania granic w tabeli, a następnie zmiana funkcji partycji przy użyciu tych wartości w skrypcie powdrożeniowym.

Jamiet
źródło
Zignoruj ​​moją odpowiedź tutaj, oceniając odpowiedź Gonsalu powyżej, wyraźnie się myliłem.
jamiet