1

我从本地计算机的批处理文件中针对远程 SQL Server 数据库调用此 T-SQL 脚本:

MyBatchFile.bat

"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" 
      -S RemoteIPaddress -U username -P userPassword -i D:\MyBackups\backup_db.sql

backup_db.sql

declare @backupfile nvarchar(255)

set @backupfile = N'D:\MyLocalBackups\' +
                  CONVERT(varchar(4), datepart(yy, getdate())) +
                  right('0' + CONVERT(varchar(2), datepart(mm, getdate())),2) +
                  right('0' + CONVERT(varchar(2), datepart(dd, getdate())),2) +
                  N'_' +
                  right('0' + CONVERT(varchar(2), datepart(hour, getdate())),2) +
                  right('0' + CONVERT(varchar(2), datepart(minute, getdate())),2) +
                  N'_MyDbBackup.bak'

BACKUP DATABASE MyDatabase TO DISK = @backupfile
WITH NOFORMAT, INIT,  NAME = N'MyDatabase Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10

GO

而且我希望将备份从执行它的位置放置到我的本地计算机中,但似乎它正在尝试进行备份并将其放置到远程计算机中,因此出现以下错误:

无法打开备份设备“D:\MyLocalBackups\20131011_1200_MyDbBackup.bak”。操作系统错误 21(设备未准备好。)。

我怎样才能做到这一点?

请注意,.bat文件和.sql文件放在我的本地机器上,而不是放在远程机器上。

4

2 回答 2

2

你需要做两件事:

  1. 在您的盒子上共享该文件夹,以便可以使用 UNC 路径(如\\MachineName\MyLocalBackups\20131011_1200_MyDbBackup.bak.
  2. 授予NETWORK SERVICE对该文件夹的完全访问权限。
于 2013-11-12T17:48:13.477 回答
0

也许你可以使用sp_addumpdevice

EXEC sp_addumpdevice 'disk', 'temp1', '\\MachineName\MyLocalBackups\20131011_1200_MyDbBackup.bak'
go

sqlcmd -S. -T -q BACKUP DATABASE [temp_database] TO  [temp1] WITH NOFORMAT, NOINIT,  NAME = N'temp_database-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

有用: https ://social.msdn.microsoft.com/Forums/sqlserver/en-US/21ec66c2-955d-4c9f-a805-b96c93a240d2/how-to-backup-remote-ms-sql-server-database-to-本地磁盘使用 sqlcmd?forum=sqltools

于 2017-01-27T11:56:43.397 回答