Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Удаленный запуск бэкапа  [new]
nk13
Member

Откуда:
Сообщений: 137
Простой вопрос: можно ли на сервере 1 запустить бэкап БД с сервера 2? Например с помощью "связанного сервера"?

Пример: на "сервер1" создаю связанный сервер "сервер2" соединение через учетку с правами сисадмина. После этого пробую на сервере 1 сделать бэкап из-под msdb следующим скриптом:

автор
BACKUP DATABASE [сервер2.база TO DISK = N'путь к файлу' WITH NOFORMAT, NOINIT, NAME = N'название', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10, CHECKSUM, CONTINUE_AFTER_ERROR
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'сервер2.база' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'сервер2.база' )
if @backupSetId is null begin raiserror(N'Ошибка верификации. Сведения о резервном копировании для базы данных "сервер2.база" не найдены.', 16, 1) end
RESTORE VERIFYONLY FROM DISK = N'путь к файлу' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
GO


В чем практическая необходимость? Сервер 2 огорожен по исходящим соединениям в силу определенных причин, а мне необходимо перемещать бэкап на определенное внешнее хранилище и в случае ошибки бэкапирования оперативно об этом узнавать (использую стандартный компонент Database Mail). Если первый момент я могу обойти с помощью создания бэкапа локально и переносить его через некоторое достаточное время скриптом, инициируемом на другом сервере, то вот отслеживание возможных проблем и сбоев бэкапирования становиться проблематичным.
14 апр 16, 12:18    [19055683]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
Glory
Member

Откуда:
Сообщений: 104751
nk13
Простой вопрос: можно ли на сервере 1 запустить бэкап БД с сервера 2? Например с помощью "связанного сервера"?

если вы про команду BACKUP, то разумеется нет. Для этого достаточно ознакомится с синтаксисом этой команды

если вы про передачу связанному серверу текста команды, которая будет выполнена на стороне того сервера, то передавать тексты команд можно

nk13
Сервер 2 огорожен по исходящим соединениям в силу определенных причин, а мне необходимо перемещать бэкап на определенное внешнее хранилище и в случае ошибки бэкапирования оперативно об этом узнавать (использую стандартный компонент Database Mail).

Что мешает настроить регламентные задачи сразу на Сервер 2 ? Зачем для этого нужен Сервер 1 ?

Сообщение было отредактировано: 14 апр 16, 12:28
14 апр 16, 12:24    [19055736]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31912
nk13
Если первый момент я могу обойти с помощью создания бэкапа локально и переносить его через некоторое достаточное время скриптом, инициируемом на другом сервере, то вот отслеживание возможных проблем и сбоев бэкапирования становиться проблематичным.
В чём проблема "отслеживать..."? Зачем для этого делать бакапы через линкед-сервер, чем это поможет отслеживанию?
nk13
Простой вопрос: можно ли на сервере 1 запустить бэкап БД с сервера 2? Например с помощью "связанного сервера"?
Напрямую по моему нельзя.
Но зачем? Запускайте через линкед-сервер хранимую процедуру или скрипт на удалённом сервере, пусть удалённый сервер сам делает бакап, но с управлением на этом сервере.
14 апр 16, 12:27    [19055758]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8723
Непонятно для чего линк, подключайтесь студией и выполняйте запрос.
14 апр 16, 13:33    [19056274]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
nk13
Member

Откуда:
Сообщений: 137
Glory
если вы про передачу связанному серверу текста команды, которая будет выполнена на стороне того сервера, то передавать тексты команд можно

Каким образом?

Glory
Что мешает настроить регламентные задачи сразу на Сервер 2 ? Зачем для этого нужен Сервер 1 ?

1 причина в том, что я не могу сохранить бэкап во вне, только локально.
2 причина в том, что если я буду создавать его локально, а потом забирать через некоторое время другим сервером из вне, я не смогу автоматически отследить возникали ли какие-то проблемы при создании бэкапа, также придется проверять сам факт создания.


alexeyvg
Напрямую по моему нельзя.
Но зачем? Запускайте через линкед-сервер хранимую процедуру или скрипт на удалённом сервере, пусть удалённый сервер сам делает бакап, но с управлением на этом сервере.

Т.е. если я правильно понял, можно создать хранимую процедуру на сервере 1, и с помощью связанного сервера вызывать ее на сервере 2. Вариант неплохой, только есть два вопроса, если позволите:
1) Если поместить скрипт бэкапирования в процедуру, эта процедура будет возвращать предупреждения и ошибки или их нужно отдельно обрабатывать?
2) После запуска процедуры произойдет только запуск бэкапирования или процедура будет ожидать его окончания?
14 апр 16, 13:58    [19056461]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
nk13
Member

Откуда:
Сообщений: 137
Владислав Колосов
Непонятно для чего линк, подключайтесь студией и выполняйте запрос.


Мне нужно, автоматическое бэкапирование, к примеру через джоб, а не ручное.
14 апр 16, 14:00    [19056477]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
iljy
Member

