Chuyển dữ liệu sao lưu từ phiên bản MS SQL Server mới sang phiên bản cũ hơn

thời tiền sử

Một lần, để tái tạo một lỗi, tôi cần một bản sao lưu cơ sở dữ liệu sản xuất.

Thật ngạc nhiên, tôi đã gặp phải những hạn chế sau:

  1. Việc sao lưu cơ sở dữ liệu đã được thực hiện trên phiên bản SQL Server 2016 và không tương thích với tôi SQL Server 2014.
  2. Trên máy tính làm việc của tôi, hệ điều hành là cửa sổ 7nên tôi không thể cập nhật SQL server lên tới phiên bản 2016
  3. Sản phẩm được hỗ trợ là một phần của hệ thống lớn hơn với kiến ​​trúc cũ được kết hợp chặt chẽ, đồng thời truy cập vào các sản phẩm và cơ sở khác, do đó có thể mất rất nhiều thời gian để triển khai sang trạm khác.

Với những điều trên, tôi đi đến kết luận rằng đã đến lúc phải dùng nạng cho các giải pháp phi tiêu chuẩn.

Khôi phục dữ liệu từ bản sao lưu

Tôi quyết định sử dụng máy ảo Oracle VM VirtualBox với Windows 10 (bạn có thể chụp ảnh thử nghiệm cho trình duyệt Edge do đó). SQL Server 2016 đã được cài đặt trên máy ảo và cơ sở dữ liệu ứng dụng đã được khôi phục từ bản sao lưu (hướng dẫn).

Cấu hình quyền truy cập vào SQL Server trên máy ảo

Tiếp theo cần thực hiện một số bước để có thể truy cập SQL Server từ bên ngoài:

  1. Đối với tường lửa, thêm quy tắc bỏ qua các yêu cầu cổng 1433.
  2. Điều mong muốn là quyền truy cập vào máy chủ không thông qua xác thực windows mà thông qua SQL bằng thông tin đăng nhập và mật khẩu (việc thiết lập quyền truy cập sẽ dễ dàng hơn). Tuy nhiên, trong trường hợp này, bạn cần nhớ bật Xác thực SQL trong thuộc tính Máy chủ SQL.
  3. Trong cài đặt người dùng trên SQL Server trên tab Người sử dụng bản đồ chỉ định vai trò người dùng cho cơ sở dữ liệu được khôi phục db_securityadmin.

Truyền dữ liệu

Trên thực tế, việc truyền dữ liệu bao gồm hai giai đoạn:

  1. Truyền lược đồ dữ liệu (bảng, dạng xem, thủ tục được lưu trữ, v.v.)
  2. Tự truyền dữ liệu

Chuyển lược đồ dữ liệu

Chúng tôi thực hiện các hoạt động sau:

  1. lựa chọn Nhiệm vụ -> Tạo Tập lệnh cho một cơ sở di động.
  2. Chọn các đối tượng bạn cần chuyển hoặc để lại giá trị mặc định (trong trường hợp này, các tập lệnh sẽ được tạo cho tất cả các đối tượng cơ sở dữ liệu).
  3. Chỉ định cài đặt để lưu tập lệnh. Thuận tiện nhất là lưu tập lệnh vào một tệp Unicode duy nhất. Sau đó, trong trường hợp thất bại, bạn không cần phải lặp lại tất cả các bước một lần nữa.

Sau khi tập lệnh được lưu, tập lệnh có thể được chạy trên SQL Server gốc (phiên bản cũ) để tạo cơ sở cần thiết.

Lưu ý: Sau khi thực thi tập lệnh, bạn cần kiểm tra sự tương ứng giữa cài đặt của cơ sở dữ liệu từ bản sao lưu và cơ sở dữ liệu do tập lệnh tạo. Trong trường hợp của tôi, không có cài đặt THU THẬP trong tập lệnh, dẫn đến lỗi khi truyền dữ liệu và nhảy với tambourine để tạo lại cơ sở dữ liệu bằng tập lệnh bổ sung.

Truyền dữ liệu

Trước khi truyền dữ liệu, bạn phải tắt tính năng kiểm tra tất cả các hạn chế trên cơ sở dữ liệu:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Việc truyền dữ liệu được thực hiện bằng trình hướng dẫn nhập dữ liệu Nhiệm vụ -> Nhập dữ liệu trên SQL Server, nơi đặt cơ sở dữ liệu được tạo bởi tập lệnh:

  1. Chỉ định cài đặt kết nối với nguồn (SQL Server 2016 trên máy ảo). Tôi đã sử dụng nguồn dữ liệu Máy khách bản địa SQL Server và xác thực SQL đã nói ở trên.
  2. Chỉ định cài đặt kết nối cho đích (SQL Server 2014 trên máy chủ).
  3. Tiếp theo, thiết lập bản đồ. Tất cả phải được chọn không chỉ đọc các đối tượng (ví dụ: các khung nhìn không cần phải chọn). Là tùy chọn bổ sung, hãy chọn "Cho phép chèn vào cột nhận dạng"nếu như vậy được sử dụng.
    Lưu ý: nếu, khi cố gắng chọn một số bảng và đặt thuộc tính của chúng "Cho phép chèn vào cột nhận dạng" thuộc tính đã được đặt cho ít nhất một trong các bảng đã chọn, hộp thoại sẽ cho biết thuộc tính đã được đặt cho tất cả các bảng đã chọn. Thực tế này có thể gây nhầm lẫn và dẫn đến lỗi di chuyển.
  4. Chúng tôi bắt đầu chuyển giao.
  5. Khôi phục kiểm tra ràng buộc:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Nếu có bất kỳ lỗi nào xảy ra, chúng tôi sẽ kiểm tra cài đặt, xóa cơ sở dữ liệu được tạo có lỗi, tạo lại từ tập lệnh, sửa chữa và lặp lại quá trình truyền dữ liệu.

Kết luận

Nhiệm vụ này khá hiếm và chỉ xảy ra vì những hạn chế trên. Giải pháp phổ biến nhất là nâng cấp SQL Server hoặc kết nối với máy chủ từ xa nếu kiến ​​trúc ứng dụng cho phép. Tuy nhiên, không ai có thể tránh khỏi mã kế thừa và bàn tay gian dối của sự phát triển kém chất lượng. Tôi hy vọng rằng bạn sẽ không cần hướng dẫn này, nhưng nếu bạn vẫn cần nó, nó sẽ giúp tiết kiệm rất nhiều thời gian và thần kinh. Cám ơn vì sự quan tâm của bạn!

Danh sách các nguồn được sử dụng

Nguồn: www.habr.com