web-dev-qa-db-ja.com

fn_xe_file_target_read_fileを使用してネットワーク経由でファイルを読み取る方法

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サービスアカウントがそのファイルにアクセスできることを確認してください。

SQLサーバーが実行されているドメインアカウントがフォルダーにアクセスできるように、SSASサーバーでフォルダーセキュリティを構成しました。したがって、それは問題にはなりません。この関数はUNCパスが好きではないことを想定しているので、次のステップは、SQLサーバーマシンにネットワークドライブをマップして、この関数にローカルパスを渡せるようにすることです。

これをDBAに要求する前に、UNCパスに関する私の想定が正しいかどうか、および他の誰かがネットワークドライブをリモート共有にマッピングすることによって同様の問題を回避しているかどうかを確認したいと思いました。関数の MSDNドキュメント を読みましたが、ネットワーク共有上のファイルを読み取る方法を示すものは何も表示されません。

4
Brandon McClure

キンがコメントで示唆したように、F$共有は管理者アクセスのみを許可するため、問題があります。問題のフォルダへのfile-systemアクセスを提供しましたが、アカウントは共有にアクセスできません。 xelファイル専用の共有を作成し、SQL Serverサービスアカウントへのアクセスを提供しますboth共有、およびフォルダー。

マッピングされたネットワークドライブを介してファイルにアクセスするよりも、汎用命名規則名、またはUNCを使用することをお勧めします。マップされたネットワークドライブは、ファイルの実際の場所を難読化するだけであり、SQL Serverサービスアカウントのプロファイル内にマッピングを作成する必要があります(これは、KinがNet Useコマンドをコメントに示しています。)

私の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
    );
6
Max Vernon