2011-10-18 1 views
8

Ok, quindi sto avendo un po 'di problemi - ho eseguito un codice sul mio SQL Server e non ho capito che non avevo il bit WHERE selezionato. Certo, quando ho visto il numero "608 rows affected" invece di "1 row affected", ho dato di matto un po '.Problemi di ripristino del backup di SQL Server?

Fortunatamente, ho salvato un backup, ma per qualche motivo, sto avendo un paio di problemi. Ora, ho preso il server verso il basso, quindi so che non è utilizzato da chiunque, ma mi sta dando il seguente errore

"Restore failed for Server 'myserver'.

System.Data.sqlclient.sqlerror: Exclusive access could not be obtained because the database is in use. (Microsoft.SqlServer.Smo)"

ho visto qualcosa che ha dichiarato dovrei usare

Alter Database Databases 
SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

RESTORE DATABASE PRODUCT 
FROM DISK = '' 

ma Ho tre riserve su questo codice. Innanzitutto, non sono completamente sicuro su come riattivare multi_user. In secondo luogo, non so dove il programma memorizza i suoi backup. In terzo luogo, questo SQL è un po 'sopra la mia testa - Sono relativamente nuovo alla lingua, onestamente, quindi non sono sicuro di come questo influenzerà le cose.

Qualcuno ha delle risposte ai miei problemi?

risposta

4

Impostare il database su utente singolo è corretto. Quando si è completata con il restauro si esegue questo

alter database YourDb 
set multi_user 

Quanto a cui si trova il file bak, dovrete trovarlo prima di ripristino.

+0

haha, sarebbe stato ovvio per me. Grazie. – Kulahan

3

Spaventoso.

Ok, alcune cose da controllare:

  1. Assicurarsi di essere l'unica persona collegata al server.
  2. Assicurarsi che nessun'altra applicazione, server Web, server di app, ecc. Mantengano le connessioni al DB.
  3. Assicurarsi che il proprio gestore SQL non abbia finestre aperte alle tabelle o altri oggetti nel database.

POI si dovrebbe essere in grado di eseguire il ripristino senza singoli utenti.

+0

Io in realtà chiuso giù il server stesso in modo che nessuno potesse connettersi ad esso, ma io stesso, e l'unico programma che dovrebbe collegarsi ad esso sarebbe il programma di gestione server, quindi penso di essere bravo lì. – Kulahan

8

Potrei suggerire invece di sovrascrivere il database esistente dal backup, che invece di ripristinare il backup con un nome di database diverso ... in questo modo è possibile avere i database correnti e precedenti fianco a fianco.

Quindi, è possibile scrivere semplicemente un'istruzione di aggiornamento per recuperare i dati solo da quella tabella specifica invece di reimpostare l'intero database.

EDIT: Le specifiche dipenderanno proprio ambiente, ma il ripristino sarebbe simile a questa:

restore database PRODUCT_OLD 
from disk='C:\PRODUCT.bak' 
with 
    move 'PRODUCT_Data' to 'C:\PRODUCT_OLD_Data.MDF', 
    move 'PRODUCT_Log' to 'C:\PRODUCT_OLD_Log.LDF' 

E poi la dichiarazione di aggiornamento sarebbe anche basata sulla vostra tabella specifica ...

+0

Qualche esempio su come potresti farlo? – Kulahan

+0

+1, questo è un approccio molto migliore - non aggravare i problemi eliminando gli unici dati validi che ci sono rimasti. –

+0

Mentre questa era una risposta migliore, ho finito per ripristinare l'intero database perché c'erano altri due errori che dovevo correggere, e il backup li ha catturati tutti. Grazie comunque! – Kulahan

0

Vai all'attività Monitor e verifica se gli utenti sono ancora connessi, quindi uccidi il processo per quell'utente utilizzando il rispettivo db. Poi vai avanti ripristinare il backup

6

proprio sulla base di dati click per Task>takeoffline, quando il suo successo fare la stessa cosa, ma lo mise In linea quindi provare a ripristinare il database

+1

Questi sembrano avermi aiutato. Grazie per l'idea. Anche se, sembrava passare molto tempo per andare offline. –