Hạ cấp từ SQL Server 2008 xuống 2005


32

Các tệp cơ sở dữ liệu được xây dựng bằng SQL 2008 không tương thích với năm 2005. Có cách nào giải quyết không?


Đừng quên xuất thông tin đăng nhập máy chủ.
StanleyJohns

Đây có phải là vì bạn đang phát triển vào năm 2008 nhưng máy chủ sản xuất của bạn vẫn là năm 2005? Bất kỳ giải pháp nào bạn cung cấp sẽ chỉ trì hoãn điều không thể tránh khỏi đồng thời làm cho cuộc sống của bạn trở nên khốn khổ, vì bạn có thể sẽ phải thực hiện những việc hạ cấp này một cách thường xuyên.
datagod

Câu trả lời:


16

Không có công cụ bên thứ 3 cần thiết. SQL Server 2008 Management Studio đã cho chúng tôi một công cụ rất mạnh để chuyển đổi cơ sở dữ liệu vì họ đã thêm tùy chọn "Dữ liệu tập lệnh" vào trình hướng dẫn "Cơ sở dữ liệu tập lệnh".

Chỉ cần nhấp chuột phải vào DB trong SQL2008 SSMS và đi đến Nhiệm vụ, sau đó "Tạo tập lệnh"

Đi qua trình hướng dẫn, đảm bảo chọn "Đúng" cho "Dữ liệu tập lệnh" trong tùy chọn bảng / chế độ xem. Chọn tất cả các đối tượng, sau đó chạy tập lệnh mà nó tạo trên máy chủ 2005. (Xin lưu ý rằng tập lệnh được tạo có thể rất lớn nếu cơ sở dữ liệu ban đầu rất lớn!)

Lưu ý rằng bạn thậm chí có thể chạy trình hướng dẫn dựa trên máy chủ SQL2005 để chuyển đổi cơ sở dữ liệu SQL2005 sang SQL2000 (tất nhiên bạn sẽ cần các công cụ 2008 được cài đặt trên máy trạm của mình).


4
Không xúc phạm, nhưng đây không thể là một giải pháp nếu cơ sở dữ liệu lớn. Hãy thử kỹ thuật đó trên bất kỳ bảng nào có vài triệu hàng (và nghĩ varchar (max) là kiểu dữ liệu của một cột) và nếu Management Studio sẽ có thể mở và phân tích tệp này, bạn sẽ rất vui, nhưng tôi chắc chắn nó sẽ không mở, nó sẽ sụp đổ. Xin lỗi, nhưng đó không phải là giải pháp cho vấn đề này, ngoại trừ nếu db thực sự nhỏ.
Mary

3
Chắc chắn, nếu db quá lớn, kịch bản chỉ ra cấu trúc cơ sở dữ liệu, sau đó sử dụng phương thức yêu thích của bạn (SSIS, BCP, Trình hướng dẫn nhập khẩu) để đẩy dữ liệu.
BradC

Trong SSMS 11.0 dường như không có tùy chọn cho dữ liệu tập lệnh cùng với cấu trúc. i.imgur.com/SGkG8oZ.png
jcollum

À đúng rồi, bây giờ trong "Các loại dữ liệu thành tập lệnh" ngay phía trên Bảng / Tùy chọn xem
jcollum

16

Bạn có thể BCP dữ liệu từ một phiên bản SQL Server sang một phiên bản khác. Đó sẽ là cách nhanh nhất để sao chép dữ liệu từ phiên bản này sang phiên bản khác. Tùy thuộc vào khối lượng dữ liệu, có thể mất nhiều thời gian.


2
Tùy thuộc vào khối lượng dữ liệu, hầu như sẽ luôn mất nhiều thời gian
jcolebrand

Đúng, nó chắc chắn sẽ. Di chuyển một cơ sở dữ liệu lớn sang phiên bản cũ hơn của SQL Server không phải là một nhiệm vụ dễ dàng.
mrdenny

2
Ưu điểm của BCP là nó sẽ nhanh hơn việc sử dụng dữ liệu tập lệnh. Vâng, nó chậm, nhưng nó nhanh hơn nhiều lựa chọn thay thế.
Jeremiah Peschka

15

Không có cách nào trực tiếp, mà tôi biết, để hạ cấp DB từ định dạng của năm 2008 xuống năm 2005 không may.

