pgmende
Goto Top

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

Content-Key: 167524

Url: https://administrator.de/contentid/167524

Printed on: April 19, 2024 at 04:04 o'clock

Member: AndreasHoster
AndreasHoster Jun 06, 2011 at 10:19:46 (UTC)
Goto Top
Meine Hilfe zu Transact SQL sagt:
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:
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.
Member: pgmende
pgmende Jun 06, 2011 at 11:02:38 (UTC)
Goto Top
Hallo Andreas,

das mit dem letzten Block klingt logisch - das habe ich wohl übersehen.

Besten Dank für Deine Antwort, so hat es nun funktioniert.
Ist nur blöd, daß der Wartungsplan-Task automatisch mit "TRUNCATEONLY" arbeitet. Ich habe das nun als "T-SQL-Anweisungstask" geplant und das Script entsprechend angepasst. Ein erster Testlauf war erfolgreich.

Gruß,
Andreas