web-dev-qa-db-fra.com

Impossible de charger en bloc car le fichier n'a pas pu être ouvert. Code d'erreur du système d'exploitation 3

J'essaie de configurer une procédure stockée en tant que tâche d'agent SQL Server et cela me donne l'erreur suivante, 

Impossible de charger en bloc car le fichier "P:\file.csv" n'a pas pu être ouvert. Code d'erreur du système d'exploitation 3 (impossible d'extraire le texte pour cette erreur. Raison: 15105). [SQLSTATE 42000] (erreur 4861)

Ce qui est drôle, c'est que la procédure stockée fonctionne correctement lorsque je l'exécute manuellement. 

Le lecteur P: est un lecteur partagé sur Windows SQL Server à partir de LINUX via Samba Share et a été configuré en exécutant la commande suivante. 

EXEC xp_cmdshell 'Net Use P: "\ lnxusanfsd01\Data" Mot de passe/utilisateur: nom d'utilisateur/Persistant: Oui' 

Toute aide sur ce serait très apprécié

24
user1345260

Je ne sais pas si vous avez résolu ce problème, mais j'avais le même problème. Si l'instance est locale, vous devez vérifier l'autorisation d'accéder au fichier. Toutefois, si vous accédez depuis votre ordinateur à un serveur (accès distant), vous devez chemin dans le serveur, de sorte que cela signifie pour inclure le fichier dans un répertoire du serveur, qui a résolu mon cas

exemple:

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

Pour que cela reste simple, je viens de changer le répertoire à partir duquel je voulais importer les données dans un dossier local du serveur .

Le fichier se trouvant dans un dossier partagé, je viens de copier mes fichiers dans "c:\TEMP\Reports" sur mon serveur (la requête a été mise à jour dans BULK INSERT à partir du nouveau dossier). La tâche de l'agent s'est terminée avec succès :)

Enfin, après une longue période, je suis capable d'insérer automatiquement BULK via un travail d'agent.

Meilleures salutations.

3
Jose Santos

J'ai résolu ce problème,

connectez-vous à l’ordinateur serveur sur lequel SQL Server est installé, obtenez-vous csv fichier sur le serveur et exécutez votre requête, le fichier .__ sera inséré. enregistrements.

Si vous donnez un problème de compatibilité de type de données, changez le type de données pour cette colonne. 

1
Anand

Je suggère que le lecteur P: ne soit pas mappé pour le compte sous lequel le serveur SQL a démarré.

1
Tim Napier

J'ai essayé de donner l'accès aux dossiers, mais cela n'a pas aidé… .. Ma solution a été de faire en sorte que les options surlignées ci-dessous apparaissent en rouge sélectionnées pour l'utilisateur connecté. 

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

0
Yoosaf Abdulla

C'est probablement un problème d'autorisations, mais vous devez vous assurer d'essayer ces étapes pour dépanner:

  • Placez le fichier sur un lecteur local et voyez si le travail fonctionne (vous n'avez pas nécessairement besoin d'un accès RDP si vous pouvez mapper une lettre de lecteur de votre poste de travail local sur un répertoire du serveur de base de données).
  • Placez le fichier dans un répertoire distant ne nécessitant pas de nom d'utilisateur ni de mot de passe (permettant à tout le monde de le lire) et utilisez le chemin UNC (\ server\directory\file.csv).
  • Configurez le travail SQL pour qu'il s'exécute sous votre propre nom d'utilisateur.
  • Configurez le travail SQL pour qu'il s'exécute en tant que sa et ajoutez les commandes Net Use et Net Use /delete avant et après

N'oubliez pas d'annuler toutes les modifications (en particulier en tant que sa). Si rien d'autre ne fonctionne, vous pouvez essayer de modifier le chargement en bloc en une tâche planifiée exécutée sur le serveur de base de données ou sur un autre serveur sur lequel bcp est installé.

0
acfrancis

Utilisation de la connexion SQL via l’authentification Windows: Un "double saut Kerberos" est en train de se produire: votre application cliente se connecte au serveur SQL Server; Un tel double saut tombe sous les restrictions de la délégation contrainte et vous finissez par accéder au partage en tant que connexion anonyme et donc à l'accès refusé.

Pour résoudre le problème, vous devez activer la délégation contrainte pour le compte de service SQL Server. Voir ici pour un bon post qui l'explique assez bien

SQL Server utilisant l'authentification SQL Vous devez créer une information d'identification pour votre connexion SQL et l'utiliser pour accéder à cette ressource réseau particulière. Vois ici

0
Josh Harris