20

Próbuję skonfigurować procedurę składowaną jako zadanie agenta serwera SQL i otrzymuję następujący błąd:Nie można załadować zbiorczo, ponieważ nie można otworzyć pliku. Kod błędu systemu operacyjnego 3

Nie można załadować zbiorczo, ponieważ plik "P: \ plik.csv" mógłby nie otwierać. Kod błędu systemu operacyjnego 3 (nie udało się pobrać tekstu z powodu tego błędu.) Powód: 15105). [SQLSTATE 42000] (błąd 4861)

Zabawne jest to, że procedura przechowywana działa dobrze, gdy wykonuję ją ręcznie.

Napęd P: jest wspólny napęd na Windows SQL Server z systemu Linux poprzez Samba Udostępnij i został ustanowiony przez wykonując następujące polecenie,

EXEC xp_cmdshell „Użyj p netto: "\ lnxusanfsd01 \ Data" Hasło/user: nazwa_użytkownika/persistent: yes'

Każda pomoc w tej sprawie byłoby bardzo mile widziane

+1

Wygląda na problem z uprawnieniami.SQL Server Agent zwykle działa jako inny użytkownik/z różnymi uprawnieniami w porównaniu do uruchamiania go ręcznie. Czy agent działa, jeśli plik znajduje się w katalogu lokalnym? Czy agent również uruchamia polecenie '' net use''? – acfrancis

+0

Agent nie uruchamia polecenia net use. Nie przetestowałem tego, ponieważ nie mam dostępu do RDP do SQL Server – user1345260

+0

Cóż, czy to działa, jeśli dodasz '' net use'' cmd do zadania agenta? Bez tego jestem prawie pewny, że dysk '' P: '' będzie dostępny tylko w sesji Windows użytkownika, a nie w Agencie. – acfrancis

Odpowiedz

0

to prawdopodobnie problem uprawnienia, ale trzeba się upewnić, aby spróbować kroki rozwiązywania problemów:

  • Umieść plik na dysku lokalnym i sprawdź, czy zadanie działa (nie potrzebujesz dostępu RDP, jeśli możesz zamapować literę dysku na lokalnej stacji roboczej do katalogu na serwerze bazy danych)
  • Umieść plik na zdalny katalog, który nie wymaga nazwy użytkownika i hasła (umożliwia Każdy czytać) i użyć ścieżki UNC (\ server \ katalog \ FILE.CSV)
  • Skonfiguruj zadanie SQL, aby uruchomić jako własną nazwę użytkownika
  • Skonfiguruj SQL zadanie działać jako sa i dodać net use i net use /delete poleceń przed i po

Pamiętaj, aby cofnąć wszelkie zmiany (szczególnie działające pod numerem sa). Jeśli nic innego nie działa, możesz spróbować zmienić ładowanie zbiorcze na zaplanowane zadanie, uruchomione na serwerze bazy danych lub na innym serwerze z zainstalowanym programem bcp.

+0

Jak skonfigurować zadanie SQL, aby działało jako twoja własna nazwa użytkownika? Poszedłem zalogować się i podczas UserMapping wybrałem msdb i dostarczyłem uprawnienia dla SQLAgent. Czy to prawda? – user1345260

+0

Nie mam teraz dostępu do serwera SQL Server, ale w zależności od wersji może wyglądać tak: http://i31.tinypic.com/zjdqh3.jpg – acfrancis

+0

Próbowałem użyć uwierzytelniania programu SQL Server do uruchomienia zadania SQL, ale Pojawia się następujący błąd: Główny serwer "sqldev01" nie może uzyskać dostępu do bazy danych "moja_bazy" w bieżącym kontekście zabezpieczeń. konto sqldev01 ma dostęp przez db_owner do mojej bazy danych, do której próbuję wstawić plik csv. Ma również db_owner dostęp do głównej bazy danych, a także ma rolę Bulkadmin. Proszę pomóc – user1345260

35

Nie wiem, czy rozwiązałeś ten problem, ale miałem ten sam problem, jeśli instancja jest lokalna, musisz sprawdzić uprawnienia dostępu do pliku, ale jeśli uzyskujesz dostęp z komputera do serwera (dostęp zdalny), trzeba podać ścieżkę na serwerze, tak, że oznacza to plik w katalogu serwera, które rozwiązały mój przypadek

przykład:

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

Dzięki, wskazałeś dokładnie mój problem i rozwiązałeś moje 15 minut "Plik jest tam, dlaczego nie możesz go przeczytać?". –

+0

Twoje powitanie @DominicMcDonnell! cieszę się, że pomogło – DuSant

+0

Dzięki @DuSant jakie jest pozwolenie pliku? - kliknij prawym przyciskiem myszy -> bezpieczeństwo -> edytuj -> kto ma pełną kontrolę. Dziękuję Ci! –

2

zachować to proste, właśnie zmienił katalog z które importowałem dane do lokalnego folderu na serwerze.

Miałem plik znajdujący się w folderze współdzielonym, po prostu skopiowałem moje pliki do "c: \ TEMP \ Reports" na moim serwerze (zaktualizowałem zapytanie do BULK INSERT z nowego folderu). Zadanie agenta zakończyło się pomyślnie :)

Wreszcie po długim czasie jestem w stanie WYPEŁNIAĆ Wstawianie automatycznie poprzez pracę agenta.

Pozdrawiamy.

1

Sugerowałbym, że dysk P: nie jest zmapowany dla konta, którego serwer SQL rozpoczął jako.

Powiązane problemy