无法批量加载,因为无法打开文件。操作系统错误代码3

时间:2013-10-21 10:17:41

标签: sql-server stored-procedures samba sql-server-agent bulk-load

我正在尝试将存储过程设置为SQL Server代理作业,它会给我以下错误,

无法批量加载,因为无法打开文件“P:\ file.csv”。操作系统错误代码3(无法检索此错误的文本。原因:15105)。 [SQLSTATE 42000](错误4861)

有趣的是,当我手动执行时,存储过程工作正常。

驱动器P:是Windows SQL Server上从LINUX通过Samba共享的共享驱动器,它是通过执行以下命令设置的,

EXEC xp_cmdshell'净使用P:“\ lnxusanfsd01 \ Data”密码/用户:用户名/持久性:是'

对此的任何帮助都将受到高度赞赏

7 个答案:

答案 0 :(得分:47)

我不知道你是否解决了这个问题,但我有同样的问题,如果实例是本地的,你必须检查访问该文件的权限,但是如果你从计算机访问服务器(远程访问)你有指定服务器中的路径,这意味着将文件包含在服务器目录中,这解决了我的案例

示例:

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

答案 1 :(得分:4)

为了简单起见,我刚刚将用于导入数据的目录更改为服务器上的本地文件夹

我将文件放在共享文件夹上,我只是将文件复制到服务器上的“c:\ TEMP \ Reports”(将查询从新文件夹更新为BULK INSERT)。代理任务成功完成:)

经过很长一段时间后,我可以通过代理人工作自动BULK Insert。

最好的问候。

答案 2 :(得分:1)

我建议不为sql server启动的帐户映射P:驱动器。

答案 3 :(得分:1)

我已经解决了这个问题,

  

登录到安装了SQL Server的服务器计算机,即可获得csv   服务器计算机上的文件并执行查询,它将插入   记录。

如果要提供数据类型兼容性问题,请更改该列的数据类型

答案 4 :(得分:0)

这可能是权限问题,但您需要确保尝试以下步骤进行问题排查:

  • 将文件放在本地驱动器上,查看作业是否有效(如果可以将本地工作站上的驱动器号映射到数据库服务器上的目录,则不一定需要RDP访问权限)
  • 将文件放在不需要用户名和密码的远程目录上(允许所有人阅读)并使用UNC路径(\ server \ directory \ file.csv)
  • 将SQL作业配置为以您自己的用户名
  • 运行
  • 将SQL作业配置为以sa运行,并在
  • 之前和之后添加net usenet use /delete命令

请记住撤消所有更改(尤其是作为sa运行)。如果没有其他工作,您可以尝试将批量加载更改为在数据库服务器或安装了bcp的其他服务器上运行的计划任务。

答案 5 :(得分:0)

我确实尝试过访问文件夹,但这没有帮助。 我的解决方案是为登录用户

选择以下红色突出显示的选项

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

答案 6 :(得分:0)

通过Windows身份验证使用SQL连接: 正在发生“ Kerberos双跳”:一跳是您的客户端应用程序连接到SQL Server,第二跳是SQL Server连接到远程“ \\ NETWORK_MACHINE \”。这样的双重跃迁受约束委派的限制,您最终以匿名登录的身份访问共享,因此访问被拒绝。

要解决此问题,您需要为SQL Server服务帐户启用约束委派。 See here for a good post that explains it quite well

使用SQL身份验证的SQL Server 您需要为SQL登录创建凭据,并使用该凭据访问特定的网络资源。 See here