Alat Data SQL Server dan fungsi partisi

16

Saya sedang membuat skenario memuat jendela geser dan fungsi partisi akan mengubah batas-batas mereka dari waktu ke waktu.

Saya telah membuat beberapa fungsi partisi dalam proyek database SQL Server Data Tools (SSDT) ​​saya dengan beberapa batasan awal hardcoded.

Namun, seiring berjalannya waktu dan batas fungsi partisi berubah, penerbitan basis data SSDT yang akan datang akan mengembalikan batas ke yang asli.

Apakah ada cara untuk menangani skenario ini dengan anggun, mungkin dengan menonaktifkan penerbitan fungsi partisi?

Saya sudah mencoba mengubah properti Build Action dari fungsi partisi di SSDT, dari default Build, menjadi None, tetapi kemudian proyek gagal dibangun karena referensi yang hilang pada objek yang bergantung.

gonsalu
sumber
4
Saya selalu mengatakan bahwa penyebaran berbasis diff pada dasarnya rusak. Migrasi adalah metafora penyebaran yang jauh lebih unggul !
Remus Rusanu
The 'Abaikan Indeks pilihan' harus ditetapkan juga untuk menghindari SSDT membangun kembali indeks dipartisi Anda setiap kali penyebaran dipicu.

Jawaban:

16

Saya dapat menemukan solusi untuk masalah saya - semoga ini membantu orang lain.

Untuk menghindari setiap penerbitan basis data membuat ulang fungsi partisi, Anda dapat memeriksa opsi Abaikan skema partisi dalam dialog Pengaturan Penerbitan Lanjutan ( tombol ... Lanjutan dalam dialog Penerbitan Database).

Dari uraian opsi (penekanan milik saya):

Menentukan apakah perbedaan dalam skema dan fungsi partisi harus diabaikan atau diperbarui saat Anda menerbitkan ke database.

Namun, jika Anda telah menetapkan objek yang dipartisi (tabel atau indeks) dengan kompresi halaman atau baris, meskipun opsi Abaikan skema partisi tidak lagi menciptakan kembali fungsi partisi, objek yang dipartisi akan tetap diciptakan kembali.

Ini terjadi karena objek yang dipartisi mendapat skrip dengan kompresi yang ditentukan per partisi , dan karena objek memiliki jumlah partisi yang berbeda dari yang awalnya ditetapkan, SSDT membuat ulang objek pada mempublikasikan. Misalnya (diformat):

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

Agar ini tidak terjadi, Anda juga dapat memeriksa opsi Abaikan tabel opsi, dalam dialog Pengaturan Penerbitan Lanjutan yang sama - perlu diingat bahwa Anda akan mengabaikan opsi lain, seperti ALLOW_ROW_LOCKSdan ALLOW_PAGE_LOCKS( referensi opsi tabel ).

Dialog Pengaturan Penerbitan Lanjutan

gonsalu
sumber
1
Google baru saja membawa saya ke sini. Info luar biasa, terima kasih telah berbagi.
jamiet
Perhatikan bahwa jika Anda menggunakan dialog serupa di properti proyek -> halaman Debug, perubahan akan disimpan ke file .sqlproj.user, TETAPI hanya saat pembongkaran proyek.
Taran
3

Aduh, itu bukan situasi yang baik. Sejauh yang saya tahu SSDT tidak mendukung ini. Solusi terbaik yang dapat saya pikirkan adalah dengan menggunakan skrip Pra-Penempatan untuk menyimpan batas-batas dalam tabel dan kemudian mengubah fungsi partisi menggunakan nilai-nilai tersebut dalam skrip Pasca Penempatan.

jamiet
sumber
Abaikan jawaban saya di sini, menilai jawaban Gonsalu saya di atas saya jelas salah.
jamiet