Errore di ripristino di SQL Server - Accesso negato


168

Ho creato un database sul mio computer locale e quindi ho eseguito un backup chiamato tables.baktable DataLabTables.

Ho spostato quel backup su una macchina remota senza quella tabella e ho provato a fare un ripristino ma ho ricevuto il seguente errore:

System.Data.SqlClient.SqlError: il sistema operativo ha restituito l'errore "5 (accesso negato.)" Durante il tentativo di "RestoreContainer :: ValidateTargetForCreation" su "c: \ Programmi \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ DataLabTables .mdf'.

Come posso risolvere i miei diritti, se questo è il problema?

Risposte:


541

Ho appena avuto questo problema con SQL Server 2012.

Si scopre che tutto quello che dovevo fare era spuntare la casella contrassegnata "Riporta tutti i file nella cartella" nella sezione "File":

inserisci qui la descrizione dell'immagine

(Clicca per vedere l'immagine a schermo intero)

Ciò ovviamente presuppone che sia installata la versione corretta di SQL Server.


13
Ha funzionato anche per me. Qualcuno può spiegare perché ?
magnattico

3
Puoi anche condividere come può essere fatto tramite script anziché tramite l'interfaccia utente?
FMFF,

9
Ho avuto questo problema con il 2014, stessa soluzione.
DaneEdw,

3
Questa è stata anche la soluzione per me durante il backup da SQL Express e il ripristino su SQL Server completo
tarrball

11
Devo darti un abbraccio. Ora sul serio, stavo per dire di no a un cliente, la tua risposta ha salvato il mio progetto.
Marco Scabbiolo,

30

Dal messaggio di errore, si dice che c'è un errore durante la convalida della destinazione ( c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DataLabTables.mdf) dell'operazione di ripristino.

Sembra che:

a) quel file esiste già (perché l'hai già ripristinato in precedenza) ed è in uso da SQL Server

o

b) quella directory non esiste affatto

Nella tua domanda hai menzionato di aver creato un backup per quella tabella: non è così che funzionano i backup di SQL Server. Tali backup sono sempre l'intero database (o almeno uno o più filegroup da quel database).

Il mio sospetto è: hai già ripristinato quel database in precedenza e ora, al secondo ripristino, non hai selezionato la casella di controllo "Sovrascrivi database esistente" nella procedura guidata di ripristino, quindi il file esistente non può essere sovrascritto e il ripristino non riesce.

L'utente che esegue il ripristino sul server remoto ovviamente non ha accesso a quella directory sul server remoto.

C:\program files\.... è una directory protetta - gli utenti normali (non amministratori) non hanno accesso a questa directory (e alle sue sottodirectory).

La soluzione più semplice: prova a posizionare il tuo file BAK altrove (ad es. C:\temp) E ripristinalo da lì


Ho provato con C: \ temp ma l'errore è sempre lo stesso di sopra, con lo stesso percorso che ho menzionato per la prima volta che è strano
cdub

Faccio clic con il tasto destro del mouse su Database in SQL Management Studio, quindi su Attività -> Ripristina
cdub l'

1
@marc_s thx, ho dimenticato di modificare le opzioni in quanto non esiste una directory per quel file ... non è ... MSSQL \ DataLabTables.mdf ma invece ... MSSQL \ Data \ DataLabTables.mdf
cdub

2
@marc_s: commento secondario sulla porzione "ed è in uso da SQL Server" dell'opzione A sopra elencata: risulta che un RESTOREcomando standard non riesce se il file esiste, anche se non è utilizzato da SQL Server (ad es. MDF / I file LDF rimangono al loro posto dopo un precedente distacco). Mi sono imbattuto in questo in un'implementazione personalizzata di log shipping basata su T-SQL per un'importante migrazione di centinaia di DB nelle ultime due settimane. Non sono sicuro che il messaggio di errore fosse "accesso negato", avrebbe potuto essere qualcosa di meno specifico.
Tao,

2
Ho dovuto rinominare manualmente i file MDF / LDF esistenti prima di poter ripristinare tramite un backup - il controllo di "Sovrascrivi" non era sufficiente.
Jamie Keeling

26

Avevo lo stesso problema. Si è scoperto che il mioSQL Server e SQL Server Agentservices logon aserano in esecuzione con l' Network Servicesaccount che non aveva accesso in scrittura per eseguire il ripristino del backup.

Ho modificato entrambi questi servizi per accedere come Local System Accounte questo ha risolto il problema.


Questa non è una buona idea. Maschera il vero problema che è la posizione del file che si sta tentando di ripristinare non è quello che si intende.
declouet,

2
Il mio servizio SQL Server era in esecuzione in "Servizio NT \ MSSQLSERVER" aggiungendo le autorizzazioni per questo utente alla cartella dati e registro funzionava per me.
Tim Newton,

Bene, questo mi ha aiutato
Aliaksei Zhukau,

9

Di recente ho riscontrato questo problema con SQL 2008 R2 e la soluzione seguente ha funzionato per me:

1) Creare un nuovo database con lo stesso nome di quello che si sta tentando di ripristinare 2) Durante il ripristino, utilizzare lo stesso nome usato in precedenza e nelle opzioni, fare clic sull'opzione di sovrascrittura

