2012-10-29 16 views
21

Sto cercando di copiare un database SQL Server 2012 Standard nella mia istanza di localdb. Ho provato la procedura guidata che si lamenta che localdb non è un SQL Server 2005 o versione successiva istanza. Ho anche fatto un backup/ripristino, ma al momento il ripristino nel mio LocalDB ottengo il seguente errore ...Come si copia il database di SQL Server 2012 nell'istanza di localdb?

L'esecuzione di questo ...

RESTORE DATABASE CSODev 
FROM DISK = 'C:\MyBckDir\CSODev.bak' 
WITH MOVE 'CSOdev_Data' TO 'C:\Users\cblair\CSOdev_Data.mdf', 
MOVE 'CSOdev_Log' TO 'C:\Users\cblair\CSOdev_Log.ldf', 
REPLACE 

Messaggio di errore ottengo ...

trasformati 8752 pagine per il database 'CSODev', file 'CSOdev_Data' nel file 1.
trasformati 5 pagine per il database 'CSODev', file 'CSOdev_Log' nel file 1.

M sg 1853, livello 16, stato 1, riga 1
Impossibile trovare il file di database logico 'CSOdev_Log'. Specificare il percorso completo per il file.
messaggio 3167, livello 16, stato 1, riga 1
RESTORE non è stato in grado di avviare il database 'CSODev'.
Messaggio 3013, livello 16, stato 1, riga 1
RESTORE DATABASE sta terminando in modo anomalo.

Il database finisce nella modalità "Recupero in sospeso". Sembra che abbia problemi con il file di registro. Ho provato 2 diversi backup nel caso in cui uno fosse solo danneggiato.

+0

Forse prova a mettere i tuoi file da qualche altra parte oltre la cartella del tuo profilo. Cosa succede se si spostano i dati/file di registro su C: \ Data \ ad esempio? –

+0

Ho provato a farlo e ottenere ancora lo stesso messaggio di errore. –

+0

Sono riuscito a farlo correttamente - Ho creato un database su un'istanza normale, l'ho eseguito il backup e l'ho ripristinato su un'istanza di localdb bene: http://i.stack.imgur.com/rOOhq.png I'm non sai quali informazioni mancano nella tua domanda, ma chiaramente stai facendo qualcosa di diverso.Non so cosa chiedere per scovarlo. Succede per qualsiasi database o solo questo specifico database? –

risposta

1

Ho avuto lo stesso problema. Provare a eseguire Visual Studio come amministratore e provare il seguente comando

RESTORE DATABASE CSODev 
FROM DISK = 'C:\MyBckDir\CSODev.bak' 
WITH NORECOVERY, MOVE 'CSOdev_Data' TO 'C:\Users\cblair\CSOdev_Data.mdf', 
MOVE 'CSOdev_Log' TO 'C:\Users\cblair\CSOdev_Log.ldf', 

UPDATE: Questo non ha funzionato esattamente!

Sebbene l'istruzione precedente non produca errori e sia completata correttamente, il database rimane nello stato "PENDING RECOVERY" e non è possibile accedervi in ​​alcun modo. Quando ho provato a "RIPRISTINARE CON RECUPERO" per portare il database online ho ricevuto lo stesso errore della domanda precedente.

Quindi nel mio caso ho finito il ripristino del backup su un server DEV in esecuzione con MSSQL 2008 R2 e quindi ho scelto: Attività -> Genera script -> scegli oggetti da script & Avanti -> fai clic sul pulsante "Avanzate" -> selezionare "tipi di dati da scriptare": schema & dati. Ora esegui lo script generato con il db locale.

3

Provare a fare lo scripting del database come schema e dati e quindi eseguire lo script localmente.

+0

Suggerimento per chi viene qui, dai un'occhiata [risposta di MEMark in basso] (http://stackoverflow.com/a/18792126). – Benjol

+0

Penso che lo scripting del database sia la strada da percorrere per alcuni di noi. Penso che il mio problema è forse che le istanze di SQL Server sono diverse (come il 2005 rispetto al 2008). – vbullinger

