web-dev-qa-db-ja.com

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

ストアドプロシージャをSQL Serverエージェントジョブとして設定しようとしていますが、次のエラーが表示されます。

ファイル「P:\ file.csv」を開けなかったため、一括読み込みできません。オペレーティングシステムエラーコード3(このエラーのテキストの取得に失敗しました。理由:15105)。 [SQLSTATE 42000](エラー4861)

おかしなことは、ストアドプロシージャを手動で実行するとうまく機能することです。

ドライブP:は、Samba共有を介したLINUXからのWindows SQL Server上の共有ドライブであり、次のコマンドを実行してセットアップされました。

EXEC xp_cmdshell 'Net Use P: "\ lnxusanfsd01\Data" Password/user:username/Persistent:Yes'

これに関するヘルプは非常に高く評価されます

33
user1345260

この問題を解決したかどうかはわかりませんが、同じ問題が発生しました、インスタンスがローカルの場合、ファイルへのアクセス許可を確認する必要がありますが、コンピューターからサーバーにアクセスする場合(リモートアクセス)は指定する必要がありますサーバー内のパス、つまりサーバーディレクトリにファイルを含めることを意味します。

例:

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

これをシンプルに保つために、サーバー上のローカルフォルダーにデータをインポートしていたディレクトリを変更しました

ファイルを共有フォルダーに配置しました。サーバー上の「c:\ TEMP\Reports」にファイルをコピーしました(クエリを新しいフォルダーからBULK INSERTに更新しました)。エージェントタスクが正常に完了しました:)

久しぶりに、エージェントジョブを介して自動的に挿入を一括処理できます。

宜しくお願いします。

5
Jose Santos

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

sQL Serverがインストールされているサーバーコンピューターにログインすると、サーバーコンピューター上のcsvファイルが取得され、クエリが実行されてレコードが挿入されます。

データ型の互換性の問題を与える場合は、その列のデータ型を変更します

1
anandchaugule

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

1
Tim Napier

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

This is what you see when you right click and select the username you have logged in for windows authentication mode.

0
Yoosaf Abdulla

おそらくアクセス許可の問題ですが、トラブルシューティングを行うには、次の手順を試してください:

  • ファイルをローカルドライブに置き、ジョブが機能するかどうかを確認します(ローカルワークステーションのドライブ文字をデータベースサーバーのディレクトリにマップできる場合は、RDPアクセスは必ずしも必要ではありません)
  • ユーザー名とパスワードを必要としない(Everyoneに読み取りを許可する)リモートディレクトリにファイルを配置し、UNCパス(\ server\directory\file.csv)を使用します
  • 独自のユーザー名として実行するようにSQLジョブを構成します
  • SQLジョブをsaとして実行するように構成し、Net UseおよびNet Use /deleteコマンドを前後に追加します

変更を元に戻すことを忘れないでください(特にsaとして実行)。何も機能しない場合は、データベースサーバーまたはbcpがインストールされている別のサーバーで実行される一括タスクをスケジュールされたタスクに変更してみてください。

0
acfrancis

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

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

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

0
Josh Harris