it-swarm.com.de

Massenladen nicht möglich, da die Datei nicht geöffnet werden konnte. Betriebssystem-Fehlercode 3

Ich versuche, eine gespeicherte Prozedur als SQL Server-Agent-Job einzurichten, und es wird mir folgender Fehler angezeigt: 

Massenladen nicht möglich, da die Datei "P:\file.csv" nicht geöffnet werden konnte. Betriebssystemfehlercode 3 (Text konnte für diesen Fehler nicht abgerufen werden. Grund: 15105). [SQLSTATE 42000] (Fehler 4861)

Lustig ist, dass die gespeicherte Prozedur gut funktioniert, wenn ich sie manuell ausführe. 

Das Laufwerk P: ist ein gemeinsam genutztes Laufwerk unter Windows SQL Server von LINUX über Samba Share. Es wurde mit dem folgenden Befehl eingerichtet: 

EXEC xp_cmdshell 'Net Use P: "\ lnxusanfsd01\Data" Passwort/Benutzer: Benutzername/Persistent: Ja' 

Jede Hilfe zu diesem Thema wäre sehr dankbar

24
user1345260

Ich weiß nicht, ob Sie dieses Problem gelöst haben, aber ich hatte das gleiche Problem. Wenn die Instanz lokal ist, müssen Sie die Berechtigung für den Zugriff auf die Datei überprüfen. Wenn Sie jedoch von Ihrem Computer aus auf einen Server zugreifen (Remote-Zugriff), müssen Sie die Option angeben Pfad im Server, das heißt, die Datei in ein Serververzeichnis aufnehmen, das meinen Fall gelöst hat

beispiel:

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

Um dies einfach zu halten, änderte I einfach das Verzeichnis, aus dem ich die Daten importierte, in einen lokalen Ordner auf dem Server.

Ich hatte die Datei in einem freigegebenen Ordner gespeichert. Ich habe meine Dateien gerade in "c:\TEMP\Reports" auf meinem Server kopiert (die Abfrage wurde aus dem neuen Ordner in BULK INSERT aktualisiert). Die Agent-Aufgabe wurde erfolgreich abgeschlossen :)

Endlich kann ich nach längerer Zeit automatisch mit einem Agentenauftrag BULK einlegen.

Freundliche Grüße.

3
Jose Santos

Ich habe dieses Problem gelöst,

melden Sie sich beim Server-Computer an, auf dem SQL Server installiert ist. Datei auf dem Server-Computer und führen Sie Ihre Abfrage aus. Es wird die .__ eingefügt. Aufzeichnungen.

Wenn Sie ein Datatyp-Kompatibilitätsproblem angeben, ändern Sie den Datentyp für diese Spalte 

1
Anand

Ich würde vorschlagen, dass das Laufwerk P: nicht für das Konto zugeordnet ist, als dessen SQL Server gestartet wurde.

1
Tim Napier

Ich habe versucht, Zugriff auf die Ordner zu gewähren, aber das hat nicht geholfen. Meine Lösung bestand darin, die unten hervorgehobenen Optionen für den angemeldeten Benutzer rot zu markieren 

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

0
Yoosaf Abdulla

Es handelt sich wahrscheinlich um ein Problem mit Berechtigungen, Sie müssen jedoch unbedingt folgende Schritte zur Problembehandlung ausführen:

  • Legen Sie die Datei auf einem lokalen Laufwerk ab und prüfen Sie, ob der Job funktioniert (Sie benötigen nicht unbedingt RDP-Zugriff, wenn Sie einen Laufwerksbuchstaben auf Ihrer lokalen Workstation einem Verzeichnis auf dem Datenbankserver zuordnen können.)
  • Legen Sie die Datei in ein Remote-Verzeichnis ab, für das kein Benutzername und kein Kennwort erforderlich ist (jeder kann lesen), und verwenden Sie den UNC-Pfad (\ server\directory\file.csv).
  • Konfigurieren Sie den SQL-Job so, dass er als Ihr eigener Benutzername ausgeführt wird
  • Konfigurieren Sie den SQL-Job so, dass er als sa ausgeführt wird, und fügen Sie vor und nach den Befehlen Net Use und Net Use /delete hinzu

Denken Sie daran, Änderungen rückgängig zu machen (insbesondere als sa). Wenn nichts anderes funktioniert, können Sie versuchen, die Massenlast in eine geplante Aufgabe zu ändern, die auf dem Datenbankserver oder einem anderen Server ausgeführt wird, auf dem bcp installiert ist.

0
acfrancis

Verwenden der SQL-Verbindung über die Windows-Authentifizierung: Ein "Kerberos-Double-Hop" findet statt: Ein Hop ist Ihre Clientanwendung, die eine Verbindung zum SQL-Server herstellt, ein zweiter Hop ist der SQL-Server, der eine Verbindung zum entfernten "\\ NETWORK_MACHINE \" herstellt. Ein solcher Double-Hop unterliegt den Einschränkungen der eingeschränkten Delegierung, und Sie greifen auf die Freigabe als anonyme Anmeldung und somit auf die Zugriffsverweigerung zu.

Um das Problem zu beheben, müssen Sie die eingeschränkte Delegierung für das SQL Server-Dienstkonto aktivieren. Siehe hier für einen guten Beitrag, der es recht gut erklärt

SQL Server mit SQL-Authentifizierung Sie müssen einen Berechtigungsnachweis für Ihre SQL-Anmeldung erstellen und diesen verwenden, um auf diese bestimmte Netzwerkressource zuzugreifen. Siehe hier

0
Josh Harris