Pulihkan basis data dari file cadangan versi / edisi yang berbeda

11

Saya membaca bahwa mungkin untuk memulihkan database di SQL Server selama Anda memulihkan dari versi yang lebih lama ke versi yang lebih baru, untuk alasan kompatibilitas mundur.

Adakah yang tahu jika Anda dapat mengembalikan database dari file * .bak untuk edisi SQL Server yang berbeda? Kami sedang memindahkan basis data yang sangat besar melalui FTP yang akan memakan waktu beberapa hari, jadi kami lebih suka melakukannya sekali saja. Jika tidak ada yang merespons pada saat kami mentransfer database melalui FTP, kami jelas akan mencoba ini dan melihat apakah itu bekerja dengan pengujian, dan menjawab pertanyaan kami sendiri.

Di bawah ini adalah kueri untuk mendapatkan detail versi SQL Server. Ada productversiondalam format {major revision}.{minor revision}.{release revision}.{build number}. Dalam kasus saya, {release revision}nilai 5500untuk sumber dan 5512target. Jadi itu terlihat oke. Namun editionberbeda.

Pertanyaan:

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

Sumber basis data:

10.0.5500.0
SP3
Developer Edition (64-bit)

Database target:

10.0.5512.0
SP3
Enterprise Edition (64-bit)
MacGyver
sumber
Bagaimana memulihkan file cadangan dari SQL Server 2012 Business Intelligence Edition ke instance pengembang?
sdg320

Jawaban:

15

Dari Developer ke Enterprise akan baik-baik saja, pastikan saja jika Anda menggunakan lisensi prosesor, Anda memiliki lisensi di server target untuk mencakup semua CPU. Dan itu tidak cukup hanya menyembunyikan mereka dari SQL, jika mereka terhubung secara fisik ke mesin, Anda bertanggung jawab untuk mereka.

Juga ketika Anda beralih dari build yang lebih rendah ke build yang lebih tinggi, versi database Anda akan meningkat. Ada beberapa skenario di mana ini bisa bermasalah - misalnya jika Anda menggunakan 15.000 dukungan partisi pada build spesifik 2008, itu tidak akan berfungsi ketika Anda memutakhirkan ke build spesifik 2008 R2. Anda mungkin juga mengandalkan pengoptimalan (dan memiliki solusi di tempat) yang sebenarnya bug dalam versi lama tetapi diperbaiki di versi baru, dan ini dapat menyebabkan kinerja yang lebih buruk. Penting juga untuk meninjau setiap tanda jejak yang digunakan di sumber dan menentukan apakah tanda tersebut juga harus diaktifkan di tujuan. Jangankan pekerjaan, login, dll.

Tentu saja Anda tidak bisa mundur. Saya belum pernah mencoba downgrade kecil seperti 10.0.5512 -> 10.0.5500 tetapi jelas tidak mungkin turun dalam paket layanan atau versi. Jadi jika Anda memiliki database 2012 pada instance Edisi Pengembang Anda dan Anda ingin menjadikannya pada instance 2008 Anda dalam produksi, Anda akan memiliki pekerjaan yang cocok untuk Anda (lihat di sini dan di sini ) - terutama jika Anda telah menggunakan fitur 2012 .


Tetapi untuk membahas kasus-kasus lain yang mungkin membuat orang-orang di pertanyaan ini (misalnya seseorang ingin pergi dari Developer -> Standard atau Enterprise -> Express atau apa pun)) ...

Ada edisi lain -> peningkatan edisi yang tidak akan berjalan dengan baik, misalnya dari Pengembang -> Ekspres jika Anda telah menggunakan fitur apa pun yang tidak didukung dalam Express (dan hal yang sama berlaku untuk edisi apa pun selain Enterprise). Beberapa contoh fitur yang tidak dapat Anda gunakan pada edisi tingkat bawah (dalam hal ini pemulihan akan mati pada saat ia mencoba untuk membawa database online):

  • Partisi
  • Ubah Pengambilan Data
  • Kompresi data
  • Enkripsi Data Transparan

Saya tidak tahu apakah ada cara untuk mengatakan ini langsung dari file .BAK (Saya yakin ada beberapa keajaiban yang dapat diekstrak dari header halaman di suatu tempat, atau jika Anda punya akhir pekan untuk membakar dengan hex editor) , tetapi sementara database masih utuh pada sumber contoh, Anda selalu dapat melakukan hal berikut untuk melihat apakah Anda menggunakan fitur apa pun yang tersedia karena SKU Anda berada di:

SELECT feature_name FROM sys.dm_db_persisted_sku_features;

