Galat pemulihan database SQL Server: cast yang ditentukan tidak valid. (SqlManagerUI)

91

Saya menggunakan SQL Server 2008 R2 Standard (versi 10.50.1600.1) untuk situs web produksi saya dan edisi SQL Server Express dengan Layanan Lanjutan (v10.50.1600.1) untuk localhost saya sebagai database.

Beberapa hari yang lalu SQL Server saya mengalami crash dan saya harus menginstal versi 2008 R2 Express baru di localhost saya. Ini berfungsi dengan baik ketika saya memulihkan beberapa versi lama yang diambil dari edisi Express tetapi ketika saya mencoba memulihkan database dari .bakfile yang diambil dari server produksi, itu menyebabkan kesalahan berikut:

Kesalahan: Pemeran yang ditentukan tidak valid. (SqlManagerUI)

dan ketika saya mencoba mengembalikan database menggunakan perintah

Use Master
Go
RESTORE DATABASE Publications
FROM DISK = 'C:\Publications.bak'
WITH MOVE 'Publications' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.mdf',--adjust path
MOVE 'AlPublications_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.ldf'

Ini menghasilkan kesalahan yang berbeda

Psn 3154, Level 16, Status 4, Baris 1
Kumpulan cadangan menyimpan cadangan database selain database 'Publikasi' yang ada.
Msg 3013, Level 16, Status 1, Baris 1
PULIHKAN DATABASE berhenti secara tidak normal.

Saya telah memeriksa ulang versinya. Mereka semua tampak cocok bagi saya seperti yang ditunjukkan pada gambar di bawah

Sebelumnya saya dapat memulihkan database dari versi standar ke edisi ekspres tetapi sekarang gagal. Saya menghapus database dan mencoba membuatnya kembali. Itu juga gagal.

Saya tidak yakin apa yang saya lakukan salah. Saya sangat menghargai bantuan dalam hal ini

Masalah teratasi karena tampaknya file .bak rusak. Ketika saya mencobanya dengan file yang berbeda, itu berhasil.

Belajar
sumber
im bukan pro dalam hal ini, tapi pertanyaan singkat, apakah x86 dan x64 arhitecture dalam database yang kompatibel?
Gustav Klimt
Saya memiliki database pemulihan sebelumnya pada saat itu saya tidak menghadapi masalah seperti itu. untuk beberapa alasan sekarang ini menghasilkan kesalahan saya tidak yakin apakah pemeriksaan server database menimbulkan masalah
Belajar
Coba tambahkan ,REPLACEke perintah T-SQL untuk menimpa database AlHabtoorPublications yang sudah ada.
SchmitzIT
Saya mengalami masalah yang sama di tempat kerja hari ini .. Sepertinya memeriksa posting ukuran file melakukan transfer FTP tidak cukup. Sepertinya file tersebut sangat sensitif. Memecahkan masalah dengan membuat zip file sebelum menjalankan transfer.
rofans91
Scenerio Saya mengambil backup database di SQL SERVER 2008 dan mencoba memulihkannya di SQL SERVER 2008 R2. Idealnya, ini harus bekerja dengan baik tetapi saat memilih file cadangan, SQL Management Studio 2208 R2 memunculkan kesalahan "Cast yang ditentukan tidak ditentukan. (SqlManagerUI)". Alasan & Pemecahan Masalah Ini karena file .BAK rusak selama transfer FTP (mode transfer disetel ke ASCII). Selalu, ingat untuk mengatur mode transfer FTP ke BINARY saat mentransfer file .BAK database.
Rohan Sarkar

Jawaban:

40

GUI terkadang berubah-ubah. Kesalahan yang Anda dapatkan saat menggunakan T-SQL adalah karena Anda mencoba untuk menimpa database yang sudah ada, tetapi tidak menentukan untuk menimpa / mengganti database yang sudah ada. Berikut ini mungkin berhasil:

Use Master
Go
RESTORE DATABASE Publications
  FROM DISK = 'C:\Publications_backup_2012_10_15_010004_5648316.bak'
  WITH 
    MOVE 'Publications' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.mdf',--adjust path
    MOVE 'Publications_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.ldf'
, REPLACE -- Add REPLACE to specify the existing database which should be overwritten.
SchmitzIT
sumber
Aneh, saya menggunakan kembali pernyataan asli Anda. Bagaimanapun, satu-satunya tanda yang saya tambahkan adalah baris terakhir: , REPLACE
SchmitzIT
1
Sebenarnya, Failed: 38menunjukkan reached end of the file. (Di jendela perintah, jalankan NET HELPMSG 38). Itu biasanya menunjukkan cadangan yang rusak: stackoverflow.com/questions/5656363/…
SchmitzIT
Saya menguji pemulihan dengan file .bak yang sedikit lebih tua yang dipulihkan tanpa masalah. Tampaknya file .bak khusus ini rusak
Pembelajaran
Mungkin akibat dari kecelakaan itu. Itu bisa merusak beberapa bagian drive. Senang mendengar Anda berhasil menyelesaikan masalah dengan cadangan yang berbeda :)
SchmitzIT
Skrip Anda menghasilkan kesalahan berikut Msg 3203, Tingkat 16, Negara Bagian 1, Baris 1 Pembacaan di "C: \ Publications.bak" gagal: 38 (gagal untuk mengambil teks untuk kesalahan ini. Alasan: 15105) Pesan 3013, Tingkat 16, Negara Bagian 1 , Baris 1 PULIHKAN DATABASE berhenti secara tidak normal.
Belajar
163

Bisa jadi karena memulihkan file cadangan versi SQL Server 2012 ke SQL Server 2008 R2 atau bahkan kurang.

Subhash Makkena
sumber
4
Sebagai gantinya, seseorang perlu menggunakan "Hasilkan Skrip".
kroiz
4
Ini adalah masalahku. Sepertinya tidak akan terlalu sulit bagi MS untuk memberikan pesan yang lebih bermanfaat untuk beberapa kasus ini.
John Gilmer
Pinal Dave menjelaskan alasannya di sini - blog.sqlauthority.com/2015/06/01/…
shrivb
15

Akhirnya mendapat kesalahan ini untuk pergi pada pemulihan. Saya pindah ke SQL2012 karena frustrasi, tetapi saya rasa ini mungkin masih berfungsi pada 2008R2. Saya harus menggunakan nama logis:

RESTORE FILELISTONLY
FROM DISK = ‘location of your.bak file

Dan dari sana saya menjalankan pernyataan pemulihan dengan MOVEmenggunakan nama logis.

RESTORE DATABASE database1
FROM DISK = '\\database path\database.bak'
WITH
MOVE 'File_Data' TO 'E:\location\database.mdf',
MOVE 'File_DOCS' TO 'E:\location\database_1.ndf',
MOVE 'file' TO 'E:\location\database_2.ndf',
MOVE 'file' TO 'E:\location\database_3.ndf',
MOVE 'file_Log' TO 'E:\location\database.ldf'

Setelah selesai memulihkan, saya hampir menangis karena gembira.

Semoga berhasil!

Sara Anderson Noonan
sumber
4

Berikut adalah 2 alasan untuk masalah ini:

  1. Pencadangan diambil pada SQL 2012 dan Pulihkan Headerhanya dilakukan di SQL 2008 R2

  2. Media cadangan rusak.

Jika kami menjalankan perintah di bawah ini, kami selalu menemukan kesalahan aktual:

restore headeronly
from disk = 'C:\Users\Public\Database.bak'

Berikan lokasi lengkap file database Anda di quot

Semoga membantu

Keren Caelen
sumber