SQL Server mengembalikan hasil cadangan dalam kesalahan

15

Saya memiliki database di dev (SQL Server 2005 pada Windows Server 2008) yang saya perlukan untuk pindah ke prod (SQL Server 2000 pada Windows Server 2003). Proses saya adalah sebagai berikut:

  1. Masuk ke dev, buka SQL Server Management Studio
  2. Klik kanan pada database | Tugas | Cadangkan. Simpan semua opsi default (cadangan penuh dll.)
  3. Memindahkan file .bak secara lokal ke prod (tidak ada drive jaringan), masuk ke prod, buka SQL Server Enterprise Manager.
  4. Klik kanan simpul Databases | Semua Tugas | Pulihkan basis data.
  5. Ubah Pulihkan sebagai basis data untuk mencerminkan nama basis data yang sama.
  6. Klik tombol radio 'Dari perangkat'. Klik 'Pilih Perangkat'
  7. Klik Restore from: Add ..., browse ke file .bak (kecil - hanya 6mb)

Sekarang saya siap untuk memulihkan database, jadi saya klik OK dan dapatkan kesalahan berikut:

"Keluarga media pada perangkat 'E: ... bak' tidak terbentuk dengan benar. SQL Server tidak dapat memproses keluarga media ini. KEMBALIKAN DATABASE berhenti secara tidak normal."

Kesalahan ini langsung terjadi.

Saya telah mencoba beberapa variasi berbeda - mengembalikan mesin db ke dev dengan nama db dan nama file log yang berbeda (dari mana asalnya), membuat database kosong dengan jalur fisik yang sama ke file sebelumnya dan mencoba mengembalikannya, membuat beberapa file .bak yang berbeda dan memastikannya diverifikasi sebelum mengunggahnya ke prod. Saya tahu sebenarnya direktori untuk file .mdf dan .ldf ada di prod, meskipun file itu sendiri tidak ada. Jika, sebelum saya mengklik OK untuk mengembalikan, buka tab opsi sebagai gantinya saya mendapatkan kesalahan berikut:

Kesalahan 3241: Kelompok media pada perangkat 'E: ... bak' salah terbentuk. SQL Server tidak dapat memproses keluarga media ini. KEMBALIKAN FILELIST berakhir secara tidak normal.

Adakah yang punya ide cemerlang?

Mario
sumber
Saya setuju, hanya menghabiskan satu hari untuk hal ini dan membuang-buang waktu saya, sepertinya masalah kompatibilitas mundur, 2k8 R2 hingga 2k5 dalam kasus saya.

Jawaban:

7

Header cadangan di MSSQL2008 berbeda dari yang ada di MSSQL2005, yang kemungkinan merupakan sumber masalah Anda. Coba ekspor DB daripada paradigma backup-restore, atau atur MSSQL2008 di server DEV Anda.

Thunder3
sumber
4

Seperti yang dikatakan Mike Dimmick - SQL 2000 tidak akan mengenali cadangan SQL 2005 (seperti Word 2000 tidak akan mengenali file DOCX 2007). Karenanya Anda harus memigrasikan data Anda dalam format penyebut umum yang lebih rendah seperti skrip SQL. Coba panduan penerbitan basis data yang merupakan bagian dari SQL Server Hosting Toolkit yang menghasilkan file SQL tunggal untuk skema dan data.

Duncan Smart
sumber
1
Penting untuk memeriksa apakah Anda telah menginstal SqlExpress (Anda mungkin telah menginstalnya tanpa Anda sadari). Sangat mudah untuk masuk ke SqlExpress secara tidak sengaja dan kemudian panik karena tidak akan membiarkan Anda mengembalikan database 2008 ke dalamnya. Ini mungkin alasan yang sangat umum untuk mendapatkan kesalahan ini.
Simon
2

Anda bisa memajukan cadangan dalam keluarga SQL Server, yaitu 2000 hingga 2005 atau 2008, tetapi tidak mundur: Anda tidak bisa mengembalikan cadangan SQL Server 2005 pada SQL Server 2000.

