SQL Server-Datentools und Partitionsfunktionen

16

Ich erstelle ein Ladeszenario für Schiebefenster und die Partitionsfunktionen ändern ihre Grenzen im Laufe der Zeit.

Ich habe in meinem SQL Server Data Tools-Datenbankprojekt (SSDT) ​​einige Partitionsfunktionen mit einigen fest codierten Anfangsgrenzen erstellt.

Mit der Zeit und den sich ändernden Grenzen der Partitionsfunktionen werden die Grenzen zukünftiger SSDT-Datenbankveröffentlichungen jedoch auf die ursprünglichen Grenzen zurückgesetzt.

Gibt es eine Möglichkeit, dieses Szenario ordnungsgemäß zu handhaben, möglicherweise durch Deaktivieren der Veröffentlichung der Partitionsfunktionen?

Ich habe versucht, die Build Action- Eigenschaft der Partitionsfunktionen in SSDT von der Standardeinstellung Buildin zu ändern None, aber dann kann das Projekt aufgrund eines fehlenden Verweises in den abhängigen Objekten nicht erstellt werden.

gonsalu
quelle
4
Ich habe immer gesagt, dass die diff-basierte Bereitstellung grundsätzlich nicht funktioniert. Migrationen sind eine weitaus überlegene Bereitstellungsmetapher !
Remus Rusanu
Die Option "Index ignorieren" sollte auch festgelegt werden, um zu verhindern, dass SSDT Ihren partitionierten Index bei jedem Auslösen der Bereitstellung neu erstellt.

Antworten:

16

Ich konnte eine Lösung für mein Problem finden - hoffe, das hilft jemand anderem.

Um zu vermeiden, dass bei jeder Datenbankveröffentlichung die Partitionsfunktion neu erstellt wird, können Sie die Option Partitionsschemata ignorieren im Dialogfeld Erweiterte Veröffentlichungseinstellungen ( Schaltfläche Erweitert ... im Dialogfeld Datenbankveröffentlichung) aktivieren.

Aus der Beschreibung der Option (Schwerpunkt Mine):

Gibt an, ob Unterschiede in Partitionsschemata und Funktionen beim Veröffentlichen in einer Datenbank ignoriert oder aktualisiert werden sollen.

Wenn Sie jedoch ein partitioniertes Objekt (Tabelle oder Index) mit Seiten- oder Zeilenkomprimierung definiert haben , wird das partitionierte Objekt trotzdem neu erstellt , obwohl die Option Partitionsschemata ignorieren die Partitionsfunktion nicht mehr wiederherstellt.

Dies liegt daran, dass für das partitionierte Objekt Skripts mit der pro Partition definierten Komprimierung erstellt werden und dass SSDT das Objekt beim Veröffentlichen neu erstellt, da das Objekt eine andere Anzahl von Partitionen aufweist als ursprünglich definiert. ZB (formatiert):

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

Damit dies nicht passiert, können Sie auch die Option " Tabellenoptionen ignorieren" im selben Dialogfeld " Erweiterte Veröffentlichungseinstellungen" aktivieren. Beachten Sie jedoch, dass Sie andere Optionen wie ALLOW_ROW_LOCKSund ignorieren ALLOW_PAGE_LOCKS( Referenz der Tabellenoptionen ).

Dialogfeld "Erweiterte Veröffentlichungseinstellungen"

gonsalu
quelle
1
Google hat mich hierher geführt. Tolle Infos, danke fürs Teilen.
Jamiet
Beachten Sie, dass bei Verwendung des ähnlichen Dialogfelds in den Projekteigenschaften -> Debug-Seite die Änderungen in der Datei .sqlproj.user gespeichert werden, ABER nur beim Entladen des Projekts.
Taran
3

Autsch, das ist keine gute Situation. Soweit ich weiß, unterstützt SSDT dies nicht. Die beste Lösung, die ich mir vorstellen kann, besteht darin, ein Skript vor der Bereitstellung zu verwenden, um die Grenzen in einer Tabelle zu speichern und dann die Partitionsfunktion mithilfe dieser Werte im Skript nach der Bereitstellung zu ändern.

jamiet
quelle
Ignoriere meine Antwort hier und urteile über die Antwort meines Gonsalu. Ich habe mich eindeutig geirrt.
Jamiet