답변:
문서 (강조 광산)에 msdb
명시된대로 데이터베이스를 삭제할 수 없습니다 .
제한 사항
msdb 데이터베이스에서 다음 작업을 수행 할 수 없습니다.
데이터 정렬 변경 기본 데이터 정렬은 서버 데이터 정렬입니다.
데이터베이스를 삭제합니다.
데이터베이스에서 게스트 사용자를 삭제합니다.
변경 데이터 캡처 활성화
데이터베이스 미러링에 참여
기본 파일 그룹, 기본 데이터 파일 또는 로그 파일을 제거합니다.
데이터베이스 또는 기본 파일 그룹 이름 바꾸기
데이터베이스를 오프라인으로 설정
기본 파일 그룹을 READ_ONLY로 설정
시스템 데이터베이스를 무단 변경하는 것은 일반적으로 좋은 생각이 아닙니다. 공간 문제가있는 곳을 확인하고 드라이브 확장을 고려해야합니다.
크기 문제가있는 위치를 확인하려면
msdb
이 쿼리를 사용하여 데이터베이스 내부의 테이블 및 인덱스 크기를 확인하십시오 .
USE msdb
GO
SELECT
t.NAME AS TableName,
s.Name AS SchemaName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,
CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
GROUP BY
t.Name, s.Name, p.Rows
ORDER BY
TotalSpaceMB DESC
sysjobhistory
공간에 팝업이 표시 되면 현재 작업 히스토리 보유 정책을 검토하고 작업 스케줄이 점검 중이며 필요한 것보다 자주 트리거되지 않는지 확인하십시오.
이 쿼리로 데이터베이스 데이터 및 로그 파일 크기를 확인하십시오.
;with fs
as
(
select database_id, type, size * 8.0 / 1024 size
from sys.master_files
)
select
name,
(select sum(size) from fs where type = 0 and fs.database_id = db.database_id) DataFileSizeInMB,
(select sum(size) from fs where type = 1 and fs.database_id = db.database_id) LogFileSizeInMB
from
sys.databases db
where
db.name = 'msdb'
로그 파일 크기가 크면 크기를 늘리고 문제를 해결 한 작업을 찾아야합니다. 파일을 줄이면 약간의 공간이 확보되지만 근본적인 문제는 해결되지 않습니다.
다른 답변에서 다루는 것처럼 전체 msdb 데이터베이스를 삭제하지 마십시오.
msdb 데이터베이스에 저장된 특정 기록 레코드를 삭제 한 다음 공간을 절약해야하는 경우 데이터베이스를 축소 할 수 있습니다. 주의, 내가있어 하지 데이터베이스가 가장 확실하게 당신이 자세히 지속적으로 MSDB에 의해 사용되는 공간을 관리하지 않는 한 다시 성장에 필요한 것이기 때문에 조언이 작업을 수행.
다음 저장 프로 시저를 사용하여 msdb 데이터베이스에서 기록을 제거 할 수 있습니다.
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';
msdb를 축소하려면 다음을 사용할 수 있습니다.
USE msdb;
DBCC SHRINKFILE (MSDBData, 0);
DBCC SHRINKFILE (MSDBLog, 0);
위의 작업은 msdb 데이터 및 로그 파일을 가능한 가장 작은 크기로 축소하려고 시도합니다. 로그 파일의 경우 "가장 작은 크기"는 가장 최근에 할당 된 가상 로그 파일에 의해 제한됩니다.
참고로 다음 코드를 실행하여 데이터베이스에서 사용중인 공간이 얼마인지 확인할 수 있습니다.
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
Microsoft 블로그 설명서에 따라 여기 MSDB
마이크로 소프트 SQL 서버의 중요한 시스템 데이터베이스입니다. msdb 데이터베이스는 주로 SQL Server 에이전트에서 SQL Server 작업, 메일, 서비스 브로커, 유지 관리 계획, 사용자 및 시스템 데이터베이스 백업 기록 등과 같은 시스템 활동을 저장하는 데 사용되며 데이터베이스 엔진 및 관리 스튜디오에서도 사용됩니다.
특정있다 DML
그리고 DDL
에서 수행 할 수없는 작업 MSDB
데이터베이스와 같은 :
We cannot drop this database
.off-line
.mirroring
에서 를 .rename
이 데이터베이스 이름을 사용할 수 없습니다 . 기타…