0

我正在尝试查看多个.trc文件以找出过去几个月中谁登录了 SQL Server。我没有设置跟踪,但我得到的是一堆.trc文件,

前任:

  • C:\SQLAuditFile2012322132923.trc,
  • C:\SQLAuditFile201232131931.trc

等等

我可以将这些文件加载​​到 SQL Profiler 中并单独查看它们,但我希望有一种方法可以将它们全部加载,以便快速扫描它们以查找登录信息。使用过滤器,或者更好的是,将它们加载到 SQL Server 表中并查询它们。

我尝试使用以下方法将文件加载到表中:

 use <databasename>
 GO
 SELECT * INTO trc_table
 FROM ::fn_trace_gettable('C:\SQLAuditFile2012322132923.trc', 10);
 GO

但是当我这样做时,我收到错误消息:

文件“C:\SQLAuditFile2012322132923.trc”不存在或不是可识别的跟踪文件。或者打开文件时出错。

但是,我知道该文件存在,并且我有正确的名称。而且它们似乎是可识别的,因为我可以将它们加载到 SQL Profiler 中并很好地查看它们。

任何人都知道为什么我会收到此错误消息,如果这不起作用,也许是更容易分析这些多个 .trc 文件的另一种方法?

谢谢!

4

2 回答 2

1

您可能在 C: 的根目录上遇到权限问题。尝试将文件放入子文件夹,例如 c:\tracefiles\,并确保 SQL Server 帐户至少对该文件夹具有明确的读取权限。

也尝试开始更简单,例如

SELECT * FROM ::fn_trace_gettable('C:\SQLAuditFile2012322132923.trc', default);

无论如何,除非您明确捕获成功的登录事件,否则我不知道这些跟踪文件将包含您要查找的信息……这不是 SQL Server 默认跟踪的内容。

于 2012-04-18T17:02:40.987 回答
0

我遇到了几乎相同的问题,并认为我会从 Database Administrators 复制我的解决方案

我在远程服务器上运行 SQL 跟踪并将跟踪文件传输到工作站上的本地目录,以便将数据加载到本地 SQL Server 实例上的表中以运行查询。

起初我认为错误可能与权限相关,但我排除了这一点,因为我没有问题将 .trc 文件直接加载到 SQL Profiler 中或作为文件加载到 SSMS 中。

在尝试了其他一些想法之后,我想了更多,意识到这毕竟是由于权限问题:查询是由 SQL Server 进程(sqlsrvr.exe)作为用户运行的,而NT AUTHORITY\NETWORK SERVICE不是我自己的 Windows 帐户。

解决方案是授予对存储跟踪文件的目录和跟踪文件本身的读取执行权限。NETWORK SERVICE

您可以通过右键单击目录来执行此操作,转到“安全” 选项卡,添加NETWORK SERVICE为用户,然后选择Read & Execute其权限(这也应该自动选择ReadList folder contents)。这些文件权限 (ACL) 应自动传播到目录内容。

如果您更喜欢使用命令行,您可以通过运行以下命令授予目录及其内容的必要权限:

icacls C:\Users\anthony\Documents\SQL_traces /t /grant "Network Service:(RX)"
于 2014-07-15T12:51:02.433 回答