无法打开 SQL Server 探查器文件

Alb*_*aro 5 sql-server profiler

设想

在调试失败的事务时,我要求 DBA 在 SQL Server 上运行跟踪。最后他给我发了一个.trc文件。

问题

我使用该fn_tracegettable()函数来访问跟踪:

select * from sys.fn_trace_gettable('C:\path\to\myTraceFile.trc', default)
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

  Msg 567, Level 16, State 7, Line 1
  File 'C:\path\to\myTraceFile.trc' either does not exist or is not a recognizable trace file. Or there was an error opening the file.
Run Code Online (Sandbox Code Playgroud)

事实

  • 我正在执行的 SQL Management Studiofn_tracegettable在我的本地机器上运行。
  • .trc 文件在我的本地机器中。
  • 服务器和本地计算机都运行 SQL Server 2008 R2。

Ant*_*gan 5

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

SELECT * INTO ProfileTracesTable
FROM ::fn_trace_gettable('C:\Users\anthony\Documents\SQL_traces\first.trc', default)
Run Code Online (Sandbox Code Playgroud)

但是,每次尝试时,都会出现以下错误:

文件“C:\Users\anthony\Documents\SQL_traces\first.trc”要么不存在,要么不是可识别的跟踪文件。或者打开文件时出错。

起初我认为错误可能与权限相关,但我排除了这一点,因为我将 .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)"
Run Code Online (Sandbox Code Playgroud)


小智 1

为什么要在 SQL Management Studio 中打开该文件?请改用SQL Server Profiler 工具打开 .trc 文件。