首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除MSDB可以吗?

删除MSDB可以吗?
EN

Database Administration用户
提问于 2018-07-18 11:26:56
回答 2查看 2.9K关注 0票数 9

我不是一个DBA,我只是在谷歌上搜索了MSDB --基本上是它的作业和历史SQL代理数据库,现在我的云服务器空间已经用完了,我有一年的MSDB年2017,可以删除这个吗?还是保留它作为备份呢?

我的MSDB在250 in的硬盘中是93 in的。

EN

回答 2

Database Administration用户

发布于 2018-07-18 12:29:10

正如这里的其他答案所述,不要尝试删除整个msdb数据库。

如果需要节省空间,您可能希望删除存储在msdb数据库中的某些历史记录,然后收缩数据库。请注意,我并不建议您这样做,因为除非您不断地密切管理msdb使用的空间,否则数据库肯定需要再次增长。

可以使用以下存储过程从msdb数据库中删除历史记录:

代码语言:javascript
复制
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,可以使用以下命令:

代码语言:javascript
复制
USE msdb;

DBCC SHRINKFILE (MSDBData, 0);
DBCC SHRINKFILE (MSDBLog, 0);

上述操作将尝试将msdb数据和日志文件缩小到尽可能小的大小。对于日志文件,“最小大小”受最近分配的虚拟日志文件的限制。

FYI,您可以通过运行以下代码来查看数据库中占用了多少空间:

代码语言:javascript
复制
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
票数 5
EN

Database Administration用户

发布于 2018-07-18 11:43:16

根据microsoft文档,这里 MSDB是Microsoft中一个重要的系统数据库。msdb数据库主要由Server代理存储server作业、邮件、服务代理、维护计划、用户和系统数据库备份历史等系统活动,数据库引擎和管理工作室也使用etc..It。

某些DMLDDL操作不能在MSDB数据库中执行,例如:

  1. 我们不能从这个数据库中删除表。
  2. We cannot drop this database
  3. 我们不能把这个系统数据库变成off-line
  4. 我们不能在这个数据库上做数据库mirroring
  5. 我们不能rename这个数据库名。etc…
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/212533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档