Включить SQL Server для резервного копирования на удаленных машинах / дисках

8

У меня есть SQL Server (2000, 2005 и 2008), и я хотел бы использовать агент SQL (или даже простую резервную копию базы данных «xxx» на disk = «yyy») для резервного копирования на удаленные диски.

Т.е. у меня есть подключенный диск в машине SQL, например: «M:», который сопоставляется с \\ otherbox \ someshare

По умолчанию SQL Server не позволяет создавать резервные копии на таких дисках, но я думаю, что есть способ включить это. Может ли кто-нибудь указать мне на документы?

Заранее спасибо.

Мартин Маркончини
источник
1
Вы можете просто использовать сторонний инструмент, такой как SQLBackupAndFTP, для удаленного резервного копирования SQL Server? sqlbackupandftp.com/blog/…
Ник Тейлор,

Ответы:

8

Используйте путь UNC при указании места назначения - у агента SQL нет понятия «сопоставленных» «дисков».

Кроме того, агент SQL обычно работает как «Локальная служба» или «Локальная система» и поэтому не имеет прав на удаленные общие ресурсы на других компьютерах.

У вас есть несколько вариантов:

  • Запустите агент SQL как учетную запись роли в домене. Предоставьте этой учетной записи разрешение на запись в каталог / папку, где вы хотите хранить резервные копии.

  • Запустите агент SQL как «Сетевая служба». Он будет проходить проверку подлинности на сервере общего доступа с учетной записью компьютера домена, на котором запущена служба. Предоставьте этой учетной записи разрешение на запись в каталог / папку, где вы хотите сохранить резервную копию.

  • Если у вас нет домена, создайте учетную запись с тем же именем пользователя и паролем как на компьютере, на котором размещен агент SQL, так и на компьютере, на котором размещены файлы резервных копий. Измените агент SQL, чтобы он выполнял роль этой учетной записи «роли», и предоставьте этой учетной записи разрешение на запись в каталог / общую папку, где вы хотите сохранить резервную копию. («Домен бедняка» ...)

Эван Андерсон
источник
В дополнение к упоминанию путей UNC, я бы порекомендовал пользователю фактически подключаться к пути UNC. Быстрый / простой способ сделать это - просто открыть веб-браузер и ввести его. Вам будет предложено ввести имя пользователя / пароль и, как правило, вы скажете, что хотите помнить этого пользователя / передать на будущее. Я видел слишком много людей, которые были на 99% пути и не могли понять, почему все не работает. ПРОВЕРЬТЕ СВОЕ СОЕДИНЕНИЕ! ЛОЛ! :-)
KPWINC
Это то, что я искал (часть "домена бедняков");) Спасибо!
Мартин Маркончини
4

Я полностью согласен с обоими ответами о пути UNC.

Я также хотел бы добавить, что даже с подключенными дисками у вас есть простой обходной путь. Вы можете выполнить резервное копирование на любой из обычных дисков вашего сервера. И тогда вы можете добавить

xp_cmdshell 'XCOPY [source] [destination] \flags'

Команда SQL для задания или сценарий SQL, который вы запускаете.

С xp_cmdshell вы можете сделать еще больше - например, запустить инструмент командной строки внешнего архива, например 7z, чтобы сжать файл, прежде чем скопировать его на подключенный диск (когда удаленное соединение слишком медленное ...)

PS: забыл упомянуть, что xp_cmdshell можно включить и отключить с помощью инструмента настройки поверхности и выполнения sp_configure (и по умолчанию он отключен)

Bogdan_Ch
источник
Утилита ROBOCOPY из Win2003 Resource Kit предоставляет некоторые дополнительные опции по сравнению с XCOPY, которые полезны для операций такого типа. В моем случае, возможность не перезаписывать резервные копии, ранее скопированные, или зеркально отражать две директории резервного копирования, легко реализуется без дополнительных сценариев.
Kermatt
1

Вашему агенту необходим доступ к сетевым ресурсам. Они не должны быть нанесены на карту заранее.

Вы делаете это так:

BACKUP DATABASE myDB TO DISK = '\\machine\share\dir\file.bak'

Я считаю, что если пользователь, который владеет заданием, является администратором SQL, он запускается под агентом, в противном случае он работает как пользователь, не являющийся системным администратором.

Сэм
источник
1

Если 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'
Yepeekai
источник
0

Имейте в виду, что SQL Server очень нетерпим к сетевым задержкам. Если они происходят, и они имеют тенденцию, резервное копирование не удастся. Я не рекомендую эту практику вообще для производственных сред.

Лучше сделать резервную копию локально, а затем скопировать.

Стив Джонс
источник
0

Самый простой способ - создать диск .vhd на общем сетевом ресурсе с помощью управления дисками и назначить ему букву диска. SQL может получить доступ к этому диску без каких-либо изменений.

Просто добавьте скрипт diskpart.exe в планировщик при загрузке, чтобы автоматически подключиться при перезагрузке.

пример select vdisk file = "\ {ip address / server} {networkhare} {filenamep.vhd}" attach vdisk // запоминает последнюю букву диска, назначенную.

Кимон
источник