删除SQL Server扩展事件事件文件(.xel)?
作者:互联网
我们发现,随着时间的流逝,大量.xel文件存储在sql服务器中,它将不必要地填充驱动器上的空间(一段时间后我们将不再需要它们).同样,关联的扩展事件会话可能不会结束.
我们有一个每周触发的清理作业,它清理未使用的文件.
有没有办法通过c#代码或SQL删除这些文件?
如何找到我感兴趣的.xel(使用c#或sql)文件(与特定会话有关)?
如果删除SQL扩展事件会话,是否会清除其.xel日志?
任何建议将不胜感激.
解决方法:
以下C#代码将从指定的文件夹中删除一个月以上的.xel文件.我猜您只想查看文件的创建日期,而不是时间,因此将CreationTime.Date与DateTime.Today进行比较,并且删除所有早于一个月的文件.必须引用System.IO命名空间.如果扩展事件当前处于活动状态,它将使用该文件,并且该文件将无法删除.您可以使用代码中的try … catch块来处理此问题,也可以运行命令以停止事件,然后再删除文件,然后再重新打开事件.采用开始和停止每个事件的方法将需要知道要使用的特定事件的名称,如下所述.如果使用此选项,则可以将这些作为C#代码中的SQL命令发送,也可以作为SQL代理作业中的另一步发送. T-SQL示例停止扩展事件,并且可以通过将STATE更改为START来重新启用它.
停止事件语句示例:
ALTER EVENT SESSION YourExtendedEvent ON SERVER
STATE = STOP
删除旧的扩展事件文件:
string directory = @"C:\YourFilePath\";
DirectoryInfo di = new DirectoryInfo(directory);
foreach (FileInfo fi in di.EnumerateFiles())
{
if (fi.Extension == ".xel" && fi.CreationTime.Date < DateTime.Today.AddMonths(-1))
{
fi.Delete();
}
}
标签:c,sql-server 来源: https://codeday.me/bug/20191211/2107030.html