Saya tidak yakin apakah SQL Server Audit harus ada dalam daftar itu - edisi eksklusif fitur itu telah berubah, jadi mungkin tergantung pada apa yang Anda lakukan dengannya. Ada hal-hal lain yang mungkin Anda gunakan tetapi tidak akan muncul di DMV (beberapa karena mereka ada dalam kode Anda, yang DMV tidak parse, dan beberapa karena database Anda mengandalkan hal-hal eksternal seperti SQL Server Agent , Pialang Layanan, dll.):

  • mirroring
  • bentuk replikasi tertentu
  • pengiriman log
  • snapshot basis data
  • pengindeksan online
  • tampilan terpartisi terdistribusi yang dapat diperbarui
  • kompresi cadangan
  • manajemen berbasis kebijakan
  • panduan rencana
  • surat basis data
  • rencana pemeliharaan
  • pencarian teks lengkap

Ada juga kasus di mana Anda tidak akan bisa pergi dari Developer ke Express karena keterbatasan ukuran file (database Express dibatasi hingga 10GB dalam ukuran file data total).

Tentu saja mungkin ada Gotcha lain yang Anda tidak akan diperingatkan - mereka tidak akan mencegah migrasi, tetapi mereka mungkin menyebabkan kinerja yang sangat berbeda pada target. Contoh:

  1. Batasan memori / CPU berbeda pada edisi target (atau bahkan sistem operasi yang mendasarinya pada target). Ini sedikit banyak orang yang beralih dari 2008 R2 Enterprise ke 2012 Enterprise (CAL), di mana layanan ini secara artifisial terbatas pada 20 core pertama). Hal ini dapat menyebabkan perbedaan kinerja langsung (tidak cukup memori untuk memenuhi kueri, misalnya, atau kinerja kueri paralel yang jauh lebih lambat); yang lebih halus termasuk pilihan rencana yang dibuat karena perangkat keras yang mendasarinya berbeda.
  2. Ketergantungan pada fitur seperti pencocokan tampilan indeks pada sumber tidak akan secara otomatis dihormati pada target tanpa mengubah kode sumber untuk digunakan NOEXPAND. Dan Anda bahkan mungkin tidak menyadari bahwa kemampuan ini adalah mengapa permintaan Anda tiba-tiba melambat.
  3. Hal yang sama berlaku untuk operasi indeks paralel dan mungkin banyak optimasi lain yang tidak muncul saat ini (untungnya saya bekerja hampir secara eksklusif di ruang Enterprise, jadi saya tidak perlu khawatir tentang keterbatasan edisi yang lebih rendah dalam banyak kasus ).

UPDATE berdasarkan duplikat ini :

Mungkin ada kasus di mana Anda mencoba mengembalikan database dari edisi tertentu ke edisi yang lebih rendah (bahkan pada versi yang sama), dan Anda mendapatkan kesalahan yang kurang bermanfaat :

KEMBALIKAN gagal untuk server 'server \ instance'.
RESTORE tidak dapat memulai database 'databasename'.

Ini tidak terlalu intuitif. Namun jika Anda melihat lebih dalam pada log peristiwa SQL Server, Anda akan melihat lebih banyak kesalahan bermanfaat (hanya satu contoh):

Basis data 'databasename' tidak dapat dimulai karena beberapa fungsionalitas basis data tidak tersedia dalam edisi SQL Server saat ini.
Basis data 'databasename' tidak dapat dimulai dalam edisi SQL Server ini karena berisi fungsi partisi '_dta_pf__9987'. Hanya edisi SQL Server Perusahaan yang mendukung fungsi partisi.

Sekarang, itu tidak sepenuhnya benar - Anda juga dapat mengembalikan ke Edisi Evaluasi atau Edisi Pengembang, tapi itu intinya. Untuk memulihkan database ini, Anda pada dasarnya memiliki dua opsi:

  1. Kembalikan ke edisi SQL Server yang sesuai - yang berarti mencari atau menginstal contoh baru.
  2. Kembalikan cadangan pada server sumber sebagai database baru dengan nama yang berbeda, hapus semua dan semua fitur Perusahaan, lalu buat cadangan database lagi, dan pulihkan pada edisi yang lebih rendah. (Dalam kasus khusus ini, saya meninggalkan nama fungsi partisi dalam pesan kesalahan, karena ini sepertinya merupakan hal yang dapat diabaikan - itu dibuat oleh Penasihat Penalaan Basis Data Mesin dan mungkin telah dilakukan oleh seseorang yang tidak cukup tahu apa yang mereka lakukan. Ini tidak selalu terjadi.)

Variasi pada (2) adalah menghapus partisi dan fitur-fitur lain pada basis data sumber, dan mengambil cadangan lain. Tetapi jika itu tidak rusak ...

Aaron Bertrand
sumber
3

Pengembang dan Perusahaan adalah perangkat lunak yang sama, hanya dengan perjanjian lisensi yang berbeda.

Anda harus mengembalikan database ini ke tujuan dengan baik.

Mark Henderson
sumber