SQL Server in einem Zustand der Verwirrung: Existiert die Datenbank oder nicht?

8

Ich habe ein wirklich seltsames, nerviges Problem. Irgendwie ist die Instanz von SQL Server 2008 R2, die auf unserem Server ausgeführt wird, etwas beschädigt.

Zuerst haben wir festgestellt, dass die Datenbank, die wir gestern erstellt haben, fehlt. Also sahen wir uns um und stellten fest, dass es immer noch da war, aber losgelöst. Also haben wir versucht, das MDF anzuhängen, aber eine Nachricht erhalten, die so etwas wie war The file is currently in use.

Ich fand das seltsam und startete SQL Server neu. Das Gleiche ... okay, Zeit für drastische Maßnahmen ... also habe ich den Dienst gestoppt, das MDF komprimiert, den Dienst gestartet, entpackt und dann versucht, ihn wiederherzustellen. Die obige Nachricht war weg, aber dann bekam ich:

Es kann keine Datenbank mit demselben Namen wie eine vorhandene Datenbank angehängt werden

Autsch. Natürlich wird es nicht im Datenbank-Explorer angezeigt, also keine Ahnung, was los ist ... letzter Ausweg:

DROP DATABASE [DatabaseName]

Natürlich hat das nicht funktioniert. Das sagt mir, dass die Datenbank nicht existiert. Also, ich stecke fest ... an einem Punkt glaubt SQL Server, dass die Datenbank existiert und an einem anderen Punkt denkt, dass die Datenbank nicht existiert. Offensichtlich ist sie in einem Zustand der Verwirrung.

Hat das schon mal jemand gesehen? Haben Sie Ideen, wie Sie das Problem beheben können?

Matt
quelle
Die physischen Dateien sind also nicht mehr da, oder? Sehen Sie Ihre Datenbank immer noch in sys.databases? ZB SELECT * FROM sys.databaseslistet Ihre Datenbank noch auf?
marc_s
@ Josien thansk für den Tipp .. Ich habe es auch dort
Matt
@marc_s Ich habe das jetzt versucht, aber es wird nicht angezeigt, wenn ich diese Abfrage ausführe
Matt
Was SELECT name, user_access_desc, state_desc FROM sys.databasesoffenbart?
Mark Storey-Smith
Warum um alles in der Welt sollte jemand diesen Beitrag ablehnen? Könnte jemand bitte näher darauf eingehen? Ernsthaft ...
Matt

Antworten:

5

Richtig .. Ich habe es herausgefunden .. Einige Clowns hier (denen es nicht gefällt) haben die Datenbank umbenannt, sodass sich ihr Name in SSMS von den Namen der MDF- und LDF-Dateien unterscheidet. Und nicht nur ein bisschen anders. . völlig anders. LOL. Trotzdem vielen Dank für Ihre hilfreichen Vorschläge.

Matt
quelle
4
Um auf der sicheren Seite zu sein, verweigern Sie allen außer 'sa' die ALTER-Berechtigung für die Datenbank, ändern Sie das 'sa'-Passwort und seien Sie wählerisch, wenn Sie das Passwort an' Clowns 'weitergeben
Carol Baker West
4

Wenn Sie keine Berechtigung zum Anzeigen der Datenbank hätten, wären dies genau die Symptome. Die Datenbank wird in Ihren Ansichten nicht angezeigt. Sind Sie sicher, dass Sie nicht nur die Datei (en) einer Datenbank gezappt haben, auf die Sie keinen Zugriff hatten? Arbeiten Sie als Systemadministrator?

Aktualisieren


War die Datenbank getrennt oder offline ? Wenn Sie sagen, So, we looked around and found that it was still there, but detachedwovon genau sprechen Sie? Wo hast du gesucht, was hast du gefunden? Es ist nicht trivial zu identifizieren, dass eine Datenbank "getrennt" wurde (im Gegensatz zum Beispiel zum Löschen).

Remus Rusanu
quelle
Ich bin in der Tat ein Systemadministrator
Matt
2
Da Sie es erwähnt, habe ich ein Skript auf meinem Blog , die Dateien in den Standarddaten / log Ordner ungebunden Datenbank erfasst: voluntarydba.com/post/2012/08/21/...
Jon Seigel
Danke, ich werde es später versuchen, wenn ich im Büro bin.
Matt
@ JonSeigel, nett, aber leider hat das nichts für mich ergeben. Ich habe auch noch etwas anderes ausprobiert. Starten Sie den Server neu und erstellen Sie dann eine neue Datenbank mit diesem Namen. Ich würde es nicht tun lassen. Sehr ärgerlich. Ich denke, ich muss diese Situation ignorieren und eine neue Datenbank mit einem anderen Namen erstellen.
Matt
3

Fragen Sie sys.databases ab. Möglicherweise wurde die Datenbank mit einem Leerzeichen am Ende ihres Namens erstellt. Führen Sie den folgenden Code aus und beachten Sie, dass Sie nur eine der Datenbanken erstellen können. Es spielt keine Rolle, welche Sie zuerst erstellen. Sie können nur diese erstellen.

create database [test]
create database [test ]
mrdenny
quelle
Ich denke, das ist ein Fehler, oder?
AK
Wahrscheinlich nicht. Ich gehe davon aus, dass SQL eine TRIM für den Datenbanknamen durchführt, wenn überprüft wird, ob der Wert vorhanden ist. Das müsste beabsichtigt sein, also ist es wahrscheinlich beabsichtigt.
Mrdenny
@mrdenny, danke, aber keine Hilfe da .. die Datenbank wird überhaupt nicht angezeigt, mit irgendwelchen Namensänderungen .. und es gibt nur eine Handvoll Datenbanken auf diesem Server, also würde ich sie sofort erkennen, wenn sie da wäre . Trotzdem danke
Matt
0

Führen Sie 'DBCC CHECKDB' auf Master, MSDB und der Datenbank selbst aus, um zu sehen, was darin steht. Möglicherweise muss das System in den Einzelbenutzermodus versetzt werden, damit dbcc im Reparaturmodus mit Datenverlust ausgeführt wird. Oder stellen Sie einfach Ihre Backups von Master und MSDB nach Bedarf wieder her.

Ian P.
quelle
Das auf dem Master und der MSDB auszuführen hat nicht geholfen und ich kann es nicht auf der Datenbank selbst versuchen, weil ich die Datenbank im Management Studio überhaupt nicht sehen kann ...
Matt
0

Für mich wurde dies durch das Aktualisieren von Datenbanken gelöst. Ich habe eine erfolglose Wiederherstellung durchgeführt und db gesehen, die nicht mit derselben Fehlermeldung gelöscht werden konnte: "Die Datenbank ist auf dem Server nicht vorhanden."

Raduga
quelle
2
Möglicherweise möchten Sie näher erläutern, wie genau Sie "Datenbanken aktualisieren".
Mustaccio
0

Ich hatte das gleiche Problem mit SQL Server 2008r2.

Ich habe versucht, eine Datenbank zu duplizieren (Versionierung foo) und habe den SQL Server verwirrt. SQL Server Management Studio glaubte, dass die Datenbank vorhanden war (MDF und LDF), aber die Master-Datenbank glaubte nicht, dass die Datenbank vorhanden war (nicht in sys.databases angezeigt).

Der Trick bestand darin, die MDF- und LDF-Dateien umzubenennen, dann die Datenbank aus SQL zu erstellen, die Datenbank zu create database [db name here]löschen und schließlich die MDF- und LDF-Dateien von zuvor anzuhängen.

John Pycroft
quelle