Позвольте SQL Server скопировать на удаленных машинах/дисках

У Brent Ozar было несколько хороших сообщений в блоге об этом. Я считал всех их, и я никогда не собираюсь добираться для дистанционной работы.

8
задан 13 July 2009 в 18:34
6 ответов

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

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

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

  • Выполните SQL Agent как ролевую учетную запись в домене. Дайте то разрешение учетной записи писать в каталог / доля, где Вы хотели бы сохраненные резервные копии.

  • Выполните SQL Agent как "Сетевую службу". Это пройдет проверку подлинности к серверу совместного использования с доменной учетной записью компьютера машины, на которой работает сервис. Дайте то разрешение учетной записи писать в каталог / доля, где Вы хотели бы сохраненное резервное копирование.

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

8
ответ дан 2 December 2019 в 22:52
  • 1
    В дополнение к упоминанию путей UNC, I' d рекомендуют, чтобы пользователь на самом деле СОЕДИНИЛСЯ с путем UNC. Быстрый / простой способ сделать это должно просто появиться открытый веб-браузер и ввести его. You' ll быть запрошенным имя пользователя/пароль и может обычно говорить, что Вы хотите ПОМНИТЬ что пользователь/передача за будущее. I' ve, замеченный слишком много людей, которые были 99% пути там и couldn' t выясняют почему вещи didn' t работа. ПРОТЕСТИРУЙТЕ СВОЕ СОЕДИНЕНИЕ! LOL!:-) –  KPWINC 13 July 2009 в 18:49
  • 2
    That' s, что я искал (" плохой man' s domain" часть) ;) Спасибо! –  Martin Marconcini 13 July 2009 в 19:24

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

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

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

Команда SQL к заданию или сценарию SQL Вы работаете.

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

P.S.: Забыл упоминать, что xp_cmdshell может быть включен и отключен при помощи Инструмента конфигурирования Площади поверхности и путем выполнения sp_configure (и по умолчанию он отключен),

4
ответ дан 2 December 2019 в 22:52
  • 1
    Утилита ROBOCOPY от Набора Ресурса Win2003 предоставляет некоторые дополнительные возможности по XCOPY, которые полезны в этом типе операции. В моем случае, способности ни к каким резервным копиям перезаписи, ранее скопированным, или зеркало два резервных каталога, легко реализован без дополнительных сценариев. –  kermatt 29 December 2009 в 19:48

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

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

0
ответ дан 2 December 2019 в 22:52

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

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

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

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

1
ответ дан 2 December 2019 в 22:52

Если 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'
1
ответ дан 2 December 2019 в 22:52

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

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

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

0
ответ дан 17 April 2020 в 08:43

Теги

Похожие вопросы