Potresti provare quanto sopra se le altre soluzioni non funzionano.


6

Il creatore del backup aveva installato MSSql versione 10, quindi quando ha eseguito il backup memorizza anche il percorso del file originale (per poterlo ripristinare nella stessa posizione), ma avevo la versione 11, quindi non è stato possibile trovare la directory di destinazione.

Quindi ho modificato la directory del file di output in C: \ Programmi \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ ed è stato in grado di ripristinare correttamente il database.

fonte


6

Ho avuto un problema simile. Ho provato a ripristinare un file .bak 2005 e ho ricevuto esattamente lo stesso errore. Ho selezionato anche l'opzione di sovrascrittura senza alcun risultato.

la mia soluzione era concedere all'utente SQL l'accesso alla directory in questione, accedendo alla cartella e modificando i diritti di accesso attraverso la schermata delle proprietà.


2

perso un paio d'ore anche a questo problema. capito però:

"accesso negato" nel mio caso significava davvero "accesso negato". L'account utente di mssqlstudio sul mio dispositivo Windows NON aveva il pieno controllo della cartella specificata nel messaggio di errore. gli ho dato il pieno controllo. l'accesso non è stato più negato e il ripristino è riuscito.

perché la cartella è stata bloccata per studio? chissà ? ho abbastanza domande da affrontare così com'è senza cercare di rispondere di più.


1

Ho avuto questo problema, ho effettuato l'accesso come amministratore e risolto il problema.


Ha funzionato anche per me per SSMS v17
Nandolcs il

0

Un altro scenario potrebbe essere l'esistenza di più percorsi di database. Innanzitutto, prendere nota del percorso in cui sono attualmente archiviati nuovi database. Quindi, se si crea un nuovo database vuoto e quindi lo si fa Tasks/Restore, assicurarsi che il percorso che il ripristino tenta di utilizzare sia la stessa directory in cui è stato creato il database vuoto. Anche se il percorso di ripristino è legale, si otterrà comunque l'accesso negato errore se non è il percorso corrente con cui stai lavorando. Molto facile da individuare quando il percorso non è legale, molto più difficile da individuare quando il percorso è legale, ma non quello corrente.


0

Scusa perché non posso commentare ...

Ho avuto lo stesso problema. Nel mio caso il problema era legato al tentativo di ripristinare in una vecchia cartella sql server (che esisteva sul server). Ciò è dovuto al vecchio backup del server SQL (ad es. Backup di SQL Server 2012) ripristinato in un nuovo server SQL (SQL Server 2014). Il vero problema non è troppo diverso dalla risposta di @marc_s. Ad ogni modo, ho cambiato solo la cartella di destinazione nella nuova cartella DATA di SQL Server.


0

Questa potrebbe non essere la soluzione migliore, ma stavo cercando di eseguire il ripristino in SQL Server 2005, ma sono passato a SQL Server 2008 e ha funzionato.


0

Ho un problema del genere. Errore causato dalla compressione abilitata nelle cartelle di SQL Server.


0

Frnds ... Ho avuto lo stesso problema durante il restroring del database e ho provato ogni soluzione ma non sono stato risolto. Quindi ho provato a reinstallare SQL 2005 e il problema è stato risolto. In realtà l'ultima volta ho dimenticato di controllare l'opzione di personalizzazione durante l'installazione di SQL .. Arriva due volte durante l'installazione e l'ho verificato solo per quelli ..


0

Nel mio caso - ho dovuto ricontrollare il percorso di backup del database da dove stavo ripristinando. In precedenza l'avevo ripristinato da un percorso diverso la prima volta che l'ho fatto. Ho corretto il percorso di backup per utilizzare il percorso di backup che ho usato la prima volta e ha funzionato!


0

Ho finito per creare nuove cartelle per dati e registri e ha funzionato correttamente, deve essere stato un problema di autorizzazione cartella / file.


0

Ciò accade anche se i percorsi sono corretti, ma l'account del servizio non è il proprietario dei file di dati (tuttavia ha ancora diritti sufficienti per l'accesso in lettura / scrittura). Ciò può verificarsi se le autorizzazioni per i file sono state ripristinate in modo che corrispondano alle autorizzazioni della cartella (ovviamente, mentre il servizio è stato arrestato).

La soluzione più semplice in questo caso è quella di staccare ogni database e ricollegarlo (perché quando si allega il proprietario viene cambiato per essere l'account del servizio).


-1

Prova questo:

Nella finestra della procedura guidata Ripristina DB, vai alla scheda File, deseleziona la casella di controllo "Riporta tutti i file nella cartella", quindi cambia la destinazione del ripristino da C: a qualche altra unità. Quindi procedere con il normale processo di ripristino. Verrà ripristinato correttamente.


-1

Ho avuto lo stesso problema ma ho usato sql server 2008 r2, è necessario controllare le opzioni e verificare i percorsi in cui sql sta per salvare i file .mdf e .ldf è necessario selezionare il percorso dell'installazione del server sql. Ho risolto il mio problema con questo, spero che ti aiuti.


-2

Quindi prova a spostarlo in una sottocartella in C :, ma verifica che l'utente disponga dei diritti completi sulla cartella in uso.

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.