标签:c sql-server
我们发现,随着时间的流逝,大量.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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。