Die Datenbank kann nicht aktualisiert werden, da sie schreibgeschützt ist oder schreibgeschützte Dateien enthält. Machen Sie die Datenbank oder Dateien beschreibbar und führen Sie die Wiederherstellung erneut aus

8

Ich habe eine Datenbankdatei erhalten. Die Anweisungen zum Laden lauten, SQL Server 2005 zu installieren und dann mit SQL Server Management Studio anzuhängen.

Nachdem ich alles installiert hatte, habe ich versucht, die MDF-Datei anzuhängen, aber dann heißt es:

Die Verzeichnissuche für die Datei "D: {Ordnername} {Dateiname} .LDF" ist mit dem Betriebssystemfehler 21 fehlgeschlagen (Fehler nicht gefunden).

Eine LDF-Datei wurde nicht mit der Datenbank geliefert, daher sollte sie vermutlich automatisch generiert werden.

Auf dem Laufwerk D befindet sich mein CD-Laufwerk, sodass dort nichts gefunden wird. Es wird auch kein Glück haben, dort etwas zu erschaffen.

  1. Warum wird versucht, unter einem bestimmten Pfad nach einer Protokolldatei zu suchen? Warum nicht, wo sich die Datenbankdatei befindet?

  2. Wie kann ich diese Datenbank anhängen?

Ich habe festgestellt, dass bei der Auswahl einer anzuhängenden Datenbank drei Einträge unter "Datenbankdetails" angezeigt werden. ein MDF, NDF und LDF. Der "aktuelle Dateipfad" des LDF zeigt auf den Laufwerkspfad D oben, daher habe ich ihn entfernt.

Wenn ich diesmal auf "OK" drücke, wird eine andere Fehlermeldung angezeigt:

Die Datenbank kann nicht aktualisiert werden, da sie schreibgeschützt ist oder schreibgeschützte Dateien enthält.
Machen Sie die Datenbank oder Dateien beschreibbar und führen Sie die Wiederherstellung erneut aus.

Dateiaktivierungsfehler. Der physische Name D: {Ordner} {Datei} .LDF ist möglicherweise falsch.
Neue Protokolldatei "..." wurde erstellt. (Microsoft SQL Server, Fehler: 3415)

Jetzt wird eine neue Protokolldatei im selben Ordner wie die Datenbankdatei erstellt. Das ist großartig, aber es scheint, dass es Sicherheitsprobleme gibt.

Zusätzliche Information:

  • Nach den Anweisungen muss ich den Anmeldenamen "sa" verwenden, bei dem es sich anscheinend um das Systemadministratorkonto handelt. Ich bin über diese Anmeldung mit meiner SQL Server-Instanz verbunden.

  • Ich habe die Dateieigenschaften überprüft, dass sie nicht schreibgeschützt sind. Das Verzeichnis ist auch nicht schreibgeschützt. Alle ACLs sind zulässig.

  • Ich kann die Datenbank nicht anhängen. Wenn ich versuche, es anzuhängen, wird eine Fehlermeldung mit der Meldung "Datenbank anhängen fehlgeschlagen" ausgegeben.

  • Das Schließen von SSMS und das erneute Öffnen als Administrator machten keinen Unterschied.

  • select SERVERPROPERTY('ProductVersion')gibt 9.00.4035.00 zurück. Es gibt eine weitere Datei mit der Datenbank "dbdata.ini", in der "IsSql2000 = 1" steht. Vermutlich soll sie in SQL Server 2000 geladen werden. Ich werde sehen, ob ich sie auf 2000 zum Laufen bringen kann.

MxLDevs
quelle

Antworten:

8

Dies ist kein Zugriffsproblem. Das Problem besteht darin, dass Sie die Datenbank an eine höhere Version von SQL Server als die Instanz .mdfanhängen, an die ursprünglich angehängt wurde, und die schreibgeschützt ist. SQL Server versucht, die Datenbank als Teil des Anhangs zu aktualisieren, und kann dies nicht, da sich die Datenbank im schreibgeschützten Modus befindet.

Wenn sich Ihre Datenbank in befindet READ_ONLY(was aufgrund Ihrer Fehlermeldungen so klingt, als ob dies der Fall wäre), benötigen Sie alle Dateien (sowohl Protokoll als auch Daten), um sie gemäß der Technet-Dokumentation anzuhängen . Wenn Sie unter die FOR ATTACHKlausel schauen , beschreibt sie explizit Folgendes:

... für eine schreibgeschützte Datenbank kann das Protokoll nicht neu erstellt werden, da die Primärdatei nicht aktualisiert werden kann. Wenn Sie eine schreibgeschützte Datenbank anhängen, deren Protokoll nicht verfügbar ist, müssen Sie daher die Protokolldateien oder Dateien in der FOR ATTACHKlausel angeben.

Sie benötigen die Begleitung .ldffür die Datenbank. Ich würde mich an denjenigen wenden, der die Datenbank bereitgestellt hat, und ihn bitten, sowohl die .mdfals auch die .ldfDateien bereitzustellen . Anschließend können Sie es mit der folgenden Syntax anhängen:

