
У меня есть SQL Server (2000, 2005 и 2008), и я хотел бы использовать SQL Agent (или даже простую резервную копию базы данных «xxx» на диске = «yyy») для резервного копирования на удаленные диски.
То есть: у меня есть сопоставленный диск на машине SQL, например: «M:», который сопоставлен с \\otherbox\someshare
По умолчанию SQL Server не позволяет вам делать резервные копии на таких дисках, но я думаю, что есть способ включить это. Может кто-нибудь указать мне на документацию?
Заранее спасибо.
решение1
При указании места назначения используйте UNC-путь — в SQL-агенте нет понятия «подключенных» «дисков».
Кроме того, SQL Agent обычно работает как «локальная служба» или «локальная система» и, как таковой, не имеет прав на удаленные общие ресурсы на других компьютерах.
У вас есть несколько вариантов:
Запустите SQL Agent как учетную запись роли в домене. Предоставьте этой учетной записи разрешение на запись в каталог/общий ресурс, где вы хотите хранить резервные копии.
Запустите SQL Agent как "Сетевую службу". Он выполнит аутентификацию на сервере общего доступа с учетной записью компьютера домена машины, на которой запущена служба. Предоставьте этой учетной записи разрешение на запись в каталог/общий ресурс, где вы хотите сохранить резервную копию.
Если у вас нет домена, создайте учетную запись с одинаковым именем пользователя и паролем на машине, на которой размещен SQL Agent, и на машине, на которой размещены файлы резервных копий. Измените SQL Agent на запуск от имени этой учетной записи «роли» и предоставьте этой учетной записи разрешение на запись в каталог/общий ресурс, где вы хотите сохранить резервную копию. («Домен бедняка»...)
решение2
Я полностью согласен с обоими ответами по поводу пути UNC.
Я также хотел бы добавить, что даже с подключенными дисками у вас есть простой обходной путь. Вы можете выполнить резервное копирование на любой из обычных дисков вашего сервера. И затем вы можете добавить
xp_cmdshell 'XCOPY [source] [destination] \flags'
Команда SQL для задания или скрипта SQL, который вы запускаете.
С помощью xp_cmdshell вы можете сделать еще больше — например, запустить внешний архиватор командной строки, например, 7z, чтобы сжать файл перед его копированием на подключенный диск (когда удаленное соединение слишком медленное...)
PS: Забыл упомянуть, что xp_cmdshell можно включить и отключить с помощью инструмента Surface Area Configuration и с помощью sp_configure (по умолчанию он отключен)
решение3
Если SQL Server не работает под учетной записью домена, вы можете подключить сетевой диск для учетной записи SQLServer (не вашей учетной записи), как описано в этомответ на stackoverflow
Сначала нужно включить 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'
решение4
Имейте в виду, что SQL Server очень нетерпим к задержкам в сети. Если они случаются, а они имеют тенденцию, резервное копирование не будет выполнено. Я вообще не рекомендую эту практику для производственных сред.
Лучше сделать резервную копию локально, а затем скопировать.