ファイルが開けなかったため、一括ロードできません。オペレーティング・システム・エラー・コード 3

SQLサーバーのエージェントジョブとしてストアドプロシージャを設定しようとしているのですが、以下のエラーが発生します、

ファイル "P:File.csv"を開くことができないため、一括ロードできません。オペレーティングシステムエラーコード3(このエラーのテキストを取得できませんでした。理由: 15105)。[SQLSTATE 42000] (エラー 4861)

おかしなことに、このストアド・プロシージャは手動で実行しても問題なく動作します。

P:ドライブはLINUXからSamba Share経由でWindows SQL Server上の共有ドライブであり、以下のコマンドを実行してセットアップした、

EXEC xp_cmdshell 'net use P: " \lnxusanfsd01Data" Password /user:username /Persistent:Yes'

この件に関するヘルプがあれば、非常に感謝します。

質問へのコメント (6)

インスタンスがローカルにある場合は、ファイルへのアクセス許可をチェックする必要がありますが、自分のコンピュータからサーバーにアクセスする(リモートアクセス)場合は、サーバーのパスを指定する必要があります。

BULK INSERT Table
FROM 'C:\bulk\usuarios_prueba.csv' -- This is server path not local
WITH 
  (
     FIELDTERMINATOR =',',
     ROWTERMINATOR ='\n'
  );
解説 (3)

シンプルにするために、データをインポートするディレクトリをサーバー上のローカル・フォルダに変更しました

ファイルを共有フォルダに置いていたので、ファイルをサーバ上の"c:˶TEMPReports"にコピーしただけです(クエリを新しいフォルダからBULK INSERTに更新しました)。エージェントタスクは正常に完了しました。)

長い時間をかけて、ようやくエージェントジョブで自動的に BULK INSERT ができるようになりました。

よろしくお願いします。

解説 (0)

私はこの問題を解決しました。

SQL Serverがインストールされているサーバーコンピューターにログインすると、csvが表示されます。 サーバーコンピューターにファイルし、クエリを実行すると、挿入されます。 レコード。

datatype互換性の問題を与える場合は、その列のdatatypeを変更します。

解説 (1)

P:ドライブは、sqlサーバーが起動したアカウントにマップされないことをお勧めします。

解説 (0)

Windows認証を介したSQL接続の使用: 「Kerberosダブルホップ」が発生しています。1つのホップはSQLサーバーに接続するクライアントアプリケーション、2番目のホップはリモート「\ NETWORK_MACHINE」に接続するSQLサーバーです。 このようなダブルホップは制約付き委任の制限に該当し、匿名ログインとして共有にアクセスするため、アクセスは拒否されます。

この問題を解決するには、SQL Serverサービスアカウントの制約付き委任を有効にする必要があります。 それをかなりよく説明する良い投稿については、こちらを参照してください

SQL認証を使用するSQL Server。 SQLログインの資格情報を作成し、それを使用してその特定のネットワークリソースにアクセスする必要があります。 ここを参照

解説 (0)

おそらくパーミッションの問題だと思いますが、トラブルシューティングのために以下の手順を試してみてください:

  • ファイルをローカルドライブに置き、ジョブが機能するかどうかを確認する(ローカルワークステーションのドライブ文字をデータベースサーバーのディレクトリにマッピングできれば、必ずしもRDPアクセスは必要ありません)。
  • ユーザー名とパスワードを必要としない(Everyoneが読める)リモートディレクトリにファイルを置き、UNCパスを使う( \server㊤㊤㊤㊤㊤㊤file.csv)
  • SQLジョブを自分のユーザ名で実行するように設定する。
  • SQL ジョブを sa として実行するように設定し、その前後に net usenet use /delete コマンドを追加する。

変更(特に sa として実行)を行った場合は、忘れずに元に戻してください。他の方法がうまくいかない場合は、データベースサーバーまたは bcp がインストールされている他のサーバーで実行する、バルクロードをスケジュールタスクに変更してみてください。

解説 (4)

フォルダへのアクセスを許可しようとしましたが、それは役に立ちませんでした。 私の解決策は、ログインしたユーザーに対して、以下の強調表示されたオプションを赤で選択することでした。

。![これは、右クリックして、Windows認証モードにログインしたユーザー名を選択したときに表示されるものです。](https://i.stack.imgur.com/ZtqCQ.png。)

解説 (1)