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)
事实
fn_tracegettable
在我的本地机器上运行。我遇到过同样的问题。我在远程服务器上运行 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
其权限(这也应自动选择Read
和
List folder contents
)。这些文件权限 (ACL) 应自动传播到目录内容(如果没有,请打开文件夹的属性并导航到安全性?高级?权限选项卡和启用继承)。
如果您更喜欢使用命令行,则可以通过运行以下命令授予目录及其内容所需的权限:
icacls C:\Users\anthony\Documents\SQL_traces /t /grant "Network Service:(RX)"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9744 次 |
最近记录: |