У Brent Ozar было несколько хороших сообщений в блоге об этом. Я считал всех их, и я никогда не собираюсь добираться для дистанционной работы.
Используйте путь UNC при определении места назначения - SQL Agent не имеет понятия "подключенных" "дисков".
Кроме того, SQL Agent обычно работает, поскольку "Локальная служба" или "Локальная Система" и, как таковые, не имеют прав на удаленные доли на других компьютерах.
У Вас есть несколько вариантов:
Выполните SQL Agent как ролевую учетную запись в домене. Дайте то разрешение учетной записи писать в каталог / доля, где Вы хотели бы сохраненные резервные копии.
Выполните SQL Agent как "Сетевую службу". Это пройдет проверку подлинности к серверу совместного использования с доменной учетной записью компьютера машины, на которой работает сервис. Дайте то разрешение учетной записи писать в каталог / доля, где Вы хотели бы сохраненное резервное копирование.
Если у Вас нет домена, создайте учетную запись с тем же именем пользователя и паролем и на машине, размещающей SQL Agent и на машине, размещающей файлы резервных копий. Измените SQL Agent, чтобы работать как эта "ролевая" учетная запись и дать то разрешение учетной записи писать в каталог / доля, где Вы хотели бы сохраненное резервное копирование. (Домен "бедного человека"...)
Я полностью соглашаюсь с обоими ответами о пути UNC.
Я также хотел бы добавить, что даже с сетевыми дисками у Вас есть простое обходное решение. Можно выполнить резервное копирование на любой из нормальных дисков сервера. И затем можно добавить
xp_cmdshell 'XCOPY [source] [destination] \flags'
Команда SQL к заданию или сценарию SQL Вы работаете.
С xp_cmdshell можно сделать еще более - например, выполняет инструмент командной строки внешнего архива, как 7z для сжатия файла перед копированием его в сетевой диск (когда удаленное соединение будет слишком медленным...),
P.S.: Забыл упоминать, что xp_cmdshell может быть включен и отключен при помощи Инструмента конфигурирования Площади поверхности и путем выполнения sp_configure (и по умолчанию он отключен),
Следует иметь в виду здесь, что SQL Server очень нетерпим к сетевым задержкам. Если они произойдут, и они склоняются к, то резервное копирование перестанет работать. Я не рекомендую эту практику вообще для продуктивных сред.
Лучше создать резервную копию локально и затем скопировать.
Вашему агенту нужен доступ к сетевым ресурсам. Они не должны быть отображены заранее.
Вы делаете это как это:
BACKUP DATABASE myDB TO DISK = '\\machine\share\dir\file.bak'
Я полагаю, что, если пользователь, который владеет заданием, является sql системным администратором, оно работает под агентом, иначе оно работает как пользователь несистемного администратора.
Если SQL Server не работает под учетной записью домена, вы можете подключить сетевой диск для учетной записи sqlserver (не для своей учетной записи), как описано в этом ответе на переполнение стека
Сначала вам необходимо включить xp_cmdshell
-- allow changes to advanced options
EXEC sp_configure 'show advanced options', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO
-- To enable xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO
Затем вы можете подключить диск, используя:
EXEC xp_cmdshell 'NET USE Z: \\Srv\Path password1 /USER:Domain\UserName'
Наконец, вы можете сделать резервную копию на этот подключенный диск:
BACKUP DATABASE myDB TO DISK = 'z:\file.bak'
Самый простой способ — создать диск.vhd на общем сетевом ресурсе с помощью управления дисками и назначить ему букву диска. SQL может получить доступ к этому диску без каких-либо изменений.
Просто добавьте скрипт diskpart.exe в планировщик при загрузке, чтобы автоматически подключаться при перезагрузке.
пример выберите vdisk file="\{ip-адрес/сервер}{networkshare}{filenamep.vhd}" attach vdisk // запоминает последнюю назначенную букву диска.