Mike Dimmick
sumber
1

Mungkin ini masalah izin yang mencegah file dibuat saat Anda mencoba memulihkan. Coba buat database baru pada target dengan nama yang sama yang Anda inginkan dan kemudian pulihkan di atasnya.

Juga, jika Anda mencoba memulihkan cadangan dari hard drive eksternal atau jaringan berbagi coba menyalin file cadangan ke mesin lokal sebelum mencoba mengembalikan.


sumber
1

Secara default ada dua objek penjelajah dari SQL Server 2005. Saya kira Anda mencoba objek server / sqlexpress. Coba kembalikan ke yang lain.


sumber
1

(Menghela nafas.) Ahhhhh, itu masalahnya.

Saya memiliki SQL Server 2008 SP1 yang berjalan pada PC jarak jauh. Saya membuat cadangan basis data, tetapi tidak bisa mendapatkan salinan lokal saya SQL Server 2008 untuk memulihkan dari file .bak.

Seperti yang [Yini] katakan, ini adalah salinan SQL Server 2008 saya yang membuka contoh SQL Server 2005 saya di PC lokal saya, bukan contoh SQL Server 2008 saya. Jenius.

Dan saya sepenuhnya setuju dengan [Yini] - cukup adil, Anda tidak dapat mengembalikan cadangan SQL Server 2008 menjadi contoh 2005, tetapi Microsoft setidaknya bisa memberi kami pesan kesalahan yang layak.

"Keluarga media pada perangkat 'D: \ DatabaseBackup_21_02_2011.bak' salah terbentuk. SQL Server tidak dapat memproses keluarga media ini."

Cadangan saya tidak salah dibentuk. Itu tidak bisa dikembalikan ke contoh SQL Server 2005 , bahkan ketika saya menjalankan SQL Server 2008 SP1.

Apakah benar-benar sulit untuk memasukkan ini ke dalam pesan kesalahan ............?

Mike Gledhill
sumber
0

Beberapa pemikiran:

  • Kira-kira berapa ukuran database yang Anda pulihkan?
    Satu-satunya artikel pendukung tentang kesalahan ini adalah untuk SQL 2000 dan berbicara tentang file log besar. Meskipun Anda tidak menggunakan SQL 2000, mungkin membantu untuk mengurangi ukuran log terlebih dahulu jika mereka sangat besar.

  • Apakah Anda dapat mengembalikan database ke server Dev Anda (sebagai nama db yang berbeda, ke file yang berbeda)? Itu akan membuktikan apakah file itu sendiri baik-baik saja sejauh menyangkut SQL 2005.

  • Apakah Anda dapat memulihkan database lain dari server Dev itu ke Prod?

Rory
sumber
0

Hai semuanya, seperti yang disarankan Mike, saya akan merekomendasikan Database Publishing Wizard, ini pekerjaan yang bagus.

Ini adalah solusi yang awalnya saya gunakan yang tidak sepenuhnya saya sarankan - sepertinya sedikit ghetto .


1) Buat db pada prod, buat pengguna db dengan hak yang tepat, buka port pada firewall Anda yang memungkinkan akses jarak jauh
2) Dari dev di SQL Server Management Studio, klik kanan db -> tugas -> ekspor data. Saat memilih tujuan, pastikan untuk menentukan port xxx.xxx.xxx.xxx, 1764.
3) Pilih semua tabel untuk ditransfer, klik 100 kali berikutnya, dan Anda selesai.

PERINGATAN: Ini tidak menyalin prosedur tersimpan.
PERINGATAN: Ini tidak menyalin Identitas untuk kolom int

UPDATE: Sepertinya Anda tidak bisa melanjutkan dari 2005 hingga 2000. Saya menemukan teks tautan posting berikut - sepertinya Anda dapat menggunakan metode saya di atas, tetapi Anda juga ingin membuat skrip semua objek dan kemudian menjalankannya pada tahun 2000.

Mario
sumber