首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从sys.server_file_audits中选择返回错误的文件名

从sys.server_file_audits中选择返回错误的文件名
EN

Database Administration用户
提问于 2017-08-01 09:09:37
回答 1查看 1.7K关注 0票数 2

我启动了对Server 2016站点的审计。

版本I SP1 CU3,企业版。

使用此查询:

代码语言:javascript
复制
SELECT * FROM sys.server_file_audits

我得到log_file_path: O:\auditfiles\

在logins_3D6DA4C0-B388-4175-88A5-D2820733CFB7.sqlaudit :log_file_name中

但当我问:

代码语言:javascript
复制
SELECT * FROM sys.fn_get_audit_file ('O:\auditfiles\logins_3D6DA4C0-B388-4175-88A5-D2820733CFB7.sqlaudit',default,default);

它什么也不回。

在文件系统上检查文件的真实名称是:

logins_3D6DA4C0-B388-4175-88A5-D2820733CFB7_0_131451051332700000.sqlaudit

其中,文件名部件_0_131451051332700000不能从sys架构的查询中检索。

当我用正确的文件名进行选择时,就会得到结果。

我需要自动化这一点,以便从外部查询收集数据。

如何检索正确的文件名?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2017-08-01 11:18:53

查看sys.server_文件_审计的文档,log_file_name是(突出显示我的)

创建审核DDL中提供的日志文件的基本名称。将增量数字作为后缀添加到base_log_name文件中,以创建日志文件名。

根据创建sqlaudit文件的速度,很难确定“当前”审计文件是什么。

如果您希望快速地一次性选择审计信息,可以使用“*.sqlaudit”的通配符来读取目录中的所有文件。

代码语言:javascript
复制
SELECT * FROM sys.fn_get_audit_file ('O:\auditfiles\logins*.sqlaudit',default,default);

读取当前正在写入的sqlaudit文件带来了挑战,因为行可以在您刚刚读取之后立即写入该活动文件,因此如果不继续选择它们,您可能会错过未来的审计行。此外,请注意,审计文件将继续写入您的目录路径,并且通配符选择将运行越来越长的时间,除非您实现了sqlaudit文件的某种修剪过程。

如果您的目的是跟踪和保存这些审计信息,我建议实现一个类似于我给出的“如何从服务器审核文件将数据加载到表中?”的答案的解决方案

它使用执行存储过程的Sql代理作业来处理sqlaudit文件。总之,存储过程:

  • 使用Powershell将任何审计文件(当前未写入)移动到暂存文件共享中。powershell命令使用-ErrorAction SilentlyContinue参数,该参数允许命令“跳过”当前在复制到暂存文件共享时写入的文件。最终,“锁定”文件将变得可用,以便在未来的时间间隔上进行复制。
  • 现在我可以从暂存文件中读取可用的SQLAudit文件了,我们可以使用sys.fn_get_audit_file来使用通配符来处理所有来自暂存文件共享的SQLAudit文件。
  • 在使用了暂存文件共享中的文件之后,我使用Powershell从暂存文件中删除这些文件。
票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/182336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档