Откуда:
Сообщений: 8711
nk13
Владислав Колосов
Непонятно для чего линк, подключайтесь студией и выполняйте запрос.


Мне нужно, автоматическое бэкапирование, к примеру через джоб, а не ручное.


Ну так и настройте джоб на сервере2, к чему велосипеды из костылей сооружать? Бакап в любом случае выполняется сервером локально, не важно, как вы передали ему команду.
14 апр 16, 14:03    [19056502]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
nk13
Member

Откуда:
Сообщений: 137
nk13
Владислав Колосов
Непонятно для чего линк, подключайтесь студией и выполняйте запрос.


Мне нужно, автоматическое бэкапирование, к примеру через джоб, а не ручное.


Т.е. в ручную естественно я могу подключиться с любого рабочего места, где установлена мэнеджмент студия, но как подобное сделать в задании?
14 апр 16, 14:04    [19056506]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
Glory
Member

Откуда:
Сообщений: 104751
nk13
Мне нужно, автоматическое бэкапирование, к примеру через джоб, а не ручное.

BOL - Automated Administration Across an Enterprise
14 апр 16, 14:04    [19056509]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
nk13
Member

Откуда:
Сообщений: 137
iljy
Бакап в любом случае выполняется сервером локально, не важно, как вы передали ему команду.


Почему я на многих серверах сразу сохраняю бэкап на сетевой ресурс. Для этого достаточно, чтобы служба sql server выполнялась под правами администратора домена и на конечную папку были настроены соответствующие разрешения.

Можно конечно делать и как вы говорите, но у меня возникает две проблемы. Я не смогу получить сообщение на электронку в случае возникновения сбоя (сетевая настройка просто не пропустит сообщение, уже проверил), второй момент придется делать второе задание на другом сервере (не важно крон это или тот же джоб на sql'е), которое будет вытаскивать копировать эти бэкапы с исходного сервера на необходимый ресурс. При этом нужно будет городить всякие доп. проверки на целостность бэкапа и в принципе его наличие. Можно конечно пойти этим путем, но не очень хочется.
14 апр 16, 14:11    [19056555]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
nk13
Member

Откуда:
Сообщений: 137
Glory
nk13
Мне нужно, автоматическое бэкапирование, к примеру через джоб, а не ручное.

BOL - Automated Administration Across an Enterprise


Вот это очень интересно, пошел изучать.
Как всегда спасибо, за помощь!
14 апр 16, 14:15    [19056589]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
iljy
Member

Откуда:
Сообщений: 8711
nk13
iljy
Бакап в любом случае выполняется сервером локально, не важно, как вы передали ему команду.


Почему я на многих серверах сразу сохраняю бэкап на сетевой ресурс. Для этого достаточно, чтобы служба sql server выполнялась под правами администратора домена и на конечную папку были настроены соответствующие разрешения.

Можно конечно делать и как вы говорите, но у меня возникает две проблемы. Я не смогу получить сообщение на электронку в случае возникновения сбоя (сетевая настройка просто не пропустит сообщение, уже проверил), второй момент придется делать второе задание на другом сервере (не важно крон это или тот же джоб на sql'е), которое будет вытаскивать копировать эти бэкапы с исходного сервера на необходимый ресурс. При этом нужно будет городить всякие доп. проверки на целостность бэкапа и в принципе его наличие. Можно конечно пойти этим путем, но не очень хочется.



1. Сервер может писать бакап на любой носитель, доступный локальной системе с соответствующими правами. Естественно, это может быть и сетевой ресурс. Но выполняется бакап все равно самим сервером.
2. А почему тот же самый джоб не может выполнять рассылку и т.п.? Или у вас сервер2 не может почту отправлять?
3. Сервер может сам писать на сетевой ресурс, но на практике никто так не делает. Причина более чем банальна: сеть может сбойнуть во время работы. Гораздо надежнее бакапить локально, а потом готовый бакап отправлять по сети (с архивацией, если сам сервер вдруг не может).
14 апр 16, 14:26    [19056687]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31912
nk13
1) Если поместить скрипт бэкапирования в процедуру, эта процедура будет возвращать предупреждения и ошибки или их нужно отдельно обрабатывать?
2) После запуска процедуры произойдет только запуск бэкапирования или процедура будет ожидать его окончания?
1) Будет возвращать. Что значит отдельно? Обрабатывайте, так же, как сейчас.
2) Будет ждать.
nk13
Т.е. если я правильно понял, можно создать хранимую процедуру на сервере 1, и с помощью связанного сервера вызывать ее на сервере 2.
Да.
Да можно и без процедуры.
Вот прямо скрипт, который вы написали, можно выполнить на другом сервере.
Что то типа такого:
declare @str nvarchar(max)
set @str = '
BACKUP DATABASE база TO DISK = N''путь к файлу'' 
WITH NOFORMAT, NOINIT, NAME = N''название'', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10, CHECKSUM, CONTINUE_AFTER_ERROR
declare @backupSetId as int
select @backupSetId = position 
from msdb..backupset 
where database_name=N''база'' and backup_set_id=
    (select max(backup_set_id) from msdb..backupset where database_name=N''база'' )
