Ich versuche, eine Datenbankdatei zu verkleinern, aber es treten Fehler auf.
Die Verwendung der Datei-ID von sys.database_files
funktioniert, aber die Verwendung des logischen Dateinamens führt zu einem Fehler.
Der logische Dateiname ist in beiden Anweisungen gleich, sodass dies nicht das Problem sein kann. Auch die Datenbank, mit der eine Verbindung hergestellt wird, ist dieselbe. Folgendes funktioniert wie erwartet:
declare @fileId as int = (select file_id from sys.database_files where name = 'XY')
DBCC SHRINKFILE (@fileId, 0, TRUNCATEONLY)
Jedoch die folgenden ...
DBCC SHRINKFILE ('XY' , 0, TRUNCATEONLY)
... führt zu Fehler 8985:
Nachricht 8985, Ebene 16,
Status 1, Zeile 1 Die Datei 'XY' für die Datenbank '<meine Datenbank>' in sys.database_files konnte nicht gefunden werden. Die Datei existiert entweder nicht oder wurde gelöscht.
sql-server
sql-server-2008
shrink
system-tables
DotNetDeveloper
quelle
quelle
DBCC SHRINKFILE (XY, 0, TRUNCATEONLY)
DECLARE @filename SYSNAME; SELECT @filename = name FROM sys.database_files ...);
und dann@filename
im Argument verwendenDBCC
?Antworten:
Ich habe meine Antwort überarbeitet und Tests nicht als gültigen Grund dafür angezeigt, dass sie nicht funktionieren.
Ein paar Dinge zu überprüfen
Versuchen Sie, das Wiederherstellungsmodell wieder von vollständig auf einfach und wieder auf voll umzustellen. Beim Aktualisieren auf SP3 ist ein Fehler aufgetreten. Durch Ändern des Wiederherstellungsmodells wird die Protokollsequenznummer und aus irgendeinem Grund, der das Problem behebt, zumindest vorübergehend zurückgesetzt.
social.msdn Gespräch darüber
quelle
Nachdem wir uns die Antwort und den Link von @ Cougar9000 angesehen haben: Ja, wir haben kürzlich ein Upgrade auf SP3 durchgeführt! Ich habe dann das Wiederherstellungsmodell von einfach auf vollständig und zurück auf einfach umgestellt. Und dann die Aussage
funktioniert.
Weiß jemand, was hier los ist? Ist das ein Fehler?
quelle
Versuche zu rennen
indem Sie Ihre Datenbank verwenden und dann db master. Sie sehen die Protokoll- und Datenbankdateien Ihrer Datenbank nur, wenn Sie Ihre Datenbank verwenden.
Damit -
und
Beide funktionieren, solange Sie dieselbe Datenbank verwenden.
quelle
Sie müssen überprüfen, ob der logische Dateiname an beiden Stellen sys.master_files und sys.database_files identisch ist. In diesem Fall wird es anders sein. Ändern Sie dann einfach die Datenbank und geben Sie der Datei einen neuen logischen Namen, den Sie haben möchten. Beide Tabellen werden aktualisiert, und dann können Sie in der GUI oder unter Verwendung des logischen Dateinamens verkleinern. Ich hatte den gleichen Fehler in SQL Server 2012, dies hat das Problem behoben.
quelle
Ich habe alles versucht und hatte immer noch das Problem. Datenbank wurde aufgerufen
clientdatabase
und die Protokolldateiclientdatabase_log
.Ich konnte es beheben, indem ich den logischen Namen der Protokolldatei umbenannte:
Das erneute Ausführen des Skripts zum Verkleinern des Transaktionsprotokolls (mit dem neuen logischen Namen) hat jetzt funktioniert.
Ich habe hier darüber gebloggt:
Antwort auf "Datei 'xxx_Log' für Datenbank 'xxx' in sys.database_files konnte nicht gefunden werden"
quelle