Từ Nhà phát triển đến Doanh nghiệp sẽ ổn, chỉ cần đảm bảo rằng nếu bạn đang sử dụng cấp phép bộ xử lý, bạn có giấy phép trên máy chủ mục tiêu để bao gồm tất cả các CPU. Và việc ẩn chúng khỏi SQL là không đủ, nếu chúng được kết nối vật lý với máy, bạn phải chịu trách nhiệm với chúng.
Ngoài ra khi bạn chuyển từ bản dựng thấp hơn sang bản dựng cao hơn, phiên bản cơ sở dữ liệu của bạn sẽ tăng lên. Có một vài tình huống có thể xảy ra sự cố - ví dụ: nếu bạn đang sử dụng 15.000 hỗ trợ phân vùng trên một bản dựng cụ thể của năm 2008 thì nó sẽ không hoạt động khi bạn nâng cấp lên bản dựng cụ thể của 2008 R2. Bạn cũng có thể dựa vào tối ưu hóa (và có cách giải quyết) thực sự là lỗi trong bản dựng cũ nhưng được sửa trong bản dựng mới và điều này có thể dẫn đến hiệu suất kém hơn. Nó cũng rất quan trọng để xem xét bất kỳ cờ theo dõi nào được sử dụng tại nguồn và xác định xem chúng có nên được bật ở đích hay không. Đừng bận tâm công việc, đăng nhập, vv
Tất nhiên bạn không thể đi ngược. Tôi chưa bao giờ thử hạ cấp nhỏ như 10.0.5512 -> 10.0.5500 nhưng chắc chắn không thể xuống gói dịch vụ hoặc phiên bản. Vì vậy, nếu bạn có cơ sở dữ liệu năm 2012 trên phiên bản Phiên bản dành cho nhà phát triển và bạn muốn đưa nó vào phiên bản 2008 trong sản xuất, bạn sẽ cắt giảm công việc cho mình (xem tại đây và tại đây ) - đặc biệt nếu bạn đã sử dụng các tính năng của năm 2012 .
Nhưng để giải quyết các trường hợp khác có thể khiến mọi người gặp phải câu hỏi này (ví dụ: ai đó muốn đi từ Nhà phát triển -> Tiêu chuẩn hoặc Doanh nghiệp -> Express hoặc những gì có bạn) ...
Có các phiên bản khác -> nâng cấp phiên bản sẽ không hoạt động tốt, ví dụ như từ Nhà phát triển -> Express nếu bạn đã sử dụng bất kỳ tính năng nào không được hỗ trợ trong Express (và tương tự với bất kỳ phiên bản nào ngoài Enterprise thực sự). Một số ví dụ về các tính năng bạn sẽ không thể sử dụng trên các phiên bản cấp thấp (trong trường hợp đó, khôi phục sẽ chết tại thời điểm nó cố gắng đưa cơ sở dữ liệu trực tuyến):
- Phân vùng
- Thay đổi dữ liệu chụp
- Nén dữ liệu
- Mã hóa dữ liệu minh bạch
Tôi không biết có cách nào để nói điều này trực tiếp từ tệp .BAK không (tôi chắc chắn có một số phép thuật có thể được trích xuất từ các tiêu đề trang ở đâu đó hoặc nếu bạn có một ngày cuối tuần để ghi với trình soạn thảo hex) , nhưng trong khi cơ sở dữ liệu vẫn còn nguyên vẹn trong trường hợp nguồn, bạn luôn có thể thực hiện các thao tác sau để xem bạn có đang sử dụng bất kỳ tính năng nào khả dụng do SKU bạn đang sử dụng không:
SELECT feature_name FROM sys.dm_db_persisted_sku_features;
Tôi không chắc chắn nếu SQL Server Audit có nằm trong danh sách đó hay không - tính độc quyền phiên bản của tính năng đó đã thay đổi, vì vậy nó có thể phụ thuộc vào những gì bạn đang làm với nó. Có những thứ khác mà bạn có thể đang sử dụng nhưng sẽ không hiển thị trong DMV (một số vì chúng nằm trong mã của bạn, mà DMV không phân tích được, và một số vì cơ sở dữ liệu của bạn dựa vào những thứ bên ngoài như SQL Server Agent , Nhà môi giới dịch vụ, v.v.):
- phản chiếu
- một số hình thức nhân rộng
- đăng nhập vận chuyển
- ảnh chụp nhanh cơ sở dữ liệu
- lập chỉ mục trực tuyến
- khung nhìn phân tán có thể cập nhật
- nén sao lưu
- quản lý dựa trên chính sách
- hướng dẫn kế hoạch
- thư cơ sở dữ liệu
- kế hoạch bảo trì
- tìm kiếm toàn văn
Cũng có trường hợp bạn sẽ không thể chuyển từ Nhà phát triển sang Express vì giới hạn kích thước tệp (Cơ sở dữ liệu Express được giới hạn ở 10GB trong tổng kích thước tệp dữ liệu).
Tất nhiên, có thể có những vấn đề khác mà bạn sẽ không được cảnh báo - chúng sẽ không ngăn chặn việc di chuyển, nhưng chúng có thể dẫn đến hiệu suất rất khác nhau trên mục tiêu. Ví dụ:
- Các giới hạn bộ nhớ / CPU khác nhau trên phiên bản đích (hoặc thậm chí là hệ điều hành cơ bản trên mục tiêu). Điều này rất nhiều người đã đi từ 2008 R2 Enterprise đến 2012 Enterprise (CAL), trong đó dịch vụ được giới hạn một cách giả tạo trong 20 lõi đầu tiên). Điều này có thể dẫn đến sự khác biệt hiệu suất đơn giản (ví dụ, không đủ bộ nhớ để đáp ứng truy vấn, hoặc hiệu suất truy vấn song song chậm hơn nhiều); những cái tinh tế hơn bao gồm các lựa chọn kế hoạch được thực hiện do phần cứng cơ bản khác nhau.
- Sự phụ thuộc vào các tính năng như kết hợp chế độ xem được lập chỉ mục trên nguồn sẽ không được tự động tôn trọng trên mục tiêu mà không thay đổi mã nguồn để sử dụng
NOEXPAND
. Và bạn thậm chí có thể không nhận thức được rằng khả năng này là lý do tại sao các truy vấn của bạn đột nhiên chậm lại.
- Điều tương tự cũng xảy ra đối với các hoạt động chỉ mục song song và có thể là một loạt các tối ưu hóa khác không xuất hiện trong thời điểm này (rất may tôi làm việc hầu như chỉ trong không gian Doanh nghiệp, vì vậy tôi không phải lo lắng về các hạn chế của phiên bản thấp hơn trong hầu hết các trường hợp ).
CẬP NHẬT dựa trên bản sao này :
Có thể có trường hợp bạn cố gắng khôi phục cơ sở dữ liệu từ một phiên bản nhất định sang phiên bản nhỏ hơn (ngay cả trên cùng một phiên bản) và bạn gặp phải các lỗi ít hữu ích hơn :
RESTORE không thành công cho máy chủ 'máy chủ \ dụ'.
RESTORE không thể khởi động cơ sở dữ liệu 'databasename'.
Điều này không trực quan lắm. Tuy nhiên, nếu bạn nhìn sâu hơn vào nhật ký sự kiện của SQL Server, bạn sẽ thấy nhiều lỗi hữu ích hơn (chỉ một ví dụ):
Không thể khởi động 'cơ sở dữ liệu' cơ sở dữ liệu vì một số chức năng cơ sở dữ liệu không có sẵn trong phiên bản hiện tại của SQL Server.
Cơ sở dữ liệu 'databasename' không thể được khởi động trong phiên bản SQL Server này vì nó chứa hàm phân vùng '_dta_pf__9987'. Chỉ phiên bản Enterprise của SQL Server hỗ trợ các chức năng phân vùng.
Bây giờ, điều đó không hoàn toàn đúng - bạn cũng có thể khôi phục lại Phiên bản Đánh giá hoặc Phiên bản dành cho nhà phát triển, nhưng điều đó nằm ngoài quan điểm. Để khôi phục cơ sở dữ liệu này, về cơ bản, bạn có hai tùy chọn:
- Khôi phục phiên bản SQL Server thích hợp - có nghĩa là định vị hoặc cài đặt một phiên bản mới.
- Khôi phục bản sao lưu trên máy chủ nguồn dưới dạng cơ sở dữ liệu mới với một tên khác, loại bỏ bất kỳ và tất cả các tính năng Enterprise, sau đó sao lưu lại cơ sở dữ liệu và khôi phục lại trên phiên bản nhỏ hơn. (Trong trường hợp cụ thể này, tôi đã để lại tên của hàm phân vùng trong thông báo lỗi, vì dù sao đây cũng có vẻ như là một thứ không thể loại bỏ - nó được tạo bởi Trình cố vấn điều chỉnh động cơ cơ sở dữ liệu và có thể đã được thực hiện bởi một người không hoàn toàn biết những gì họ đã làm. Điều này không phải luôn luôn như vậy.)
Một biến thể trên (2) sẽ chỉ là loại bỏ phân vùng và các tính năng khác trên cơ sở dữ liệu nguồn và lấy một bản sao lưu khác. Nhưng nếu nó không bị vỡ ...