Sql-Server

如何使用 fn_xe_file_target_read_file 通過網路讀取文件

  • June 19, 2021

我們正在執行 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 文件,但我看不到任何內容來表明我將如何讀取網路共享上的文件。

共享是有問題的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
   );

引用自:https://dba.stackexchange.com/questions/159617