Назад | Перейти на главную страницу

Почему не создается файл резервной копии при запуске sqlcmd с удаленной машины?

Я попытался запустить sqlcmd с удаленного хоста, чтобы сделать простую резервную копию базы данных sql 2008. Команда выглядит примерно так:

sqlcmd -s xxx.xxx.xxx.xx -U username -P some_password -Q "Backup database [db] to \  
disk = 'c:\test_backup.bak' with format"

Я получаю сообщение об успешном завершении, но файл не создается.

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

Есть предположения?

следить это руководство .

Вам необходимо создать сценарий SQL, который будет выполнять резервное копирование указанной в нем базы данных в нужном месте, затем вы можете вызвать этот сценарий sql из SQLCMD.

Например, если вы вызовете сценарий резервного копирования backup.sql:

sqlcmd -S .\SQLEXPRESS -i backup.sql -o output.txt

Пример backup.sql:

DECLARE @Path NVARCHAR(1000), @FileName NVARCHAR(255), @FullPath NVARCHAR(1255)
SET @Path = '\\db1\E$\SQLServer\2008\Backups\'
SET @FileName = 'Express_' + REPLACE(CONVERT(VARCHAR(10), GETDATE(), 101), '/', '') + '.bak'
SET @FullPath = @Path + @FileName

BACKUP DATABASE Express
TO DISK = @FullPath
WITH INIT

Если сервер работает под управлением Windows 2008 или более поздней версии, могут возникнуть проблемы с записью файла в корень диска. Я видел это раньше. Создайте папку на C: \ и сделайте резервную копию файла в этой папке.

Оп, вы ожидаете, что файл резервной копии появится на удаленном хосте, на котором вы выполняете sqlcmd?

Если это так, вам нужно указать UNC-путь вместо локального (для хоста, выполняющего sqlcmd) пути. SQL Server не распознает локальный путь удаленного хоста ....