Ảnh chụp nhanh cơ sở dữ liệu SQL Server để kiểm tra tích hợp


14

Tôi đang cố gắng xác định cách làm việc với cơ sở dữ liệu thử nghiệm (trong SQL Server) để thử nghiệm tích hợp của chúng tôi.

Ý tưởng của tôi là thực hiện các bước này khi ra mắt hội đồng thử nghiệm tích hợp:

  • tạo một cơ sở dữ liệu hoàn toàn trống
  • chạy tập lệnh "tạo đối tượng cơ sở dữ liệu" để tạo tất cả các đối tượng cơ sở dữ liệu có liên quan (bảng, dạng xem, trình tự, v.v.)
  • điền "dữ liệu cơ sở" (giá trị tra cứu, v.v.)
  • chụp ảnh nhanh cơ sở dữ liệu được gọi (db)_Basislà "đường cơ sở" cho các thử nghiệm tích hợp trong tương lai

Bây giờ trước mỗi lớp kiểm tra (chứa các bài kiểm tra 1-n), tôi đã dự định chỉ cần thực hiện "khôi phục từ ảnh chụp nhanh" để quay lại trạng thái được xác định rõ, ít nhiều "trống rỗng" của cơ sở dữ liệu. Hoạt động như một nét duyên dáng cho đến nay.

Tuy nhiên, có một tập hợp các thử nghiệm tích hợp cần hoạt động trên cơ sở dữ liệu thử nghiệm lớn - vì vậy tôi đã hy vọng thực hiện việc này trước mỗi thử nghiệm thử nghiệm đó (các lớp có n thử nghiệm riêng lẻ)

  • khôi phục cơ sở dữ liệu từ (db)_Basisảnh chụp nhanh
  • chèn 50.000 + hàng dữ liệu vào cơ sở dữ liệu
  • tạo ra một bản chụp (db)_With_Testdataảnh chụp

và sau đó cho mỗi thử nghiệm, đặt lại cơ sở dữ liệu về (db)_With_Testdataphiên bản chụp nhanh được xác định rõ , chạy thử nghiệm, xác minh kết quả và vv.

Rắc rối là: Tôi dường như không thể có hai ảnh chụp nhanh db cùng một lúc - một khi tôi làm như vậy, tôi không thể khôi phục cơ sở dữ liệu của mình cho một trong số chúng .... Tôi tiếp tục gặp lỗi này:

Msg 3137, Cấp 16, Trạng thái 4,
Cơ sở dữ liệu Dòng 9 không thể được hoàn nguyên. Tên chính hoặc tên ảnh chụp nhanh được chỉ định không chính xác, tất cả các ảnh chụp nhanh khác không bị loại bỏ hoặc có các tệp bị thiếu.

Msg 3013, Cấp 16, Bang 1, Dòng 9
RESTORE DATABASE đang chấm dứt bất thường.

Đó thực sự là cách các snapshot cơ sở dữ liệu SQL Server hoạt động ?? Có vẻ rất hạn chế ..... Tôi sẽ hiểu nếu tôi không thể quay lại trực tiếp ảnh chụp nhanh "(db) _Bocation" ban đầu - nhưng chỉ vì bây giờ tôi có hai ảnh chụp nhanh, tôi thậm chí không thể quay lại ảnh chụp gần đây nhất ?!?!?


Phần Chèn 50.000 hàng mất bao lâu? Bạn có thể chỉ cần áp dụng lại thay thế?
RBarryYoung

Câu trả lời:


12

Thật không may, đó là do thiết kế.

Lấy từ trang BOL " Hoàn nguyên cơ sở dữ liệu thành ảnh chụp cơ sở dữ liệu ":

Hạn chế và hạn chế

