为什么从远程机器运行 sqlcmd 时没有创建备份文件?

为什么从远程机器运行 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 管理器上运行它时,它可以正常工作。我以为是权限问题,但在两种情况下我都使用了相同的用户名。

有什么想法吗?

答案1

跟随本指南

您需要创建一个 SQL 脚本,将其中指定的数据库备份到所需位置,然后您可以从 SQLCMD 调用该 SQL 脚本。

例如如果你调用备份脚本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

答案2

如果服务器运行的是 Windows 2008 或更高版本,则在将文件写入驱动器根目录时可能会遇到问题。我以前见过这种情况。在 C:\ 上创建一个文件夹,然后将文件备份到该文件夹​​中。

答案3

Op,您是否希望备份文件出现在您执行 sqlcmd 的远程主机上?

如果是这样,您需要指定 UNC 路径,而不是本地(对于执行 sqlcmd 的主机)路径。SQL Server 无法识别远程主机的本地路径....

相关内容