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

问题描述 投票:30回答:7

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

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

有趣的是,当我手动执行时,存储过程工作得很好。

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

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

任何有关这方面的帮助将受到高度赞赏

sql-server stored-procedures samba sql-server-agent bulk-load
7个回答
47
投票

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

例:

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

5
投票

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

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

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

最好的祝福。


1
投票

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


1
投票

我已经解决了这个问题,

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

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


0
投票

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

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

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


0
投票

我确实尝试过访问文件夹,但没有帮助。我的解决方案是为登录用户选择以下突出显示的红色选项

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


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.