У меня есть распорядок дня, который запускает базу данных SQL и экспортирует некоторые данные с помощью BCP. Мне нужно переместить эти файлы на машину с Linux, поэтому я открыл доступ к папке с помощью Samba.
В местный экспорт работает нормально, но когда я пытаюсь напрямую экспортировать в Linux, возникает ошибка.
Если я попытаюсь копировать файлы вручную Там есть Нет ошибки и я могу это сделать без проблем.
Запрос SQL выполняется в среде SQL Server Management Studio.
DECLARE @sql VARCHAR(1000)
set @sql = 'BCP "SELECT rawdata FROM database.dbo.file where [id] = 123" queryout "Z:\files\123.jpg" -S SERVER\SQLINST -T -f D:\file.fmt'
EXEC xp_cmdshell @sql
Ошибка:
SQLState = S1000, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Unable to open BCP host data-file
NULL
Конфигурация Samba выглядит так:
[doc_sync]
path = /var/www/html
valid users = filesync
read only = no
writeable = yes
browseable = yes
public = yes
guest ok = yes
Права доступа к файлам в папке - 777. Также я создал локального пользователя в Windows (filesync), который зеркалируется на машине Linux, чтобы не было проблем с пользователями.
Я также попытался проверить, нет ли проблем с xp_cmdshell команда и попробовал это
EXEC xp_cmdshell 'MKDIR "Z:\Data\"'
где Z: это монтируемый диск Samba, а ошибка:
output
The system cannot find the drive specified.
XP_CMDSHELL не может использовать буквы дисков, уже смонтированные в системе, поэтому нужно будет экспортировать их для запроса SQL, подобного этому
EXEC XP_CMDSHELL 'net use Z: \\SRV\files /USER:username pass'