2012-03-19 36 views
5

Tôi rất vui khi thực hiện bước nhảy vọt để sử dụng DAC Fx và phát triển cơ sở dữ liệu khai báo. Trở ngại chính đối với tôi là làm thế nào để xử lý việc di chuyển dữ liệu phức tạp qua nhiều phiên bản khác nhau của lược đồ. Trong thế giới cũ, chúng ta chỉ có thể chạy tất cả các kịch bản nâng cấp của chúng tôi theo thứ tự, đảm bảo rằng lược đồ ở trạng thái chính xác tại thời điểm di chuyển dữ liệu. Cách này hoạt động khi đường dẫn nâng cấp là động?Di chuyển dữ liệu phức tạp trong Khung ứng dụng tầng dữ liệu (DAC Fx)

Ví dụ, giả sử có một số phiên bản của giản đồ của tôi (DACPAC1-4) trên trường hiện có:

  • DACPAC1: tableA tồn tại và có dữ liệu khách hàng có giá trị
  • DACPAC2: tableA bị phản đối và thay thế bằng tableB và bảng chuẩn hóaC; thêm mới bảngD
    • tập lệnh sau triển khai: di chuyển dữ liệu từ bảngA sang bảng mớiB và tableC; thả tableA
  • DACPAC3: tableC có mới, nullable columnX
    • kịch bản sau triển khai: populates cột nullable dựa trên thảo luận từ
  • DACPAC4: tableC.columnX là không nullable

Nếu tôi cần hỗ trợ nâng cấp các máy chủ DACPAC1-3 lên DACPAC4 mới nhất, bây giờ tôi phải viết các kịch bản trước và sau triển khai của mình theo cách đủ thông minh để phát hiện DACPAC hiện đang nhắm mục tiêu và xử lý chính xác các bước di chuyển dữ liệu theo thứ tự. Hơn nữa, tôi không thể đơn giản tái sử dụng các kịch bản hậu triển khai ngây thơ mà tôi đã viết ban đầu, vì chúng phụ thuộc vào các phiên bản trung gian của lược đồ.

Cảm ơn trước vì lời khuyên nào!

Trả lời

0

Những gì tôi thường làm là như sau:

  1. Tạo một bảng hệ thống bao gồm một tính chất gọi SchemaVersion. Tất cả các kịch bản nâng cấp được lập trình để kiểm tra phiên bản hiện tại đầu tiên và sau đó quyết định xem có thực thi nội dung của nó hay không. Sau khi thực hiện, nó đặt SchemaVersion thành phiên bản mới nhất được lưu trữ trong tập lệnh.

  2. Tôi cũng thường bao gồm một thuộc tính khác được gọi là MinAppVersion (phiên bản tối thiểu tương thích với lược đồ hiện tại). Khi ứng dụng cố gắng kết nối với cơ sở dữ liệu, nó so sánh phiên bản lắp ráp hiện tại của nó với MinAppVersion được lưu trữ trong cơ sở dữ liệu. Nếu phiên bản bằng hoặc cao hơn MinAppVersion thì kết nối được thiết lập, nếu không thì một ngoại lệ sẽ được ném.

Tôi hy vọng điều này sẽ hữu ích. Trân trọng,

Các vấn đề liên quan