20

Ich versuche eine Stored Procedure als SQL Server Agent Job einzurichten, und es gibt mir den folgenden Fehler,Kann nicht geladen werden, da die Datei nicht geöffnet werden konnte. Betriebssystem Fehlercode 3

Kann nicht geladen werden, weil die Datei "P: \ file.csv" könnte nicht geöffnet werden. Betriebssystemfehlercode 3 (Fehler beim Abrufen des Texts für diesen Fehler. Ursache: 15105). [SQLSTATE 42000] (Fehler 4861)

Lustige Sache ist die Stored Procedure funktioniert gut, wenn ich es manuell ausführe.

Das Laufwerk P: ein gemeinsam genutztes Laufwerk unter Windows SQL Server von LINUX über Samba Teile und es wurde durch den folgenden Befehl ausführen,

EXEC xp_cmdshell ‚net use P ein: "\ lnxusanfsd01 \ Data" Passwort/user: Benutzername/Persistent: Ja

auf diesem Jede Hilfe sehr

+1

Sieht aus wie ein Berechtigungsproblem.Der SQL Server-Agent wird normalerweise als ein anderer Benutzer/mit anderen Berechtigungen ausgeführt, als wenn Sie ihn manuell ausführen. Funktioniert der Agent, wenn sich die Datei in einem lokalen Verzeichnis befindet? Führt der Agent auch den Befehl "net use" aus? – acfrancis

+0

Der Agent führt den Befehl net use nicht aus. Ich habe das nicht getestet, da ich keinen RDP-Zugriff auf den SQL Server habe. – user1345260

+0

Nun, funktioniert es, wenn Sie dem Agent-Job die '' net use''-Cmd hinzufügen? Ohne das bin ich mir ziemlich sicher, dass das Laufwerk '' P: 'nur in der Windows-Sitzung Ihres Benutzernamens verfügbar ist, nicht in der des Agenten. – acfrancis

Antwort

0

Es ist wahrscheinlich ein Problem Berechtigungen geschätzt würde, aber Sie müssen diese Schritte, um sicherzustellen, um zu versuchen, zu beheben:

  • Legen Sie die Datei auf ein lokales Laufwerk und überprüfen Sie, ob der Job funktioniert (Sie benötigen nicht unbedingt RDP-Zugriff, wenn Sie einen Laufwerkbuchstaben auf Ihrer lokalen Arbeitsstation einem Verzeichnis auf dem Datenbankserver zuordnen können)
  • Legen Sie die Datei an ein Remote-Verzeichnis, das keinen Benutzernamen und kein Passwort benötigt (erlaubt jedem, zu lesen) und den UNC-Pfad (\ server \ directory \ file.csv) verwendet
  • Konfigurieren Sie den SQL-Job als Ihren eigenen Benutzernamen
  • Konfigurieren Sie die SQL Job ausgeführt werden soll als sa und fügen Sie die net use und net use /delete Befehle vor und nach

Denken Sie daran, alle Änderungen rückgängig zu machen (insbesondere unter 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

Wie konfiguriere ich den SQL-Auftrag als Ihren eigenen Benutzernamen ausführen? Ich ging zur Anmeldung und während UserMapping wählte ich msdb und stellte Berechtigungen für SQLAgent zur Verfügung. Ist das richtig? – user1345260

+0

Ich habe jetzt keinen Zugriff auf SQL Server, aber abhängig von Ihrer Version könnte es wie folgt aussehen: http://i31.tinypic.com/zjdqh3.jpg – acfrancis

+0

Ich habe versucht, eine SQL Server-Authentifizierung zu verwenden, um den SQL-Job aber auszuführen Ich erhalte den folgenden Fehler: Der Serverprinzipal "sqldev01" kann unter dem aktuellen Sicherheitskontext nicht auf die Datenbank "mydatabase" zugreifen. Das Konto sqldev01 hat db_owner Zugriff auf meine Datenbank, in die ich versuche, die CSV-Datei einzufügen. Es hat auch db_owner Zugriff auf Master-Datenbank und hat auch Bulkadmin Rolle. Bitte helfen Sie – user1345260

35

Ich weiß nicht, ob Sie dieses Problem gelöst haben, aber ich hatte dasselbe Problem, wenn die Instanz lokal ist, müssen Sie die Berechtigung für den Zugriff auf die Datei überprüfen, aber wenn Sie von Ihrem Computer auf einen Server zugreifen (Remotezugriff) müssen Sie den Pfad in dem Server angeben, so dass heißt, die Datei in einem Server-Verzeichnis aufzunehmen, die mein Fall

Beispiel gelöst:

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

Danke, du hast genau auf mein Problem hingewiesen und meine 15 Minuten 'Die Datei ist da, warum kannst du es nicht gelesen?' Gelöst. –

+0

Ihre Begrüßung @DominicMcDonnell! froh, dass es geholfen hat! – DuSant

+0

Danke @DuSant Was ist die Erlaubnis der Datei? - Rechtsklick -> Sicherheit -> Bearbeiten -> Wer hat die volle Kontrolle. Vielen Dank! –

2

diese einfach zu halten, ich habe gerade das Verzeichnis aus was ich die Daten in einen lokalen Ordner auf dem Server importiert habe.

Ich hatte die Datei in einem freigegebenen Ordner, ich habe nur meine Dateien in "c: \ TEMP \ Reports" auf meinem Server kopiert (aktualisiert die Abfrage zu BULK INSERT aus dem neuen Ordner). Der Agent Task erfolgreich abgeschlossen :)

Endlich nach einer langen Zeit bin ich in der Lage, automatisch einfügen über Agent-Job.

Mit freundlichen Grüßen.

1

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

Verwandte Themen