it-swarm.com.de

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

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 Datei MDF) 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.

8
MxLDevs

Dies ist kein Zugriffsproblem. Das Problem ist, dass Sie die Datenbank an eine höhere Version von SQL Server anhängen als an die Instanz, an die der .mdf Ursprünglich angehängt war 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 READ_ONLY Befindet (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 anzuhängen gemäß der Technet-Dokumentation =. Wenn Sie unter die Klausel FOR ATTACH Schauen, wird Folgendes explizit beschrieben:

... 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 Klausel FOR ATTACH Bereitstellen.

Sie benötigen das zugehörige .ldf Für die Datenbank. Ich würde mich an denjenigen wenden, der die Datenbank bereitgestellt hat, und ihn bitten, sowohl die Dateien .mdf Als auch .ldf Anzugeben. 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 Status READ_ONLY 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 einige dieser Probleme einfacher umgehen, wenn Sie eine Datenbankwiederherstellung anstelle eines Anhangs durchführen.

8
Mike Fal

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.

25
Data Juggler
  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 übernehmen Sie die Änderungen auf die folgenden Ordner bis zu den Datenbankdateien.
  7. Versuchen Sie, die Datei ".mdf" anzuhängen

Klicken Sie mit der rechten Maustaste auf .mdf und .ldf Dateien nacheinander 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 Vollzugriffsberechtigung.

1
Subodh Pradhan

In meinem Fall bestand die Lösung darin, sich mit Windows-Authentifizierungsmodus bei SSMS anzumelden, anstatt mit dem SQL-Benutzer, der die Systemadministratorrolle 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)

1
Ben F

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)

0
Bigpa