SQL Server-Wiederherstellungsfehler - Zugriff verweigert

167

Ich habe eine Datenbank auf meinem lokalen Computer erstellt und dann eine Sicherung namens tables.baktable erstelltDataLabTables .

Ich habe diese Sicherung auf einen Remotecomputer ohne diese Tabelle verschoben und versucht, eine Wiederherstellung durchzuführen, erhalte jedoch den folgenden Fehler:

System.Data.SqlClient.SqlError: Das Betriebssystem hat beim Versuch 'RestoreContainer :: ValidateTargetForCreation' unter 'c: \ Programme \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ DataLabTables' den Fehler '5 (Zugriff verweigert.)' Zurückgegeben .mdf '.

Wie behebe ich meine Rechte, wenn dies das Problem ist?

cdub
quelle

Antworten:

539

Ich hatte gerade dieses Problem mit SQL Server 2012.

Es stellte sich heraus, dass ich nur das Kontrollkästchen "Alle Dateien in Ordner verschieben" im Abschnitt "Dateien" aktivieren musste:

Geben Sie hier die Bildbeschreibung ein

(Klicken, um das Bild in voller Größe zu sehen)

Dies setzt natürlich voraus, dass Sie die richtige Version von SQL Server installiert haben.

Exil
quelle
13
Hat auch für mich gearbeitet. Kann jemand erklären warum ?
Magnattic
3
Können Sie uns bitte auch mitteilen, wie dies über ein Skript anstelle der Benutzeroberfläche erfolgen kann?
FMFF
9
Ich hatte dieses Problem mit 2014, gleiche Lösung.
DaneEdw
3
Dies war auch die Lösung für mich beim Sichern von SQL Express und Wiederherstellen auf vollständigem SQL Server
Tarrball
10
Ich muss dich umarmen. Im Ernst, ich wollte gerade Nein zu einem Kunden sagen, Ihre Antwort hat mein Projekt gerettet.
Marco Scabbiolo
30

Aus der Fehlermeldung geht hervor, dass beim Überprüfen des Ziels ( c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DataLabTables.mdf) Ihres Wiederherstellungsvorgangs ein Fehler aufgetreten ist .

Das hört sich an, wie:

a) Diese Datei ist bereits vorhanden (da Sie sie bereits zuvor wiederhergestellt haben) und wird von SQL Server verwendet

oder

b) Dieses Verzeichnis existiert überhaupt nicht

In Ihrer Frage haben Sie erwähnt, dass Sie eine Sicherung für diese Tabelle erstellt haben - so funktionieren SQL Server-Sicherungen nicht. Diese Sicherungen sind immer die gesamte Datenbank (oder mindestens eine oder mehrere Dateigruppen aus dieser Datenbank).

Meine Vermutung ist: Sie haben diese Datenbank bereits zuvor wiederhergestellt, und jetzt haben Sie bei einer zweiten Wiederherstellung das Kontrollkästchen "Vorhandene Datenbank überschreiben" in Ihrem Wiederherstellungsassistenten nicht aktiviert. Daher kann die vorhandene Datei nicht überschrieben werden und die Wiederherstellung schlägt fehl.

Der Benutzer, der die Wiederherstellung auf Ihrem Remoteserver ausführt, hat offensichtlich keinen Zugriff auf dieses Verzeichnis auf dem Remoteserver.

C:\program files\.... ist ein geschütztes Verzeichnis - normale Benutzer (ohne Administratorrechte) haben keinen Zugriff auf dieses Verzeichnis (und seine Unterverzeichnisse).

Einfachste Lösung: Versuchen Sie, Ihre BAK-Datei an einem anderen Ort abzulegen (z. B. C:\temp) und stellen Sie sie von dort aus wieder her

