Khả năng tương thích ngược SQL Server 2012 để sao lưu với 2008


14

Tôi có một số khách hàng với SQL Server 2008 và đó cũng là những gì tôi có ở đây trên máy chủ của mình. Tôi sử dụng các tập tin sao lưu để gửi cơ sở dữ liệu qua lại giữa các khách hàng và tại văn phòng của tôi.

Tôi đã đọc rằng khi bạn tạo bản sao lưu từ SQL Server 2012, không có cách nào để khôi phục nó vào phiên bản 2008. Tôi giả định rằng mức độ tương thích sẽ giải quyết vấn đề này, nhưng nó không. Vì vậy, tôi không biết làm thế nào để nâng cấp. Ngoài việc nâng cấp tất cả các khách hàng của tôi cùng một lúc, điều đó là không thể, tôi có thể nghĩ không có cách nào sạch sẽ để làm điều này.

Tôi có nhu cầu gửi cơ sở dữ liệu đến khách hàng cũng như nhận cơ sở dữ liệu từ khách hàng. Đây là phiên bản nâng cấp đầu tiên của tôi trên SQL Server, vì vậy tôi mới gặp vấn đề này. Bất kỳ ý tưởng về cách tiến hành?


4
Bạn có thể cài đặt một phiên bản SQL Server 2008 và một phiên bản SQL Server 2012 tại máy chủ của mình cùng lúc với các tên phiên bản khác nhau. Có lẽ điều đó sẽ giải quyết vấn đề của bạn với khách hàng trên các phiên bản khác nhau?
Mikael Eriksson

Câu hỏi tương tự trên SO: stackoverflow.com/q/1744808/95710
DForck42

Câu trả lời:


16

Có hai điều liên quan ở đây: số phiên bản của tệp và mức độ tương thích. Khi bạn đính kèm cơ sở dữ liệu vào phiên bản chính mới hơn (như từ 2008 đến 2008R2 hoặc 2008R2 đến 2012), phiên bản cơ sở dữ liệu sẽ được thay đổi vĩnh viễn và bạn không thể đính kèm lại cơ sở dữ liệu đó với phiên bản cũ hơn.

Mức độ tương thích là để phân tích cú pháp T-SQL cũ không dùng nữa để sử dụng trong các phiên bản SQL Server cũ hơn. Nó không thay đổi cách dữ liệu được lưu trữ trên đĩa.

Để cung cấp cơ sở dữ liệu cho ai đó trên phiên bản SQL Server cũ hơn, bạn sẽ cần xuất dữ liệu và nhập dữ liệu vào cơ sở dữ liệu khác. Các công cụ như So sánh dữ liệu của Red Gate rất hữu ích cho việc này.


Vâng, tôi đã có vấn đề chính xác tương tự trước đây. Đã kết thúc kịch bản ra toàn bộ cơ sở dữ liệu và sau đó kịch bản ra tất cả dữ liệu. So sánh dữ liệu và so sánh SQL của Red Gate đã đến giải cứu ngày hôm đó.
DForck42

@ DForck42: Trong trường hợp của tôi, DB quá lớn để tạo ra dữ liệu, vì vậy tôi đã kết thúc kịch bản ra lược đồ, sau đó di chuyển dữ liệu với bcp.
ivan_pozdeev

@ivan_pozdeev có phải bạn đang nói rằng bạn đã xuất bằng SQL Server 2012 BCP và được nhập bằng SQL Server 2008R2 BCP không? Hãy tuyệt vời để biết các định dạng tập tin là tương thích, cảm ơn.
Chris

2
@Chris msdn.microsoft.com/en-us/l Library / ms162802.aspx "Trong SQL Server 2014, tiện ích bcp hỗ trợ các tệp dữ liệu gốc tương thích với SQL Server 2000, SQL Server 2005, SQL Server 2008, SQL Server 2008 R2 và Máy chủ SQL 2012. "
ivan_pozdeev

Cảm ơn @ivan_posedeev, đây là một tiết lộ. Tôi đã ghi lại các bước của mình dưới đây trong trường hợp nó giúp được ai khác.
Chris

6

Cài đặt mức độ tương thích được SQL Server sử dụng để xác định cách xử lý một số tính năng mới nhất định. Bằng cách này, DB có thể được chuyển sang phiên bản SQL mới hơn mà không gặp vấn đề với ứng dụng. Mức độ tương thích có thể được thay đổi qua lại.

Thật không may, các tập tin sao lưu không tương thích ngược. Một phương pháp sẽ là sử dụng nhập / xuất để di chuyển dữ liệu của bạn ra khỏi DB hiện tại của bạn sang phiên bản cũ hơn.


3

Để di chuyển SQL, hãy sử dụng Trình hướng dẫn di chuyển cơ sở dữ liệu SQL miễn phí và nguồn mở.

