Seperti yang tercakup dalam jawaban lain di sini, jangan mencoba menghapus seluruh database msdb.
Anda mungkin ingin menghapus catatan riwayat tertentu yang disimpan dalam database msdb, dan kemudian mengecilkan database jika Anda perlu menghemat ruang. Sadarilah, saya tidak menyarankan Anda melakukan ini karena database pasti akan perlu tumbuh lagi kecuali Anda mengelola ruang yang digunakan oleh msdb secara berkelanjutan.
Anda dapat menghapus histori dari database msdb menggunakan prosedur tersimpan ini:
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';
Untuk mengecilkan msdb, Anda dapat menggunakan ini:
USE msdb;
DBCC SHRINKFILE (MSDBData, 0);
DBCC SHRINKFILE (MSDBLog, 0);
Operasi di atas akan berusaha untuk mengecilkan data msdb dan mencatat file ke ukuran sekecil mungkin. Untuk file log, "ukuran terkecil mungkin" dibatasi oleh file log virtual yang terakhir dialokasikan.
FYI, Anda dapat melihat berapa banyak ruang yang dikonsumsi dalam database dengan menjalankan kode berikut:
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