我正在尝试浏览多个.trc
文件,以了解过去几个月中谁登录过SQL Server。我没有设置跟踪,但我得到的是一堆.trc
文件,
例如:
C:\SQLAuditFile2012322132923.trc
,C:\SQLAuditFile201232131931.trc
等
我可以将这些文件加载到SQL事件探查器中并单独查看它们,但我希望能够将它们全部加载,以便我可以快速扫描它们以进行登录。使用过滤器,或者更好的是,将它们加载到SQL Server表中并查询它们。
我尝试使用以下方法将文件加载到表中:
use <databasename>
GO
SELECT * INTO trc_table
FROM ::fn_trace_gettable('C:\SQLAuditFile2012322132923.trc', 10);
GO
但是当我这样做时,我收到错误消息:
文件'C:\ SQLAuditFile2012322132923.trc'要么不存在,要么不是可识别的跟踪文件。或者打开文件时出错。
但是,我知道文件存在,而且我的名字正确。它们似乎也是可识别的,因为我可以将它们加载到SQL事件探查器中并查看它们。
任何人都知道我为什么会收到此错误消息,如果这不起作用,或许可以更轻松地分析这些多个.trc文件的另一种方式?
谢谢!
答案 0 :(得分:1)
您可能在C:的根目录上遇到权限问题。尝试将文件放入子文件夹,例如c:\ tracefiles \,并确保SQL Server帐户至少具有该文件夹的显式读取权限。
也可以尝试更简单,例如
SELECT * FROM ::fn_trace_gettable('C:\SQLAuditFile2012322132923.trc', default);
无论如何,除非您明确捕获成功的登录事件,否则我不知道这些跟踪文件将包含您正在寻找的信息......这不是SQL Server默认跟踪的内容。
答案 1 :(得分:0)
我有同样的问题,并且认为我要复制my solution from Database Administrators。
我在远程服务器上运行了一条SQL跟踪,并将跟踪文件传输到了 我的工作站上的本地目录,以便我将数据加载到我的表上 用于运行查询的本地SQL Server实例。
起初我认为错误可能是相关许可,但我裁定了这一点 因为我将.trc文件直接加载到SQL事件探查器中没有问题 或作为SSMS的文件。
在尝试了一些其他想法之后,我想到了更多并且意识到了
它毕竟是由于权限:SQL正在运行查询
服务器进程(sqlsrvr.exe)作为用户NT AUTHORITY\NETWORK SERVICE
-
不是我自己的Windows帐户。
解决方案是在存储跟踪文件的目录和跟踪中向NETWORK
SERVICE
授予读取和执行权限
文件本身。
您可以通过右键单击目录来执行此操作,转到安全性
选项卡,以用户身份添加NETWORK SERVICE
,然后选择Read & Execute
它的权限(这应该自动选择Read
和
List folder contents
)。这些文件权限(ACL)应该自动进行
传播到目录内容。
如果您更喜欢使用命令行,则可以授予必要的权限 目录 - 及其内容 - 运行以下命令:
icacls C:\Users\anthony\Documents\SQL_traces /t /grant "Network Service:(RX)"