2 回答
TA贡献1817条经验 获得超14个赞
以下 C# 代码将从指定文件夹中删除超过一个月的 .xel 文件。我猜您只想查看创建文件的日期,而不是时间,因此CreationTime.Date与 相比DateTime.Today,任何超过一个月的文件都将被删除。对命名空间的引用System.IO将是必要的。如果扩展事件当前处于活动状态,它将使用该文件并且无法删除该文件。您可以使用try...catch在您的代码中阻止或运行命令以在删除文件之前停止事件,然后在之后重新打开事件。采用启动和停止每个事件的方法将需要知道要使用的特定事件的名称,如下所示。如果使用此选项,您可以将这些作为 C# 代码中的 SQL 命令或作为 SQL 代理作业中的另一个步骤发送。STATET-SQL 示例停止扩展事件,并且可以通过更改为来重新启用它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();
}
}
TA贡献1809条经验 获得超8个赞
删除扩展事件会话不会删除文件目标文件。
您可以根据您的保留标准安排 SQL 代理作业以通过 PowerShell 脚本删除旧文件。请注意,用于运行作业的帐户当然需要删除权限,如果您在与 SQL Server 相同的帐户下运行 SQL Server 代理并为Run as
.
以下是 PowerShell 作业步骤类型的 PowerShell 命令示例,用于删除超过 30 天的文件:
Get-ChildItem -Path "D:\SqlTraceFiles" -Filter "*.xel" | where {$_.lastwritetime -lt (get-date).adddays(-30)} | Remove-Item -force
- 2 回答
- 0 关注
- 87 浏览
添加回答
举报