Tôi đã có một cơ sở dữ liệu 5GB với vài ~ 10 triệu bản ghi và đã thử tuyến đường thông qua Generate Script và hơn là chạy nó với sqlcmd.exe. Trước hết, tập lệnh được tạo không phải lúc nào cũng hoạt động chính xác. Thứ hai, sqlcmd.exe cũng có thể bị lỗi trên các tệp lớn, phàn nàn về bộ nhớ khả dụng. osql.exe hoạt động, nhưng chỉ mất nhiều thời gian (và có cùng các đối số dòng lệnh).

Sau đó, tôi đã bắt gặp một công cụ tuyệt vời để di chuyển SQL Server sang cơ sở dữ liệu SQL Azure. Điều này cũng hoạt động cho SQL Server sang SQL Server, ví dụ nếu bạn muốn di chuyển cơ sở dữ liệu SQL 2012 sang 2008 R2. Nó sử dụng bcp.exe, sử dụng bản sao số lượng lớn. Có sẵn phiên bản GUI và dòng lệnh (Batch) và đó là nguồn mở. Xem http://sqlazuremw.codeplex.com/ . Trong trường hợp của tôi, hoạt động mất 16 phút.

Trong màn hình nâng cao, bạn có thể chọn mục tiêu của mình là SQL Server chứ không phải SQL Azure.


2

Tôi đã tìm thấy BCP hiệu quả hơn một số công cụ để nhận dữ liệu vào phiên bản SQL Server trước đó và để lấy dữ liệu từ RDS. (Cảm ơn @ivan_posedeev.)

Trước tiên tôi tạo lược đồ bằng cách nhấp chuột phải vào cơ sở dữ liệu trong SQL Server Management Studio, Nhiệm vụ, Tạo tập lệnh. Đánh dấu vào tất cả các đối tượng, trong các đối tượng nâng cao đảm bảo mọi thứ bạn cần sẽ được viết theo kịch bản (số liệu thống kê, chỉ mục, v.v.), bỏ chọn "Cơ sở dữ liệu USE" nếu cơ sở dữ liệu đích của bạn có tên khác, đặt khả năng tương thích với phiên bản cơ sở dữ liệu đích của bạn và tạo tập tin tạo lược đồ của bạn. Tạo một cơ sở dữ liệu về điểm đến của bạn và chạy tập tin này vào nó (sử dụng osql, sqlcmdhoặc GUI).

Để di chuyển dữ liệu, hãy chạy truy vấn sau hai lần trên cơ sở dữ liệu nguồn , đầu tiên là nhận xét cột thứ hai để tạo tệp bó để trích xuất dữ liệu, sau đó nhận xét cột đầu tiên để tạo tệp bó nhập để chạy trên đích của bạn. (Bạn cần thêm máy chủ nguồn và đích, tên đối tượng, thư mục tệp đầu ra và đầu vào, tên người dùng và mật khẩu. Để sử dụng bảo mật tích hợp thay thế -U-Pcác tùy chọn chỉ bằng -T.)

Điều này hỗ trợ Unicode, nếu bạn không cần điều đó, hãy thay đổi công -Ntắc trong cả hai câu lệnh thành -n.

SELECT 
   'bcp SOURCEDATABASE.' + s.Name + '.' + t.NAME  + ' out d:\dbdump\' + s.Name + '.' + t.NAME  + '.dat -N -S SOURCESERVER\INSTANCE -UUSER -PPASSWORD'
--    'bcp DESTINATIONDATASE.' + s.Name + '.' + t.NAME  + ' in d:\dbdump\' + s.Name + '.' + t.NAME  + '.dat -N -S DESTINATIONSERVER\INSTANCE -UUSER -PPASSWORD -E -h TABLOCK -b 1000 -e d:\dbdump\' + s.Name + '.' + t.NAME  + '.ERRORS.dat'
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
LEFT OUTER JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
ORDER BY 
    s.Name, t.NAME

Sau khi chạy các tệp kiểm tra có tên là lược đồ.tablename.ERRORS.dat - sẽ bao gồm bất kỳ hàng nào bị lỗi, trống nếu không có.

Tham khảo MSDN cho BCP ở đây , thân thiện hơn với các tùy chọn BCP ở đây .

Tôi đã tìm thấy điều này vượt trội hơn nhiều so với việc tạo tập lệnh và bất kỳ công cụ nào tôi đã thử. Nó cũng chạy trên cơ sở dữ liệu RDS (không cho phép sao lưu). Các tệp dữ liệu được tạo có kích thước 30% của các tập lệnh SQL, việc chạy chúng mất một phần thời gian và đáng tin cậy hơn nhiều. (Các kịch bản được tạo ra bởi SQL Server cho dữ liệu kịch bản luôn vấp lên, đôi khi dự đoán đôi khi không, SQL được tạo ra là không tương thích với 2008R2 (ví dụ, sử dụng nvarchar(0), thường đã không hoàn thành không có lý do rõ rệt vv BCP cũng tái bản bất kỳ hành vi vi phạm chế , chẳng hạn như tính toàn vẹn tham chiếu.).

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.