Cách tôi đã làm điều này trong quá khứ (thực tế với các phiên bản cũ hơn của máy chủ SQL, nhưng quá trình sẽ giống nhau) là:

  1. Khôi phục DB trên phiên bản SQL2008 nếu chưa được thực hiện
  2. Xây dựng một DB trống với các cấu trúc chính xác (bảng, chỉ mục, ràng buộc, khung nhìn, procs, bộ kích hoạt, ...) trên một phiên bản SQL2005. Hy vọng rằng bạn có thể thực hiện việc này từ quy trình xây dựng và / hoặc mã nguồn hiện có của mình, nhưng nếu không, bạn có thể sử dụng SQL Server Manager để tạo tập lệnh cho mọi thứ trong DB 2005 và chạy kết quả trên một ví dụ trống trong phiên bản 2008.
  3. Đảm bảo hai trường hợp có thể nhìn thấy nhau (nghĩa là không có tường lửa chặn kết nối nếu các phiên bản đó nằm trên các máy khác nhau) và liên kết chúng bằng sp_addlinkedserver .
  4. Sao chép tất cả dữ liệu từ DB này sang DB khác. Nếu không có ràng buộc khóa ngoại và các vấn đề tương tự gây lo lắng về bạn, bạn chỉ cần liên kết các DB với nhau và trỏ qua danh sách các bảng (chọn chúng từ sys.objects) và chạy
    INSERT destinationserver.destinationdb.schema.table SELECT * FROM sourcedb.schema.table
    (hoặc INSERT schema.table SELECT * FROM sourceserver.sourcedb.schema.tablenếu bạn đã liên kết các trường hợp đó )
    cho mỗi bảng. Nếu bạn có các ràng buộc và kích hoạt tính nhất quán giữa các bảng, tất nhiên bạn sẽ cần phải khéo léo hơn một chút về thứ tự của các hoạt động này, đặc biệt là nếu bạn có các ràng buộc theo chu kỳ như một bảng có ràng buộc dựa trên chính nó (một thứ bậc giữ dữ liệu, như một ví dụ có thể).

Có thể hiệu quả hơn khi chỉ sao chép dữ liệu trước và thêm tất cả các cấu trúc khác (chỉ mục, procs, kích hoạt, ...) sau bước 3. Điều này tránh các vấn đề đặt hàng chèn gây ra bởi các ràng buộc và kích hoạt và xây dựng các chỉ mục tại về mặt lý thuyết nên nhanh hơn việc xây dựng chúng vì tất cả dữ liệu được thêm vào - mặc dù nếu bạn có bất kỳ chỉ mục cụm nào trên các bảng của bạn thì hãy tạo các dữ liệu này trước khi thêm dữ liệu vì chúng sẽ không nhanh hơn để tạo sau khi thực tế.

Tất nhiên, tất cả điều này giả định rằng không có đối tượng nào của bạn sử dụng các tính năng cụ thể của SQL 2008 - nếu có, bạn hy vọng sẽ tìm ra và sửa những thứ đó khi có lỗi khi xây dựng lại lược đồ. Nếu bất kỳ mã nào của bạn phụ thuộc vào hành vi không được xác định chính thức có sự khác nhau giữa các phiên bản SQL Server, bạn có thể có một số lỗi tinh vi và khó nắm bắt hơn để tìm ra và giải quyết sau.


1
-1 vì điều này thực sự không hiệu quả (chọn * vào từ) so với lượt thích của BCP.
jcolebrand

@jcolebrand đủ công bằng về hiệu quả. Mặc dù kỹ thuật này là một công việc mà tôi đã làm việc.
David Spillett

đó là một hệ thống công bằng, tôi chỉ nghĩ rằng tôi sẽ đưa nó vào tài khoản của những độc giả tương lai ở đây. Bạn đã có các upvote hiện tại cho nó không phải là một vấn đề. ;)
jcolebrand


1

Trước tiên, bạn phải kịch bản cơ sở dữ liệu và đảm bảo trên phiên bản bạn chỉ định loại bạn muốn xuống lớp. Và để sao chép dữ liệu từ phiên bản cao hơn sang so sánh Dữ liệu SQL phiên bản thấp hơn sẽ giúp bạn thực hiện thủ thuật.

Chúc may mắn!

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.