猿问

如何删除 SQL Server 扩展事件事件文件 (.xel)?

我们发现,随着时间的推移,很多 .xel 文件都存储在 sql server 中,它们将不必要地填满驱动器上的空间(一段时间后我们不需要它们)。此外,相关的扩展事件会话可能未结束。

我们有一个每周触发的清理作业,它会清理未使用的文件。

有没有办法通过 c# 代码或 SQL 删除这些文件?

如何找到我感兴趣的 .xel(使用 c# 或 sql)文件(与某个会话相关)?

如果我删除 SQL 扩展事件会话,它会清除其 .xel 日志吗?

任何建议将不胜感激。


慕姐8265434
浏览 88回答 2
2回答

大话西游666

以下 C# 代码将从指定文件夹中删除超过一个月的 .xel 文件。我猜您只想查看创建文件的日期,而不是时间,因此CreationTime.Date与 相比DateTime.Today,任何超过一个月的文件都将被删除。对命名空间的引用System.IO将是必要的。如果扩展事件当前处于活动状态,它将使用该文件并且无法删除该文件。您可以使用try...catch在您的代码中阻止或运行命令以在删除文件之前停止事件,然后在之后重新打开事件。采用启动和停止每个事件的方法将需要知道要使用的特定事件的名称,如下所示。如果使用此选项,您可以将这些作为 C# 代码中的 SQL 命令或作为 SQL 代理作业中的另一个步骤发送。STATET-SQL 示例停止扩展事件,并且可以通过更改为来重新启用它START。停止事件语句示例:ALTER EVENT SESSION YourExtendedEvent ON SERVER&nbsp;STATE = STOP删除旧的扩展事件文件:&nbsp; &nbsp; &nbsp; &nbsp; string directory = @"C:\YourFilePath\";&nbsp; &nbsp; &nbsp; &nbsp; DirectoryInfo di = new DirectoryInfo(directory);&nbsp; &nbsp; &nbsp; &nbsp; foreach (FileInfo fi in di.EnumerateFiles())&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (fi.Extension == ".xel" && fi.CreationTime.Date < DateTime.Today.AddMonths(-1))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fi.Delete();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }

海绵宝宝撒

删除扩展事件会话不会删除文件目标文件。您可以根据您的保留标准安排 SQL 代理作业以通过 PowerShell 脚本删除旧文件。请注意,用于运行作业的帐户当然需要删除权限,如果您在与 SQL Server 相同的帐户下运行 SQL Server 代理并为Run as.以下是 PowerShell 作业步骤类型的 PowerShell 命令示例,用于删除超过 30 天的文件:Get-ChildItem&nbsp;-Path&nbsp;"D:\SqlTraceFiles"&nbsp;-Filter&nbsp;"*.xel"&nbsp;|&nbsp;where&nbsp;{$_.lastwritetime&nbsp;-lt&nbsp;(get-date).adddays(-30)}&nbsp;|&nbsp;Remove-Item&nbsp;-force
随时随地看视频慕课网APP
我要回答