使远程数据库备份到本地文件夹

时间:2013-11-12 17:45:08

标签: sql sql-server tsql

我在本地计算机的批处理文件中对远程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文件放在我的本地计算机中,而不是放在远程计算机中。

2 个答案:

答案 0 :(得分:2)

你需要做两件事:

  1. 在您的盒子上共享该文件夹,以便可以使用像\\MachineName\MyLocalBackups\20131011_1200_MyDbBackup.bak这样的UNC路径访问该文件夹。
  2. 授予NETWORK SERVICE对该文件夹的完全访问权限。

答案 1 :(得分: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-local-disk-using-sqlcmd?forum=sqltools