Datenbank verkleinern Task auf MS-SQL-Server 2008 meldet Erfolg - tut aber nichts
Der Wartungsplan zum Verkleinern zeigt keine Auswirkungen
Hallo!
Wir haben hier einen MS SQL Server 2008 R2 auf Windows Server 2008 R2.
Auf dem Server laufen diverse Datenbanken und ich habe für diese u.a. einen Wartungsplan erstellt, der diese Datenbanken verkleinert.
Der Task startet zwar automatisch und meldet auch Erfolg - an der Größe der DB ändert er jedoch nichts.
Eine DB hat z.B. 2.500 GB und davon 700 MB freien Speicherplatz lt. Eigenschaften. Wenn ich jetzt im Task als Grenze 50 MB (Datenbank verkleinern, wenn sie folgende Größe überschreitet) und als Menge der freien Speicherplatzes nach dem Verkleinern auf 10% setze müsste er doch eigentlich arbeiten.
Stattdessen startet der Task, läuft ein paar Sekunden, und meldet danach "Datenbank verkleinern (Erfolg)".
An der Größe der DB hat sich nichts geändert.
Das zugehörige T-SQL-Script sieht so aus:
USE [DBTEST]
GO
DBCC SHRINKDATABASE(N'DBTEST', 8, TRUNCATEONLY)
Stimmt da etwas nicht?
Muß ich damit rechnen, daß andere Tasks (Statistiken aktualisieren, Indizes neu erstellen usw.) ebenso "zuverlässig" laufen?
Die sind auch alle als erfolgreich gekennzeichnet...
Gruß,
Andreas
Hallo!
Wir haben hier einen MS SQL Server 2008 R2 auf Windows Server 2008 R2.
Auf dem Server laufen diverse Datenbanken und ich habe für diese u.a. einen Wartungsplan erstellt, der diese Datenbanken verkleinert.
Der Task startet zwar automatisch und meldet auch Erfolg - an der Größe der DB ändert er jedoch nichts.
Eine DB hat z.B. 2.500 GB und davon 700 MB freien Speicherplatz lt. Eigenschaften. Wenn ich jetzt im Task als Grenze 50 MB (Datenbank verkleinern, wenn sie folgende Größe überschreitet) und als Menge der freien Speicherplatzes nach dem Verkleinern auf 10% setze müsste er doch eigentlich arbeiten.
Stattdessen startet der Task, läuft ein paar Sekunden, und meldet danach "Datenbank verkleinern (Erfolg)".
An der Größe der DB hat sich nichts geändert.
Das zugehörige T-SQL-Script sieht so aus:
USE [DBTEST]
GO
DBCC SHRINKDATABASE(N'DBTEST', 8, TRUNCATEONLY)
Stimmt da etwas nicht?
Muß ich damit rechnen, daß andere Tasks (Statistiken aktualisieren, Indizes neu erstellen usw.) ebenso "zuverlässig" laufen?
Die sind auch alle als erfolgreich gekennzeichnet...
Gruß,
Andreas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 167524
Url: https://administrator.de/contentid/167524
Ausgedruckt am: 16.12.2024 um 21:12 Uhr
2 Kommentare
Neuester Kommentar
Meine Hilfe zu Transact SQL sagt:
Verkleinert auf den letzten reservierten Block.
Wenn der in der Datei ganz hinten ist, dann wird nichts verkleinert.
Versuchs mal ohne TRUNCATEONLY, allerdings wird es bei 2.500 GB (falls das tatsächlich 2,5TB sein sollen) etwas dauern, weil die Daten dabei umkopiert werden. Auch bei nur 2,5GB wirds ein paar Minuten bis Stunden dauern (kommt auf die I/O Leistung der Platten an).
Desweiteren wäre interessant, welche Dateien so groß werden. Die Datenbankdateien (.mdf und .ndf) oder die Log-Dateien (.ldf)
Wenn es die Log-Dateien sind, würde ich empfehlen, mal etwas Literatur zu Transaktionsprotokollen und Sicherung zu lesen.
TRUNCATEONLY
Bewirkt, dass aller ungenutzter Speicherplatz in der Datendatei an das Betriebssystem freigegeben wird, und verkleinert die Datei auf den letzten reservierten Block. Damit wird die >Dateigröße reduziert, ohne Daten zu verschieben. Es wird nicht versucht, Zeilen auf nicht reservierte Seiten zu verschieben. Bei Verwendung von TRUNCATEONLY wird target_percent >ignoriert.
Wichtig ist:Bewirkt, dass aller ungenutzter Speicherplatz in der Datendatei an das Betriebssystem freigegeben wird, und verkleinert die Datei auf den letzten reservierten Block. Damit wird die >Dateigröße reduziert, ohne Daten zu verschieben. Es wird nicht versucht, Zeilen auf nicht reservierte Seiten zu verschieben. Bei Verwendung von TRUNCATEONLY wird target_percent >ignoriert.
Verkleinert auf den letzten reservierten Block.
Wenn der in der Datei ganz hinten ist, dann wird nichts verkleinert.
Versuchs mal ohne TRUNCATEONLY, allerdings wird es bei 2.500 GB (falls das tatsächlich 2,5TB sein sollen) etwas dauern, weil die Daten dabei umkopiert werden. Auch bei nur 2,5GB wirds ein paar Minuten bis Stunden dauern (kommt auf die I/O Leistung der Platten an).
Desweiteren wäre interessant, welche Dateien so groß werden. Die Datenbankdateien (.mdf und .ndf) oder die Log-Dateien (.ldf)
Wenn es die Log-Dateien sind, würde ich empfehlen, mal etwas Literatur zu Transaktionsprotokollen und Sicherung zu lesen.