【问题标题】:SQL Server BULK INSERT - Linux/RHEL errorSQL Server 批量插入 - Linux/RHEL 错误
【发布时间】:2021-01-19 15:48:08
【问题描述】:

我正在针对驻留在 Linux / RHEL VM 中的 SQL Server 2019 进行批量插入查询(通过存储过程)。执行后,我收到此错误:

消息 4860,级别 16,状态 1,过程 dbo.Import_Store,第 25 行 [批量开始第 14 行]

无法批量加载。文件“/home/user1/FileStorage/Store1.csv”确实 不存在或您没有文件访问权限。

此错误消息不正确 - 即文件物理上存在于 VM 上的指定路径并具有正确的权限(每个人都获得了完全权限!)。

高度赞赏任何见解。谢谢。

BULK INSERT dbo.Store
    FROM '/home/user1/FileStorage/Store1.csv'
    WITH
    (
        FORMAT = 'CSV', FIRSTROW = 2, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n'
    );

仅供参考 - 我尝试了许多选项,例如使用 C:\ 或 C:/ 而不是 /home,但到目前为止没有任何效果。

【问题讨论】:

  • 你的sql server运行的账号,这也有完全权限吗?
  • 是的,它是 sa(管理员)帐户。
  • 我非常怀疑mssql 用户/组可以访问user1 的主目录(更重要的是它不应该)。将文件放在其他位置,mssql 组有权读取(和写入)。
  • @Larnu 应该不需要写吧?
  • 我不记得 SQL Server 是否尝试在 Linux 上锁定文件,@Charlieface。我建议它可能会,因此文件在加载时不能被更改,这需要写访问权限。

标签: sql-server linux bulkinsert


【解决方案1】:

感谢 Larnu 的上述评论。这让我做了一些事情来解决我的问题。这是我为同一条船上的任何人解决它的方法。

我基本上在 Linux VM 的根目录下创建了一个全新的共享文件夹。然后创建了一个新用户组并授予它对共享文件夹的完全访问权限。然后我将用户“mssql”添加到组中。现在我的 SQL Server 可以访问该位置而不会出现任何错误!

sudo mkdir -p /SharedFolder

sudo groupadd SharedUsers

sudo chgrp -R SharedUsers /SharedFolder
sudo chmod -R 2775 /SharedFolder

sudo usermod -a -G SharedUsers mssql

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    相关资源
    最近更新 更多