Công cụ dữ liệu SQL Server và các chức năng phân vùng


16

Tôi đang tạo một kịch bản tải cửa sổ trượt và các chức năng phân vùng sẽ thay đổi ranh giới theo thời gian.

Tôi đã tạo một số chức năng phân vùng trong dự án cơ sở dữ liệu SQL Server Data Tools (SSDT) ​​với một số ranh giới ban đầu được mã hóa cứng.

Tuy nhiên, khi thời gian trôi qua và ranh giới của các chức năng phân vùng thay đổi, các cơ sở dữ liệu SSDT trong tương lai sẽ hoàn nguyên các ranh giới về các ranh giới ban đầu.

Có cách nào để xử lý tình huống này một cách duyên dáng, có thể bằng cách vô hiệu hóa việc xuất bản các chức năng phân vùng?

Tôi đã thử thay đổi thuộc tính Build Action của các chức năng phân vùng trong SSDT, từ mặc định Buildsang None, nhưng sau đó dự án không thể xây dựng do thiếu tham chiếu trong các đối tượng tùy thuộc.


4
Tôi luôn nói rằng việc triển khai dựa trên diff bị phá vỡ cơ bản. Di cư là một ẩn dụ triển khai vượt trội như vậy !
Remus Rusanu

Cũng nên đặt 'Bỏ qua các tùy chọn chỉ mục' để tránh SSDT xây dựng lại chỉ mục được phân vùng của bạn mỗi khi triển khai được kích hoạt.

Câu trả lời:


16

Tôi đã có thể tìm ra giải pháp cho vấn đề của mình - hy vọng điều này sẽ giúp người khác.

Để tránh mỗi lần xuất bản cơ sở dữ liệu tạo lại chức năng phân vùng, bạn có thể kiểm tra tùy chọn Bỏ qua lược đồ phân vùng trong hộp thoại Cài đặt xuất bản nâng cao ( nút Nâng cao ... trong hộp thoại Xuất bản cơ sở dữ liệu).

Từ mô tả của tùy chọn (nhấn mạnh của tôi):

Chỉ định xem có nên bỏ qua hoặc cập nhật sự khác biệt trong các lược đồ và chức năng phân vùng hay không khi bạn xuất bản lên cơ sở dữ liệu.

Tuy nhiên, nếu bạn đã xác định một đối tượng được phân vùng (bảng hoặc chỉ mục) với nén trang hoặc hàng, mặc dù tùy chọn lược đồ phân vùng Bỏ qua không còn tạo lại chức năng phân vùng, dù sao đối tượng được phân vùng sẽ được tạo lại.

Điều này xảy ra bởi vì đối tượng được phân vùng được viết kịch bản với nén được xác định cho mỗi phân vùng và do đối tượng có số lượng phân vùng khác với định nghĩa ban đầu, SSDT tạo lại đối tượng khi xuất bản. Ví dụ: (được định dạng):

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

Để điều này không xảy ra, bạn cũng có thể kiểm tra tùy chọn Bỏ qua bảng , trong cùng hộp thoại Cài đặt Xuất bản Nâng cao - chỉ cần lưu ý rằng bạn sẽ bỏ qua các tùy chọn khác, chẳng hạn như ALLOW_ROW_LOCKSALLOW_PAGE_LOCKS( tham chiếu các tùy chọn bảng ).

Hộp thoại Cài đặt Xuất bản Nâng cao


1
Google chỉ dẫn tôi vào đây. Thông tin tuyệt vời, cảm ơn bạn đã chia sẻ.
jamiet

Lưu ý rằng nếu bạn đang sử dụng hộp thoại tương tự trong thuộc tính dự án -> Trang gỡ lỗi, các thay đổi sẽ được lưu vào tệp .sqlproj.user, NHƯNG chỉ khi dỡ dự án.
Taran

3

Ouch, đó không phải là một tình huống tốt. Theo như tôi biết thì SSDT không hỗ trợ điều này. Cách giải quyết tốt nhất tôi có thể nghĩ đến là sử dụng tập lệnh Pre-Deployment để lưu trữ các ranh giới trong một bảng và sau đó thay đổi hàm phân vùng bằng các giá trị đó trong tập lệnh Post-Deployment.


Bỏ qua câu trả lời của tôi ở đây, đánh giá câu trả lời của Gonsalu của tôi ở trên tôi rõ ràng đã sai.
jamiet
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.