如何使用 fn_xe_file_target_read_file 通过网络读取文件

Bra*_*ure 6 sql-server extended-events sql-server-2014

我们正在运行 Microsoft SQL Server 2014 和 SQL Server Analysis Services 2014。

我正在尝试建立一个系统,为我们提供有关 SSAS OLAP 多维数据集采用和使用的分析。我已经设置了一个包含我需要跟踪的事件的扩展事件跟踪,它正在服务器上创建一堆 .xel 文件,就像它应该的那样。

我现在遇到的问题是我们在该服务器上没有 SQL 实例,因此我需要将文件加载到不同服务器上的数据库中。如果将文件复制到 SQL 服务器并sys.fn_xe_file_target_read_file使用本地路径调用该函数,则可以加载这些文件,但是当我尝试使用 UNC 路径读取文件时出现错误。

日志文件名“\\SERVERNAME\f$\ExtendedEvents\MyTrace_0_12345.xel”无效。验证该文件是否存在以及 SQL Server 服务帐户是否有权访问它。

我在 SSAS 服务器上配置了文件夹安全性,以允许运行 SQL 服务器的域帐户访问该文件夹。所以这应该不是问题。我假设这个函数不喜欢 UNC 路径,所以我的下一步是在 SQL 服务器机器上映射一个网络驱动器,以便我可以将本地路径传递给这个函数。

在向我们的 DBA 提出请求之前,我想先了解一下我对 UNC 路径的假设是否正确,以及是否有其他人通过将网络驱动器映射到远程共享来解决类似问题。我已经通读了该函数的MSDN 文档,但我看不到任何内容表明我将如何读取网络共享上的文件。

Han*_*non 8

F$份额是问题,因为只允许管理员访问权限。尽管您已提供对相关文件夹的文件系统访问权限,但该帐户无权访问共享。为XEL文件创建一个共享明确,并提供对SQL Server服务帐户共享和文件夹。

使用通用命名约定名称或 UNC 比通过映射网络驱动器访问文件更可取。映射的网络驱动器只会混淆文件的真实位置,您需要以某种方式在 SQL Server 服务帐户的配置文件中创建映射。

我的 SQL Server 2012 实例完美地通过网络读取文件,如下所示:

SELECT *
FROM sys.fn_xe_file_target_read_file(
    '\\machine\share\ErrorLogs\system_health_*.xel' --this is the UNC
    , null
    , null
    , null
    );
Run Code Online (Sandbox Code Playgroud)