CREATE DATABASE [foo]
ON (FILENAME='<<path to mdf>>')
LOG ON (FILENAME='<<path to ldf>>')
FOR ATTACH;

Der READ_ONLYStatus kann nicht aus der Datenbank entfernt werden, ohne ihn anzuhängen, da er in den Metadaten der Datenbank gespeichert ist. Um dies zu ändern, muss die Datenbank online und angehängt sein.

Eine andere Alternative besteht darin, eine Sicherung der Datenbank anzufordern. Sie können ganz einfach mehr einige dieser Probleme umgehen , wenn Sie eine Datenbank tun wiederherstellen , anstatt eine befestigen.

Mike Fal
quelle
1
Die Verwendung LOG ONmit dem Matching ldfhat das Problem für mich nicht gelöst
Mugen
25

Ich habe gerade einen Beitrag gefunden, der diese Frage beantwortet hat:

Dies funktioniert möglicherweise nicht in allen Fällen, aber ich habe versucht, die semantische Suchdatenbank zu installieren, und habe den gleichen Fehler erhalten.

Sie müssen SQL Server Management Studio als Administrator ausführen, und es funktioniert.

Datenjongleur
quelle
9
  1. Öffne meinen Computer.
  2. Suchen Sie den Hauptordner, in dem Sie die Dateien ".mdf" und ".ldf" gespeichert haben.
  3. Klicken Sie mit der rechten Maustaste auf den Ordner und klicken Sie auf "Eigenschaften".
  4. Klicken Sie im Eigenschaftenfenster auf "Sicherheit"
  5. Klicken Sie auf "Bearbeiten"
  6. Aktivieren Sie "Lesen und Ausführen", "Lesen", "Schreiben" für die aufgelisteten Benutzer und wenden Sie die Änderungen auf die folgenden Ordner bis zu den Datenbankdateien an.
  7. Versuchen Sie, die Datei ".mdf" anzuhängen
Touhid Mustakhim. M. J.
quelle
Danke, meine alten Fenster sind weg und ich denke, diese Dateien sind von diesem Betriebssystem gesperrt. aber müssen nur die Erlaubnis ändern
Säbel tabatabaee yazdi
1

Klicken Sie mit der rechten Maustaste nacheinander auf die .mdfund .ldf-Dateien und klicken Sie auf "Eigenschaften". Klicken Sie dann unten auf "Diese Datei stammt von einem anderen Computer und wird möglicherweise blockiert, um diesen Computer zu schützen". Klicken Sie auf die Schaltfläche "Blockierung aufheben".

Klicken Sie dann mit der rechten Maustaste auf -> Eigenschaften, -> Registerkarte "Sicherheit" -> Schaltfläche "Bearbeiten", wählen Sie "Benutzer" aus und erteilen Sie die Berechtigung zur vollständigen Kontrolle.

Subodh Pradhan
quelle
1

In meinem Fall war die Auflösung mit bis SSMS einzuloggen Fenster Auth - Modus statt dem SQL - Benutzer, die Sysadmin - Rolle hat. Stellen Sie einfach sicher, dass der Benutzer, den Sie im Windows-Authentifizierungsmodus verwendet haben, über eine ordnungsgemäße Berechtigung verfügt (mein Fall war sysadmin). Ich vermute, dass der SQL-Benutzer keine ordnungsgemäße Berechtigung hat. (Dieses Problem tritt auf, wenn ich mdf und ldf von verschiedenen migriere / kopiere Maschine)

Ben F.
quelle
0

In unserem Fall keine Berechtigungen, es war die Version von SSMS!

(Es war 2012 vor Ort, wo wir den Fehler bekamen, aber es funktionierte, als wir SSMS 17+ von einer Remote-Box verwendeten)

Bigpa
quelle
-1

Ich habe auch dieses Problem bekommen. Ich habe meinen Kunden beim Neustart des SQL-Dienstes unterstützt und konnte den MDF wie gewohnt anhängen.

Chadwick Powell
quelle
-2

1) Öffnen Sie SQL Server Configuration Manager

2) Wählen Sie SQL Server Services (linker Bereich).

3) Doppelklicken Sie auf Ihren SqlServer (rechter Bereich)

4) Wählen Sie die Registerkarte Anmelden

5) Aktivieren Sie das integrierte Optionsfeld und ändern Sie das lokale System oder den Netzwerkdienst in der Combobox.

6) Klicken Sie auf OK.

7) Fügen Sie die MDF-Datei im SQL Server-Manager hinzu.

Ali Osman Yavuz
quelle
-2

Ihr SQL Server-Dienst wird wahrscheinlich unter dem Konto NT Service \ MSSQLServer ausgeführt . Durch Ändern des lokalen Systems erhält es Zugriff.

Am besten erstellen Sie einen Benutzer und erteilen diesem Benutzer die vollständigen Berechtigungen für den Ordner, in dem sich die Dateien befinden.

Kwiboo
quelle