marc_s
quelle
Ich habe es unter C: \ temp versucht, aber der Fehler ist immer noch der gleiche wie oben, mit dem gleichen Pfad, den ich zuerst erwähnt habe, der seltsam ist
cdub
Ich
klicke mit der
1
@marc_s thx, ich habe vergessen, die Optionen zu bearbeiten, da es kein Verzeichnis für diese Datei gibt ... es ist nicht ... MSSQL \ DataLabTables.mdf, sondern ... MSSQL \ Data \ DataLabTables.mdf
cdub
2
@marc_s: Kleiner Kommentar zum oben aufgeführten Teil "und wird von SQL Server verwendet" von Option A: Es stellt sich heraus, dass ein Standardbefehl RESTOREfehlschlägt, wenn die Datei vorhanden ist, auch wenn sie nicht von SQL Server verwendet wird (z. B. MDF / LDF-Dateien bleiben nach einem vorherigen Trennen an Ort und Stelle. Dies ist mir in einer benutzerdefinierten T-SQL-basierten Protokollversand-Implementierung für eine umfassende Migration von Hunderten von DBs in den letzten Wochen begegnet. Ich bin nicht sicher, ob die Fehlermeldung "Zugriff verweigert" war, möglicherweise etwas weniger Spezifisches.
Tao
2
Ich musste die vorhandenen MDF / LDF-Dateien manuell umbenennen, bevor ich sie über ein Backup wiederherstellen konnte. Die Überprüfung "Überschreiben" war nicht ausreichend.
Jamie Keeling
26

Ich hatte das gleiche Problem. Es stellte sich heraus, dass meine SQL Serverund SQL Server AgentDienste logon asunter dem liefenNetwork Services Konto ausgeführt wurden, das keinen Schreibzugriff hatte, um die Wiederherstellung der Sicherung durchzuführen.

Ich habe beide Dienste geändert, um mich als anzumelden, Local System Accountund dies hat das Problem behoben.

Floh
quelle
Das ist keine gute Idee. Es maskiert das eigentliche Problem, dass der Dateispeicherort, an dem Sie wiederherstellen möchten, nicht das ist, was Sie beabsichtigen.
Deklarieren Sie den
2
Mein SQL Server-Dienst wurde unter "NT-Dienst \ MSSQLSERVER" ausgeführt und fügte dem für mich verwendeten Daten- und Protokollordner Berechtigungen für diesen Benutzer hinzu.
Tim Newton
Gut
9

Vor kurzem hatte ich dieses Problem mit SQL 2008 R2 und die folgende Lösung hat für mich funktioniert:

1) Erstellen Sie eine neue Datenbank mit demselben Namen wie die, die Sie wiederherstellen möchten. 2) Verwenden Sie beim Wiederherstellen denselben Namen wie oben und klicken Sie in den Optionen auf die Option zum Überschreiben

Sie können das oben Genannte ausprobieren, wenn die anderen Lösungen nicht funktionieren.

Devin
quelle
6

Der Backup-Ersteller hatte MSSql Version 10 installiert. Als er das Backup erstellte, speicherte er auch den ursprünglichen Dateipfad (um es am selben Speicherort wiederherstellen zu können), aber ich hatte Version 11, sodass das Zielverzeichnis nicht gefunden werden konnte.

Daher habe ich das Ausgabedateiverzeichnis in C: \ Programme \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ geändert und konnte die Datenbank erfolgreich wiederherstellen.

Quelle

Philluminati
quelle
6

Ich hatte ein ähnliches Problem. Ich habe versucht, eine .bak-Datei von 2005 wiederherzustellen, und genau den gleichen Fehler erhalten. Ich habe die Option zum Überschreiben ebenfalls ohne Erfolg ausgewählt.

Meine Lösung bestand darin, dem SQL-Benutzer Zugriff auf das betreffende Verzeichnis zu gewähren, indem er zum Ordner ging und die Zugriffsrechte über den Eigenschaftenbildschirm bearbeitete.

martijn
quelle
2

verlor auch ein paar Stunden durch dieses Problem. habe es aber in Gang gebracht:

"Zugriff verweigert" bedeutete in meinem Fall wirklich "Zugriff verweigert". Das Benutzerkonto von mssqlstudio auf meinem Windows-Gerät hatte NICHT die vollständige Kontrolle über den in der Fehlermeldung angegebenen Ordner. Ich gab es die volle Kontrolle. Der Zugriff wurde nicht mehr verweigert und die Wiederherstellung war erfolgreich.

Warum wurde der Ordner für das Studio gesperrt? Wer weiß ? Ich habe genug Fragen, um sie zu beantworten, ohne zu versuchen, mehr zu beantworten.

Abraham Tio
quelle
1

Ich hatte dieses Problem, habe mich als Administrator angemeldet und das Problem wurde behoben.

Rob Smith
quelle
Arbeitete auch für mich für das SSMS v17
Nandolcs
0

Ein anderes Szenario könnte das Vorhandensein mehrerer Datenbankpfade sein. Notieren Sie sich zunächst den Pfad, in dem derzeit neue Datenbanken gespeichert werden. Wenn Sie also eine neue leere Datenbank erstellen und dies dann tun Tasks/Restore, stellen Sie sicher, dass der Pfad, den die Wiederherstellung verwenden möchte , dasselbe Verzeichnis ist, in dem die leere Datenbank erstellt wurde. Auch wenn der Wiederherstellungspfad zulässig ist, wird Ihnen der Zugriff verweigert Fehler, wenn es nicht der aktuelle Pfad ist, mit dem Sie arbeiten. Sehr leicht zu erkennen, wenn der Pfad nicht legal ist, viel schwieriger zu erkennen, wenn der Pfad legal ist, aber nicht der aktuelle Pfad.

