Резервное копирование БД на Remote SQL Server Express

Мне нужно создать сценарий TSQL для резервного копирования БД на удаленном SQL Server Express (2005). У меня есть SQL Server 2005 на другой коробке. Не уверен, как я могу запустить сценарий из этого SQL Server 2005 для выполнения резервного копирования.

Сценарий выглядит примерно так:

RESTORE DATABASE [myDB] FROM  DISK = N'C:\Tmp\myDB.bak' WITH  FILE = 1,
   NOUNLOAD,  STATS = 10

На самом деле, я попробовал этот сценарий SQL на удаленном SQL Server Express с помощью SQL Server Management Studio Express, и он работает нормально. Причина, по которой я задаю этот вопрос, заключается в том, что я могу запланировать задание на SQL Server 2005, но не могу создать задание расписания на удаленном SQL Server Express.

Другой способ, я думаю, это сначала создать SQL SP на SQL Server Express. Затем я напишу простое консольное приложение для подключения к SQL и запуска SP как запланированное задание Windows.

6.11.2009 21:35:36
1 ОТВЕТ
РЕШЕНИЕ

Нет необходимости делать это с помощью TSQL. SQL Server (также Express) содержит утилиту sqlmaint.exe , которая позволяет выполнять операции резервного копирования на локальном или удаленном сервере SQL. Просто напишите пакетный файл, вызывающий sqlmaint, с правильными параметрами командной строки ( документация ) и поместите этот пакетный файл в планировщик Windows.

Если вы все еще хотите сделать это с помощью TSQL, SQL Server также содержит файл osql.exe , который позволяет выполнять произвольные операторы SQL на локальном или удаленном сервере. Опять же, вы можете автоматизировать его с помощью простых пакетных файлов.

РЕДАКТИРОВАТЬ: Если вы хотите вызывать скрипт TSQL, используя свое собственное приложение, может быть полезно узнать о вашем языке программирования или технологии доступа к данным по вашему выбору.

2
6.11.2009 22:01:18
Прочитайте документ. Что такое PlantName или PlantID? Как я могу определить один? Насколько я понимаю, план определяет список баз данных (в моем случае это список баз данных в удаленном SQL Server Express.
David.Chu.ca 6.11.2009 22:14:48
Вам не нужно PlanName или PlanID. Посмотрите на последний пример в самом конце страницы.
Heinzi 6.11.2009 22:16:03
Итак, в вашем случае вы должны использовать что-то вроде «sqlmaint -S myServer -D myDB -BkUpDB C: \ Tmp». Однако обратите внимание, что имя файла резервной копии создается автоматически (см. BkUpDB на этой странице). Если вам нужно фиксированное имя файла, рассмотрите решение osql.
Heinzi 6.11.2009 22:19:51
Спасибо @Heinzi за информацию. Используя -S -D, я могу сделать одну резервную копию с одного сервера. Не уверен, смогу ли я использовать план для резервного копирования списка баз данных из списка серверов? Кстати, sqlmaint.exe работает на SQL Server Express? В MSDN говорится, что это для SQL Server 2005.
David.Chu.ca 6.11.2009 22:50:30
Я могу запустить exe, но я получил ошибку. Что-нибудь пропало? Вот ошибка: [Microsoft SQL-DMO (ODBC SQLState: 08001)] Ошибка 0: [Microsoft] [Драйвер ODBC SQL Server] [DBNETLIB] SQL Server не существует или доступ запрещен. [Microsoft] [Драйвер ODBC SQL Server] [DBNETLIB] ConnectionOpen (Connect ()).
David.Chu.ca 6.11.2009 23:40:32