Versuchen Sie nicht, wie in anderen Antworten hier beschrieben, die gesamte msdb-Datenbank zu löschen.
Möglicherweise möchten Sie bestimmte Verlaufsdatensätze löschen, die in der msdb-Datenbank gespeichert sind, und dann die Datenbank verkleinern, wenn Sie Speicherplatz sparen müssen. Beachten Sie, dass ich Ihnen nicht rate, dies zu tun, da die Datenbank mit Sicherheit erneut wachsen muss, es sei denn, Sie verwalten den von msdb verwendeten Speicherplatz kontinuierlich.
Sie können den Verlauf mithilfe der folgenden gespeicherten Prozeduren aus der msdb-Datenbank entfernen:
USE msdb;
EXEC dbo.sp_delete_backuphistory @oldest_date = '2018-01-01T00:00:00';
EXEC dbo.sp_purge_jobhistory @job_name = NULL
, @job_id = NULL
, @oldest_date = '2018-01-01T00:00:00';
Um msdb zu verkleinern, können Sie Folgendes verwenden:
USE msdb;
DBCC SHRINKFILE (MSDBData, 0);
DBCC SHRINKFILE (MSDBLog, 0);
Mit den obigen Vorgängen wird versucht, die MSDB-Daten und Protokolldateien auf die kleinstmögliche Größe zu verkleinern. Für die Protokolldatei wird die "kleinstmögliche Größe" durch die zuletzt zugewiesene virtuelle Protokolldatei begrenzt.
Zu Ihrer Information können Sie sehen, wie viel Speicherplatz in einer Datenbank belegt ist, indem Sie den folgenden Code ausführen:
USE <database_name>;
DECLARE @Schema sysname;
DECLARE @Table sysname;
DECLARE @DSName sysname;
--if you're interested in a subset of the objects in a database,
--specify that subset by modifying these variables. @DSName is
--the name of a filegroup, or possibly a partition.
SET @Schema = NULL;
SET @Table = NULL;
SET @DSName = NULL;
SELECT DataSpace = ds.name
, ObjectName = QUOTENAME(s.name) + '.' + QUOTENAME(o.name)
, IndexName = i.name
, IndexType = i.type_desc
--, total_pages
--, used_pages
--, data_pages
, TotalMB = CONVERT(INT, total_pages * 8192E0 / 1048576)
, UsedMB = CONVERT(INT, used_pages * 8192E0 / 1048576)
, DataMB = CONVERT(INT, data_pages * 8192E0 / 1048576)
, [rows]
--, i.*
FROM sys.allocation_units au
INNER JOIN sys.data_spaces ds ON au.data_space_id = ds.data_space_id
INNER JOIN sys.partitions p ON (au.container_id = p.hobt_id AND (au.type = 1 OR au.type = 3)) OR (au.container_id = p.partition_id AND au.type = 2)
INNER JOIN sys.indexes i ON p.index_id = i.index_id AND p.object_id = i.object_id
INNER JOIN sys.objects o ON p.object_id = o.object_id
INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE /*o.is_ms_shipped = 0
AND total_pages > 128
AND */(ds.name = @DSName OR @DSName IS NULL)
AND (s.name = @Schema OR @Schema IS NULL)
AND (o.name = @Table OR @Table IS NULL)
ORDER BY ds.name, o.name, i.name