首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查DB收缩是否成功&获取收缩事件的历史状态( Server)

问检查DB收缩是否成功&获取收缩事件的历史状态( Server)
EN

Stack Overflow用户
提问于 2022-11-03 11:11:15
回答 2查看 31关注 0票数 0

在Server中,需要缩小事务日志文件,因此执行DBCC (我们忘记在执行之前记录文件大小)。现在,我们如何检查文件收缩过程是否成功,特别是在收缩之前我们不知道初始文件大小。

清晰性:收缩过程目前是而不是运行,(这不是检查收缩的持续进度)。

还有一种方法可以获得收缩事件的历史数据吗?

蒂娅。

EN

回答 2

Stack Overflow用户

发布于 2022-11-03 12:09:19

您可以通过跟踪databases_data_file_size_changed事件来处理扩展事件。

遵循以下命令:

代码语言:javascript
复制
CREATE EVENT SESSION ES_TRACK_DB_FILE_CHANGE 
   ON SERVER 
   ADD EVENT sqlserver.database_file_size_change
      (ACTION(sqlserver.client_app_name,
              sqlserver.client_hostname,
              sqlserver.database_name,
              sqlserver.nt_username,
              sqlserver.server_principal_name,
              sqlserver.session_nt_username,
              sqlserver.sql_text,
              sqlserver.username))
   ADD TARGET package0.event_file
       (SET filename=N'C:\XE_EVENTS\TRACK_DB_FILE_CHANGE.xel')
   WITH (MAX_MEMORY=2048 KB,
         EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
         MAX_DISPATCH_LATENCY=60 SECONDS,
         STARTUP_STATE=ON)
GO
票数 2
EN

Stack Overflow用户

发布于 2022-11-03 12:14:04

关于(最近的)历史信息,可以参考默认的跟踪(背景in this answer):

代码语言:javascript
复制
DECLARE @path nvarchar(260);

SELECT
   @path = REVERSE(SUBSTRING(REVERSE([path]),
   CHARINDEX(CHAR(92), REVERSE([path])), 260)) + N'log.trc'
FROM    sys.traces
WHERE   is_default = 1;

SELECT TextData, [Database] = DB_NAME(DatabaseID), LoginName
FROM sys.fn_trace_gettable(@path, DEFAULT)
WHERE EventClass = 116
  AND UPPER(CONVERT(nvarchar(max), TextData)) LIKE N'%SHRINK%'; 
  -- could be SHRINKDATABASE

然而,这只是告诉你他们什么时候发生的,是谁干的。它不包括发生了多少收缩(如果有的话)或即使文件增长(是的,这是可能的,通过SHRINKFILE)。它甚至不允许您计算持续时间,这可能会帮助您推断收缩发生了多少,因为DBCC事件在开始时会被捕获。

为了持续地捕获这些信息,我想说的是,不要只运行DBCC SHRINKFILE(),而是将其封装在一个脚本中,在脚本中轮询文件大小前后的大小。您可以使用另一个答案中描述的扩展事件会话,但该会话看起来不像捕获大小。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74302163

复制
相关文章

相似问题

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