いくつかの奇妙な理由で、一括挿入の実行に問題があります。
BULK INSERT customer_stg
FROM 'C:\Users\Michael\workspace\pydb\data\andrew.out.txt'
WITH
(
FIRSTROW=0,
FIELDTERMINATOR='\t',
ROWTERMINATOR='\n'
)
this を読んだ後、自信を持って、ユーザーロールを正しく設定しました。
Bulkadmin固定サーバーロールのメンバーは、BULK INSERTステートメントを実行できます。
Windows認証のLogin Properties
を正しく設定しました(以下を参照)。bulkadmin
に対するサーバー全体のアクセス許可を付与します。
(ソース: iforce.co.nz )
コマンドEXEC sp_helpsrvrolemember 'bulkadmin'
は、上記の情報が成功したことと、現在のユーザーMichael-PC\Michael
にbulkadmin
権限があることを通知します。
(ソース: iforce.co.nz )
しかし、私が知っている限りではすべてを正しく設定しましたが、まだエラーが発生しています。 SQL Server Management Studioから一括挿入を直接実行します。
メッセージ4861、レベル16、状態1、行2
ファイル「C:\ Users\Michael\workspace\pydb\data\andrew.out.txt」を開けなかったため、一括読み込みできません。オペレーティングシステムエラーコード5(アクセスが拒否されました)。
明らかにbulkadmins
がステートメントを実行できるため、これは意味がありません。bulkadmin
の動作を再構成するつもりですか? (私はとても迷っている)。それを修正する方法についてのアイデアはありますか?
このエラーは、SQL Server認証を使用していて、SQL Serverがバルクロードフォルダーにアクセスできない場合に表示されます。
そのため、SQLサーバーにフォルダーへのアクセスを許可すると、問題が解決します。
方法は次のとおりです。フォルダに移動し、右クリック-> properties-> Securityタブ-> Edit-> Add(新しいウィンドウ)-> Advanced-> Find Now。検索結果のユーザーリストで、SQLServerMSSQLUser $ UserName $ SQLExpressのようなものを見つけ、開いたすべてのダイアログに対して[OK]をクリックします。
SQL Serverを再インストールしてもこれが修正されるとは思わず、しばらく時間がかかるだけです。
私の推測では、ファイルにアクセスしようとしているのはMichael-PC\Michael
ではなく、SQL Serverサービスアカウントです。この場合、少なくとも3つのオプションがあります(おそらく他のオプションもあります):
a。実行するようにSQL Serverサービスを設定します。
b。 SQL Serverサービスアカウントにそのフォルダーへの明示的なアクセスを許可します。
c。 SQL Serverがアクセスできる場所、またはアクセスできるようにすることができる場所に、より論理的な場所にファイルを配置します(例:C:\bulk\
)。
これがローカルのワークステーションであると仮定して、これらのことをお勧めします。本番マシンについて話しているとき、SQL Serverからのローカルファイルシステムアクセスに関して、より深刻なセキュリティ上の懸念が間違いなくあります。もちろん、上記のc.
を使用して、タッチしたいフォルダ。
同じ問題SSIS 2012がありましたが、解決策はWindows認証を使用することでした。 saユーザーでSQL認証を使用していました。
'MSSQLSERVER'ユーザー(またはSQL ServerサービスがLog On As in Windows Servicesに設定されているユーザーに、CSVおよびフォーマットファイルを含むフォルダーに読み取り権限を与えてみてください。 =)
時々、これは偽のエラーメッセージである可能性があり、プロセスを実行しているのと同じアカウントでファイルを開こうとしました。私の環境で同じ問題が発生し、ファイルを(プロセスを実行する同じ資格情報で)開いたときに、既知のプログラムに関連付ける必要があると言われましたが、それを開いて実行できましたエラーなしで処理します。
1)SQLを開く2)タスクマネージャーで、SQLを実行しているアカウントを確認できます-Janが書いたように、おそらくMichael-PC\Michaelではありません。
SQLを実行するアカウントには、共有フォルダーへのアクセスが必要です。
使用しているファイル('C:\Users\Michael\workspace\pydb\data\andrew.out.txt'
)は、MSSMSを実行しているクライアントマシンではなく、SQLサーバーマシン上にあります。
私たちの場合、それはKerberosの問題でした。この記事の手順に従って問題を解決しました: https://techcommunity.Microsoft.com/t5/SQL-Server-Support/Bulk-Insert-and-Kerberos/ba-p/317304 。
BULK INSERTステートメントが実行されているSQL Serverのマシンアカウントで委任を構成することになりました。マシンアカウントは、「cifs」サービスを介して、ファイルが置かれているファイルサーバーに委任できる必要があります。制約付き委任を使用している場合は、必ず「認証プロトコルを使用する」を指定してください。
DFSが関係している場合は、次のPowershellコマンドを実行して、ファイルサーバーの名前を取得できます。
Get-DfsnFolderTarget -Path "\\dfsnamespace\share"
動作しているSSMSで一括挿入を実行すると同様の質問がありますが、タスクをSQL Serverエージェントに変換すると失敗し、「Operation system failure code 5」で返されました。
以前に投稿された多くのソリューションを参照した後、この方法で、ソースフォルダーへの「フルコントロール」アクセス権をNT SERVER/SQLSERVERAGENTに付与することで、問題を解決しました。 。