【问题标题】:MS SQL. How can I find time-point when log file was shrink?微软 SQL。如何找到日志文件收缩的时间点?
【发布时间】:2019-02-11 11:43:33
【问题描述】:

有人正在压缩生产中数据库的日志文件。时不时。经常缩水不好。

但是我如何找到日志文件收缩的时间和哪些 sql 用户的信息?

MS SQL 服务器上的所有内容都被记录下来,所以某处是我寻找的信息。某种系统视图或表格?

【问题讨论】:

标签: sql-server logfiles shrink


【解决方案1】:

日志文件缩小的时间和 SQL 用户是什么???

您应该能够从 "ldf" 文件上的 "last modified" 时间确定这一点(除非它在此期间自动增长 - 这似乎不太可能仍然只有 1MB)

数据库是否记录了正在发生的活动?是否打开了自动收缩数据库选项?

如果后台任务执行这些收缩操作,您将看不到 SQL 代理作业。非常不推荐此设置

日志文件已缩小。谁做的?

可以查看默认跟踪以确定收缩文件的执行者和时间。

要搜索默认跟踪,首先确定是否启用了默认跟踪。这可以通过运行sp_configure 来完成,如下所示:

SQL:

EXEC master.dbo.sp_configure 'show advanced options', 1; 
GO 
EXEC master.dbo.sp_configure 'default trace enabled';
GO

验证并运行默认跟踪后,通过运行函数 fn_trace_getinfo 确定跟踪文件正在写入的位置

SQL:

SELECT * 
FROM fn_trace_getinfo(default);
GO

要读取跟踪文件,请使用 fn_trace_gettable。这将从跟踪文件中提取所有数据并在 SSMS 中以表格格式显示,以便于查看

SQL:

SELECT 
    TextData,
    HostName,
    ApplicationName,
    LoginName, 
    StartTime  
FROM 
[fn_trace_gettable]('C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Log\log_75.trc', DEFAULT) 
WHERE TextData LIKE '%SHRINKFILE%'; ----- Location of default trace will be different ,so kindly check that accordingly

【讨论】:

  • 感谢您的良好回复。我的数据库没有设置自动收缩,也没有 sql 代理正在运行作业。但是有一个 Tivoli 代理在做我看不到的事情。我现在正在和那些控制 Tivoli 的人交谈……
【解决方案2】:

转到服务器 > 管理 > 扩展事件。然后创建新会话并使用事件库:

然后就可以查看实时数据了:

或者分析过去的数据:

希望这会有所帮助。如果您有兴趣直接使用 t-sql 读取扩展日志文件,我也可以提供帮助;)

【讨论】:

  • 正如 Mitch 所展示的,不需要运行额外的扩展会话。由于服务器具有默认的扩展事件会话,其中包含您需要的信息(请按照 Mitch 的链接)
【解决方案3】:

如果您右键单击您的数据库,转到报告并选择“磁盘使用情况”(从内存中,我没有坐在 PC 前查看),它将显示事件。

但是,信息来自默认跟踪,因此只会显示最近的事件。我相信默认跟踪只有 5 个 20MB 文件。

如果它比这更罕见,您将不得不设置跟踪或使用分析器(跟踪在资源上比分析器更轻)并查找日志文件自动收缩事件

【讨论】:

    猜你喜欢
    • 2011-01-12
    • 1970-01-01
    • 2020-02-20
    • 2019-06-21
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    相关资源
    最近更新 更多