Demongolem
quelle
0

Entschuldigung, da ich keinen Kommentar abgeben kann ...

Ich hatte das gleiche Problem. In meinem Fall hing das Problem mit dem Versuch zusammen, in einem alten SQL Server-Ordner (der auf dem Server vorhanden war) wiederherzustellen. Dies ist auf eine alte SQL Server-Sicherung (dh SQL Server 2012-Sicherung) zurückzuführen, die auf einem neuen SQL Server (SQL Server 2014) wiederhergestellt wurde. Das eigentliche Problem unterscheidet sich nicht allzu sehr von der Antwort von @marc_s. Wie auch immer, ich habe nur den Zielordner in den neuen SQL Server DATA-Ordner geändert.

Bubi
quelle
0

Dies ist möglicherweise nicht die beste Lösung, aber ich habe versucht, die Wiederherstellung unter SQL Server 2005 durchzuführen, aber ich habe zu SQL Server 2008 gewechselt und es hat funktioniert.

alansiqueira27
quelle
0

Habe so ein Problem. Fehler durch aktivierte Komprimierung in SQL Server-Ordnern.

Arman Hayots
quelle
0

Frnds ... Ich hatte das gleiche Problem beim Wiederherstellen der Datenbank und habe jede Lösung ausprobiert, konnte aber nicht gelöst werden. Dann habe ich versucht, SQL 2005 neu zu installieren und das Problem gelöst. Eigentlich habe ich das letzte Mal vergessen, die Option zum Anpassen zu aktivieren, während ich SQL installiert habe. Es kommt zweimal während der Installation und ich habe es nur für diejenigen überprüft.

Nishant
quelle
0

In meinem Fall musste ich den Sicherungspfad der Datenbank, von der aus ich wiederhergestellt habe, überprüfen. Ich hatte es zuvor von einem anderen Pfad wiederhergestellt, als ich es das erste Mal tat. Ich habe den Sicherungspfad so festgelegt, dass er den Sicherungspfad verwendet, den ich zum ersten Mal verwendet habe, und es hat funktioniert!

SitecoreSyed
quelle
0

Am Ende habe ich neue Ordner für Daten und Protokolle erstellt und es hat ordnungsgemäß funktioniert. Es muss ein Problem mit der Ordner- / Dateiberechtigung gewesen sein.

Reggaeguitar
quelle
0

Dies geschieht auch, wenn die Pfade korrekt sind, das Dienstkonto jedoch nicht der Eigentümer der Datendateien ist (es verfügt jedoch weiterhin über ausreichende Rechte für den Lese- / Schreibzugriff). Dies kann auftreten, wenn die Berechtigungen für die Dateien zurückgesetzt wurden, um mit den Berechtigungen des Ordners übereinzustimmen (natürlich, während der Dienst gestoppt wurde).

In diesem Fall ist es am einfachsten, jede Datenbank zu trennen und erneut anzuhängen (da beim Anhängen der Eigentümer in das Dienstkonto geändert wird).

Razvan Socol
quelle
-1

Versuche dies:

Wechseln Sie im Fenster des Assistenten zum Wiederherstellen der Datenbank zur Registerkarte "Dateien", deaktivieren Sie das Kontrollkästchen "Alle Dateien in Ordner verschieben" und ändern Sie das Wiederherstellungsziel von C: auf ein anderes Laufwerk. Fahren Sie dann mit dem regulären Wiederherstellungsprozess fort. Es wird erfolgreich wiederhergestellt.

Raja Sekhar
quelle
-1

Ich hatte das gleiche Problem, aber ich habe SQL Server 2008 R2 verwendet. Sie müssen die Optionen einchecken und die Pfade überprüfen, in denen SQL die Dateien .mdf und .ldf speichern wird. Sie müssen den Pfad Ihrer SQL Server-Installation auswählen. Ich habe mein Problem damit gelöst, ich hoffe es hilft dir.

Edgar Castillo
quelle
-2

Versuchen Sie dann, es in einen Unterordner unter C: zu verschieben, stellen Sie jedoch sicher, dass der Benutzer die vollen Rechte für den von Ihnen verwendeten Ordner hat.

sqlKob
quelle