Khôi phục cơ sở dữ liệu từ tệp sao lưu của phiên bản / phiên bản khác nhau


11

Tôi đọc rằng có thể khôi phục cơ sở dữ liệu trong SQL Server miễn là bạn khôi phục từ phiên bản cũ sang phiên bản mới hơn, vì lý do tương thích ngược.

Có ai biết nếu bạn có thể khôi phục cơ sở dữ liệu từ tệp * .bak cho các phiên bản SQL Server khác nhau không? Chúng tôi đang chuyển một cơ sở dữ liệu rất lớn thông qua FTP sẽ mất vài ngày, vì vậy chúng tôi chỉ muốn làm điều này một lần. Nếu không có ai trả lời vào thời điểm chúng tôi chuyển cơ sở dữ liệu qua FTP, rõ ràng chúng tôi sẽ thử điều này và xem nó có hoạt động không bằng cách kiểm tra và trả lời câu hỏi của chính chúng tôi.

Dưới đây là một truy vấn để có được chi tiết phiên bản của SQL Server. Đây productversionlà trong định dạng {major revision}.{minor revision}.{release revision}.{build number}. Trong trường hợp của tôi, {release revision}giá trị của 5500nguồn và 5512mục tiêu. Vì vậy, có vẻ ổn. Tuy nhiên, editionlà khác nhau.

Truy vấn:

SELECT 
  SERVERPROPERTY('productversion'), 
  SERVERPROPERTY('productlevel'), 
  SERVERPROPERTY('edition')

Cơ sở dữ liệu nguồn:

10.0.5500.0
SP3
Developer Edition (64-bit)

Cơ sở dữ liệu mục tiêu:

10.0.5512.0
SP3
Enterprise Edition (64-bit)

Làm thế nào về việc khôi phục tệp sao lưu từ SQL Server 2012 Business Intelligence Edition sang phiên bản dành cho nhà phát triển?
sdg320

Câu trả lời:


15

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 đâytạ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ụ:

  1. 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.
  2. 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.
  3. Đ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:

  1. 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.
  2. 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ỡ ...


3

Nhà phát triển và Doanh nghiệp là cùng một phần mềm, chỉ với các thỏa thuận cấp phép khác nhau.

Bạn nên khôi phục cơ sở dữ liệu này tại điểm đến của bạ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.