我尝试从远程主机运行 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 无法识别远程主机的本地路径....