if @backupSetId is null begin 
raiserror(N''Ошибка верификации. Сведения о резервном копировании для базы данных "сервер2.база" не найдены.'', 16, 1) end
RESTORE VERIFYONLY FROM DISK = N''путь к файлу'' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
'
exec server2.master.dbo.sp_executesql @str
14 апр 16, 19:41    [19058449]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31912
alexeyvg
nk13
Т.е. если я правильно понял, можно создать хранимую процедуру на сервере 1, и с помощью связанного сервера вызывать ее на сервере 2.
Да.
То есть, конечно, если делать хранимую процедуру с командами бакапа, то её надо делать на том сервере, где будет делаться бакап, то есть на сервер2.
А сделать на сервер1, а вызвать на сервер2 не получится, её же там нет.
14 апр 16, 19:44    [19058460]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
nk13
Member

Откуда:
Сообщений: 137
iljy
1. Сервер может писать бакап на любой носитель, доступный локальной системе с соответствующими правами. Естественно, это может быть и сетевой ресурс. Но выполняется бакап все равно самим сервером.
2. А почему тот же самый джоб не может выполнять рассылку и т.п.? Или у вас сервер2 не может почту отправлять?
3. Сервер может сам писать на сетевой ресурс, но на практике никто так не делает. Причина более чем банальна: сеть может сбойнуть во время работы. Гораздо надежнее бакапить локально, а потом готовый бакап отправлять по сети (с архивацией, если сам сервер вдруг не может).


1. С этим полностью согласен.
2. Может, но у нас закрыты исходящие порты для этого сервера, открыты только входящие. С самого сервера нельзя ни бэкапы переместить во вне его, не сообщение отправить, оно тупо до почтового сервера не дойдет. Почему так, отдельный разговор, эти сетевые политики я поменять не могу.
3. Тоже в принципе согласен.
15 апр 16, 07:53    [19059553]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
nk13
Member

Откуда:
Сообщений: 137
alexeyvg
nk13
1) Если поместить скрипт бэкапирования в процедуру, эта процедура будет возвращать предупреждения и ошибки или их нужно отдельно обрабатывать?
2) После запуска процедуры произойдет только запуск бэкапирования или процедура будет ожидать его окончания?
1) Будет возвращать. Что значит отдельно? Обрабатывайте, так же, как сейчас.
2) Будет ждать.
nk13
Т.е. если я правильно понял, можно создать хранимую процедуру на сервере 1, и с помощью связанного сервера вызывать ее на сервере 2.
Да.
Да можно и без процедуры.
Вот прямо скрипт, который вы написали, можно выполнить на другом сервере.
Что то типа такого:
declare @str nvarchar(max)
set @str = '
BACKUP DATABASE база TO DISK = N''путь к файлу'' 
WITH NOFORMAT, NOINIT, NAME = N''название'', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10, CHECKSUM, CONTINUE_AFTER_ERROR
declare @backupSetId as int
select @backupSetId = position 
from msdb..backupset 
where database_name=N''база'' and backup_set_id=
    (select max(backup_set_id) from msdb..backupset where database_name=N''база'' )
if @backupSetId is null begin 
raiserror(N''Ошибка верификации. Сведения о резервном копировании для базы данных "сервер2.база" не найдены.'', 16, 1) end
RESTORE VERIFYONLY FROM DISK = N''путь к файлу'' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
'
exec server2.master.dbo.sp_executesql @str


Ну да, обычный динамический sql. Я в принципе так и понял. Вопрос только если сделать это отдельным шагом, шаг дождется создания бэкапа или нет. Пойду проверю.
15 апр 16, 08:05    [19059573]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
nk13
Member

Откуда:
Сообщений: 137
alexeyvg
А сделать на сервер1, а вызвать на сервер2 не получится, её же там нет.


Да логично, обойдемся без процедур.
15 апр 16, 08:07    [19059577]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
nk13
Member

Откуда:
Сообщений: 137
alexeyvg,

Все получилось, как вы посоветовали, спасибо!

Но еще попробую разобраться с Automated Administration Across an Enterprise, тоже интересная тема.
15 апр 16, 08:22    [19059607]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31912
nk13
Вопрос только если сделать это отдельным шагом, шаг дождется создания бэкапа или нет. Пойду проверю.
Разумеется. Это же обычный код, там последовательно выполняются команды, в т.ч. бакап, шаг задания завершится, когда все команды будут выполнены.
nk13
Но еще попробую разобраться с Automated Administration Across an Enterprise, тоже интересная тема.
Да, полезная вещь, если много серверов; разобраться в любом случае будет полезно.
15 апр 16, 11:04    [19060590]     Ответить | Цитировать Сообщить модератору
 Re: Удаленный запуск бэкапа  [new]
nk13
Member

Откуда:
Сообщений: 137
alexeyvg,

Еще раз благодарю!
25 апр 16, 07:07    [19100892]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить