У меня есть SQL Server (2000, 2005 и 2008), и я хотел бы использовать SQL Agent (или даже простую резервную копию базы данных «xxx» на disk = «yyy») для резервного копирования на удаленные диски.
То есть: у меня есть подключенный диск в машине SQL, например: «M:», который сопоставляется с \\ otherbox \ someshare
По умолчанию SQL Server не позволяет выполнять резервное копирование на такие диски, но я думаю, что есть способ включить это. Может кто-нибудь указать мне на документы?
Заранее спасибо.
При указании места назначения используйте UNC-путь - агент SQL не имеет понятия «подключенные» «диски».
Кроме того, агент SQL обычно работает как «Локальная служба» или «Локальная система» и, как таковой, не имеет прав на удаленные общие ресурсы на других компьютерах.
У вас есть несколько вариантов:
Запустите агент SQL как ролевую учетную запись в домене. Предоставьте этой учетной записи разрешение на запись в каталог / общий ресурс, где вы хотите хранить резервные копии.
Запустите агент SQL как «Сетевая служба». Он будет аутентифицироваться на сервере совместного использования с учетной записью компьютера домена компьютера, на котором запущена служба. Предоставьте этой учетной записи разрешение на запись в каталог / общий ресурс, где вы хотите сохранить резервную копию.
Если у вас нет домена, создайте учетную запись с одинаковым именем пользователя и паролем как на машине, на которой размещен агент SQL, так и на машине, на которой размещены файлы резервных копий. Измените агент SQL, чтобы он запускался от имени этой «ролевой» учетной записи, и предоставьте этой учетной записи разрешение на запись в каталог / общий ресурс, где вы хотите сохранить резервную копию. ("Владения бедняков" ...)
Я полностью согласен с обоими ответами о пути UNC.
Я также хотел бы добавить, что даже с подключенными дисками у вас есть простой обходной путь. Вы можете выполнить резервное копирование на любой из обычных дисков вашего сервера. И тогда вы можете добавить
xp_cmdshell 'XCOPY [source] [destination] \flags'
SQL-команду для выполняемого задания или SQL-скрипта.
С помощью xp_cmdshell вы можете сделать даже больше - например, запустить инструмент командной строки внешнего архива, такой как 7z, чтобы сжать файл, прежде чем вы скопируете его на подключенный диск (когда удаленное соединение слишком медленное ...)
P.S .: Забыл упомянуть, что xp_cmdshell можно включать и отключать с помощью инструмента Surface Area Configuration и выполнения sp_configure (по умолчанию он отключен)
Вашему агенту нужен доступ к общим сетевым ресурсам. Их не нужно заранее наносить на карту.
Вы делаете это так:
BACKUP DATABASE myDB TO DISK = '\\machine\share\dir\file.bak'
Я считаю, что если пользователь, которому принадлежит задание, является системным администратором sql, он работает под управлением агента, в противном случае он работает как пользователь, не являющийся пользователем сисадмина.
Если 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'
Имейте в виду, что SQL Server очень нетерпим к сетевым задержкам. Если они происходят, а они имеют тенденцию, резервное копирование завершится неудачно. Я вообще не рекомендую эту практику для производственных сред.
Лучше сделать резервную копию локально, а потом скопировать.
Самый простой способ - создать диск .vhd на общем сетевом ресурсе с помощью управления дисками и присвоить ему букву диска. SQL может получить доступ к этому диску без каких-либо изменений.
Просто добавьте сценарий diskpart.exe в планировщик при загрузке, чтобы автоматически подключаться при перезапуске.
пример выберите vdisk file = "\ {IP-адрес / сервер} {networkhare} {filenamep.vhd}" прикрепите виртуальный диск // запоминает последнюю присвоенную букву диска.