2012-11-28 41 views
82

Sto utilizzando SQL Server 2008 R2 Standard (versione 10.50.1600.1) per il mio sito Web di produzione e Edizione SQL Server Express con servizi avanzati (v10.50.1600.1) per il mio localhost come database.Errore di ripristino del database SQL Server: il cast specificato non è valido. (SqlManagerUI)

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 meno recenti tratti da Express edition, ma quando provo a ripristinare database da .bak file che viene preso dal server di produzione sta causando il seguente errore:

Error: Specified cast is not valid. (SqlManagerUI)

e quando provo a ripristinare la database utilizzando 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' 

Esso genera un errore diverso

Msg 3154, Level 16, State 4, Line 1
The backup set holds a backup of a database other than the existing 'Publications' database.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

ho un controllo incrociato le versioni. Sembrano tutti corrispondenti a me come mostrato nell'immagine sottostante

In precedenza, ero in grado di ripristinare un database dalla versione standard ad Express Edition ma ora non riesce. Ho cancellato il database e ho cercato di ricrearlo. Anche questo fallisce.

Non sono sicuro di cosa sto facendo male. Gradirei un aiuto in questo riguardo

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

+0

im pro non in questo, ma una domanda veloce, è x86 e x64 arhitecture nel database compatibile? –

+0

Ho avuto un precedente database di ripristino in quel momento non ho affrontato alcun problema di questo tipo. per qualche motivo ora genera errori non sono sicuro che la collazione tra database server crei problemi – Learning

+0

Prova ad aggiungere ", REPLACE" al comando T-SQL per sovrascrivere il database AlHabtoorPublications esistente. – SchmitzIT

risposta

38

La GUI può essere volubile a volte. L'errore che si ottiene quando si utilizza T-SQL è perché si sta tentando di sovrascrivere un database esistente, ma non si è specificato di sovrascrivere/sostituire il database esistente. Quello che segue 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. 
+0

Strano, ho riutilizzato la tua dichiarazione originale. In ogni caso, l'unico segno che ho aggiunto è stato l'ultima riga: ', REPLACE' – SchmitzIT

+0

È frustrante, spero di poterlo risolvere presto – Learning

+1

In realtà," Fallito: 38 "indica" raggiunto la fine del file ". (In una finestra di comando, esegui 'NET HELPMSG 38'). Questo di solito indica un backup corrotto: http://stackoverflow.com/questions/5656363/restore-sql-server-database-failed-38reached-the-end-of-thefile – SchmitzIT

12

Alla fine ho ricevuto questo errore per andare via su un ripristino. Mi sono trasferito a SQL2012 per la frustrazione, ma immagino che probabilmente funzionerà ancora su 2008R2. Ho dovuto usare i nomi logici:

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

E da lì ho incontrato una dichiarazione ripristino con MOVE utilizzando 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 è stato eseguito il ripristino, ho quasi pianto di gioia.

Buona fortuna!

152

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

+10

Mi hai colpito per la testa :) – ABH

+2

Uno avrebbe invece bisogno di usare "Genera Script". – kroiz

+0

Assolutamente il problema anche per me. – SimonGoldstone