Errore di ripristino del database di SQL Server: il cast specificato non è valido. (SqlManagerUI)


91

Sto usando SQL Server 2008 R2 Standard (versione 10.50.1600.1) per il mio sito Web di produzione e l'edizione SQL Server Express con Advanced Services (v10.50.1600.1) per il mio localhost come database.

Pochi giorni fa il mio SQL Server si è bloccato e ho dovuto installare una nuova versione 2008 R2 Express sul mio localhost. Ha funzionato bene quando ho ripristinato alcune versioni precedenti prese dall'edizione Express, ma quando provo a ripristinare il database da un .bakfile preso dal server di produzione sta causando il seguente errore:

Errore: il cast specificato non è valido. (SqlManagerUI)

e quando provo a ripristinare il database usando il comando

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'

Genera un errore diverso

Msg 3154, livello 16, stato 4, riga 1
Il set di backup contiene un backup di un database diverso dal database esistente "Pubblicazioni".
Il messaggio 3013, livello 16, stato 1, riga 1
RESTORE DATABASE termina in modo anomalo.

Ho incrociato le versioni. Mi sembrano tutti corrispondenti come mostrato nell'immagine qui sotto

In precedenza ero in grado di ripristinare un database dalla versione standard all'edizione express, ma ora non riesce. Ho cancellato il database e ho provato a ricrearlo. Anche questo fallisce.

Non sono sicuro di cosa sto facendo di sbagliato. Apprezzerei l'aiuto in questo riguardo

Il problema è stato risolto in quanto sembra che il file .bak fosse danneggiato. Quando l'ho provato con un file diverso ha funzionato.


Non sono un professionista in questa, ma domanda veloce, l'architettura x86 e x64 nel database è compatibile?
Gustav Klimt

Avevo un database di ripristino precedente in quel momento non ho riscontrato alcun problema del genere. per qualche motivo ora genera errori, non sono sicuro che le regole di confronto del server database stiano creando problemi
Apprendimento

Prova ad aggiungere ,REPLACEal comando T-SQL per sovrascrivere il database AlHabtoorPublications esistente.
SchmitzIT

Ho riscontrato lo stesso problema al lavoro oggi .. Sembra che il controllo della dimensione del file dopo il trasferimento FTP non sia sufficiente. Sembra che il file sia molto sensibile. Risolto il problema comprimendo il file prima di eseguire il trasferimento.
rofans91

Scenerio Ho eseguito il backup del database su SQL SERVER 2008 e ho provato a ripristinarlo su SQL SERVER 2008 R2. Idealmente, dovrebbe funzionare correttamente, ma durante la selezione del file di backup, SQL Management Studio 2208 R2 generava l'errore "Il cast specificato non è specificato. (SqlManagerUI)". Motivo e risoluzione dei problemi Ciò era dovuto al danneggiamento del file .BAK durante il trasferimento FTP (la modalità di trasferimento è impostata su ASCII). Ricordarsi sempre di impostare la modalità di trasferimento FTP su BINARIO durante il trasferimento del file .BAK del database.
Rohan Sarkar

Risposte:


40

La GUI può essere instabile a volte. L'errore che hai ricevuto durante l'utilizzo di T-SQL è perché stai tentando di sovrascrivere un database esistente, ma non hai specificato di sovrascrivere / sostituire il database esistente. Potrebbe funzionare:

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.

Strano, ho riutilizzato la tua dichiarazione originale. In ogni caso, l'unica cosa che ho aggiunto è stata l'ultima riga: , REPLACE
SchmitzIT

1
In realtà, Failed: 38indica reached end of the file. (In una finestra di comando, esegui NET HELPMSG 38). Che di solito indica un backup danneggiato: stackoverflow.com/questions/5656363/...
SchmitzIT

Ho testato il ripristino con un file .bak un po 'più vecchio che è stato ripristinato senza problemi. Sembra che questo particolare file .bak sia corrotto
Apprendimento

Potrebbe essere stato il risultato dell'incidente. Potrebbe aver rovinato parti dell'unità. Sono contento di sentire che sei riuscito a risolvere il problema con un backup diverso :)
SchmitzIT

Lo script genera il seguente errore Msg 3203, Livello 16, Stato 1, Riga 1 Lettura su "C: \ Publications.bak" non riuscita: 38 (impossibile recuperare il testo per questo errore. Motivo: 15105) Msg 3013, Livello 16, Stato 1 , La riga 1 RESTORE DATABASE termina in modo anomalo.
Apprendimento

163

Potrebbe essere dovuto al ripristino del file di backup della versione di SQL Server 2012 in SQL Server 2008 R2 o anche meno.


4
Uno avrebbe bisogno di utilizzare "Genera script" invece.
kroiz

4
Questo era il mio problema. Sembra che non sarebbe troppo difficile per la SM dare un messaggio più utile per alcuni di questi casi.
John Gilmer

Pinal Dave spiega i motivi qui - blog.sqlauthority.com/2015/06/01/…
shrivb

15

Finalmente questo errore è scomparso durante un ripristino. Sono passato a SQL2012 per la frustrazione, ma immagino che probabilmente funzionerebbe ancora su 2008R2. Ho dovuto usare i nomi logici:

RESTORE FILELISTONLY
FROM DISK = location of your.bak file

E da lì ho eseguito un'istruzione di ripristino con l' MOVEutilizzo di nomi logici.

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'

Quando fu terminato il restauro, quasi piansi di gioia.

In bocca al lupo!


4

Di seguito possono essere 2 motivi per questo problema:

  1. Il backup eseguito su SQL 2012 e Restore Headeronly è stato eseguito solo in SQL 2008 R2

  2. Il supporto di backup è danneggiato.

Se eseguiamo sotto il comando, possiamo trovare sempre l'errore effettivo:

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

Fornisci la posizione completa del tuo file di database nel quot

Spero che sia d'aiuto

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.