4

Ho avuto lo stesso problema, e dopo aver fatto una piccola ricerca online mi sono imbattuto in un modo ingegnoso per farlo funzionare (anche se abbastanza hacky). In pratica:

  1. Creare un'istanza SqlLocalDb (SqlLocalDb c tmp -s).
  2. Ripristinare il database come sopra (ad es., SqlCmd -E -S <localdb connection string> -Q "RESTORE DATABASE ...").
  3. Arresta l'istanza SqlLocalDb (SqlLocalDb p tmp).
  4. Elimina l'istanza SqlLocalDb (SqlLocalDb d tmp).
  5. Creare una nuova istanza SqlLocalDb (SqlLocalDb c persistent -s).
  6. crea il database nella nuova istanza collegandolo (SqlCmd -E -S <persistent connection string> -Q "Create Database <dbname> On (Filename = '<Mdf file location'), (Filename = '<Ldf Filename'>) For Attach"

e spero che dovrebbe funzionare Vedi here per idea originale

Edit:... La correzione Aggiunto Jason Brady s' del creare . comando

+2

Questo ha funzionato per me. Sebbene, la sintassi Crea database fosse errata. Sono letteralmente 2 caratteri extra e Stack Overflow mi dice che non posso fare una modifica a meno che non sia almeno 6. Deve essere "Crea Database On (Nome file = ') Per Attach' – Jason

2
RESTORE FILELISTONLY 
FROM DISK = 'D:\SQLBackups\yourdatabase.BAK' 


ALTER DATABASE yourdatabasename 
SET SINGLE_USER WITH 
ROLLBACK IMMEDIATE 

RESTORE DATABASE yourdatabasename 
FROM DISK = 'D:\SQLBackups\yourdatabase.BAK' 
with replace, 
move 'logical name from file stream' to 
'C:\yourdatabase.mdf', 
move 'logical name from file stream' to 'C:\Yourdatabase.ldf' 
ALTER DATABASE Qatar_DB SET MULTI_USER 
+1

Grazie, funziona bene! – ssabbattini

+0

Questa soluzione ha funzionato correttamente anche per me. Come nota, assicurati di aver prima creato i database vuoti e poi di eseguire la query sopra, regolando il caso corretto in LocalDB affinché funzioni. Schemi di versioni diverse sembrano funzionare all'indietro Compatibile (2012 -> 2010) – Truesky

5

ho avuto lo stesso problema che fine ha fatto il lavoro era questo:.

  1. Cercando di ripristinare il database (ottenendo l'errore nel PO)
  2. Rimozione del database di
  3. riattaccare il database di

Che cosa è successo nell'ultimo passaggio era che SSDT effettuato un aggiornamento del file di dati, apparentemente in un formato precedente. Al termine, il database ha iniziato a funzionare senza problemi!

+0

Tu, signore, meriti il ​​segno di spunta verde! – Benjol

-1
  1. È possibile farlo manualmente. questo può essere fatto usando dot net e aprendo due tipi di connessioni e inoltrando i dati da uno di essi all'altro. ma questo ha bisogno di creare gli stessi tipi di colonne in quello locale.
  2. È possibile controllare le opzioni di importazione di MS Access 2007
14

C'è known limitation (un vero e proprio bug, appunto) per LocalDB. Avrà esito negativo qualsiasi RESTORE con MOVE ogni volta che i file del database si trovano in cartelle diverse.

È necessario ripristinare nelle cartelle originali (senza MOVE). Usa lo strumento cmd come SUBST se hai bisogno di fingere un drive:/path.

+0

Grazie! Questo mi ha salvato la giornata. – nrodic

1

Stesso problema, grazie per l'aiuto. mio database locale è MS SQL 2014. Open "SQL Server 2014 Management Studio"

  1. Right click il database, andare alla "Attività", fare clic su "Non in linea"
  2. scollegare il database
  3. Attaccare il database

Funziona per me. Dopo aver eseguito il backup del database, è possibile ripristinare il database senza errori. Grazie.

Problemi correlati