Hoàn nguyên không được hỗ trợ trong các điều kiện sau:

  • Cơ sở dữ liệu hiện phải chỉ có một ảnh chụp nhanh cơ sở dữ liệu mà bạn dự định hoàn nguyên.
  • Bất kỳ filegroup chỉ đọc hoặc nén tồn tại trong cơ sở dữ liệu.
  • Mọi tệp hiện đang ngoại tuyến nhưng đã trực tuyến khi ảnh chụp nhanh được tạo

Để thay thế, bạn có thể bỏ ảnh chụp đầu tiên (db)_Basis. Tôi có thể hiểu rằng điều này có vẻ rất hạn chế nhưng hãy nhìn nó theo cách này: ảnh chụp nhanh là các tệp thưa thớt dựa trên các tệp dữ liệu gốc, do đó, việc quay lại một ảnh chụp nhanh cụ thể sẽ làm mất hiệu lực tất cả các ảnh chụp nhanh (dù sao tệp dữ liệu cơ sở sẽ bị thay đổi bởi thao tác hoàn nguyên) . Giới hạn có thể gây phiền nhiễu, nhưng trông không hợp lý.


4

Một viễn cảnh khác sẽ là sao lưu và khôi phục chúng - vì bạn chỉ đang tạo cơ sở dữ liệu và lược đồ trống với một số giá trị tra cứu.

Ngoài ra, chỉ cần chèn 50K hàng, cơ sở dữ liệu sẽ không lớn. Nếu bạn sử dụng nén, kích thước sao lưu cũng sẽ ít hơn.

Bạn có thể có một công việc Đại lý TSQL hoặc chỉ các tập lệnh (có thể bạn có thể tạo thủ tục được lưu trữ và chỉ cần gọi nó sau khi kiểm tra dựa trên đầu ra bạn nhận được).

  • Sao lưu cơ sở - (db)_Basis
  • Với bản sao lưu testdata - (db)_With_Testdata

có các kịch bản tích hợp của bạn chạy và dựa trên đầu ra cuối cùng, bạn có thể chạy một trong các công việc trên để trở lại điểm bạn muốn.

Tôi cảm thấy rằng phương pháp sao lưu / khôi phục rất thanh lịch trong kịch bản của bạn vì bạn đang đạt giới hạn chụp nhanh cơ sở dữ liệu . Ngoài ra, Paul Randal đã viết blog về một lỗi khó chịu trong tất cả các phiên bản lên đến và bao gồm cả SQL Server 2012 (không chắc nó có được sửa trong CU sau này không)

Khi bạn hoàn nguyên về ảnh chụp nhanh cơ sở dữ liệu, tệp nhật ký giao dịch của cơ sở dữ liệu nguồn được tách ra và thay thế bằng tệp nhật ký 0,5 MB bằng hai VLF 0,25 MB.


Có, chúng tôi đã sử dụng sao lưu / khôi phục - nhưng đó là trong phạm vi 5-7 giây, trong khi khôi phục từ ảnh chụp nhanh cơ sở dữ liệu thấp hơn 1 giây - đó là lý do tại sao chúng tôi đang tìm kiếm một giải pháp thay thế cho sao lưu / khôi phục
marc_s

@marc_s Đối với tôi, 5 - 7 giây là chấp nhận được mà không có giới hạn và lỗi so với 1 giây với các giới hạn và lỗi có thể xảy ra :-)
Kin Shah

Đối với chúng tôi, điều đó không được chấp nhận - chúng tôi đang tìm kiếm một giải pháp nhanh hơn
marc_s

@marc_s Tôi thấy quan điểm của bạn là không thể chấp nhận được. Nhưng bạn đã đạt được những hạn chế đó là do thiết kế. Bạn chỉ có thể sử dụng 1 ảnh chụp nhưng vẫn cần sao lưu để hoàn nguyên. Lựa chọn là của bạn - sử dụng một ảnh chụp nhanh, ví dụ với testdata của bạn và sử dụng sao lưu để khôi phục dữ liệu cơ sở.
Kin Shah
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.