我在本地计算机的批处理文件中对远程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
文件放在我的本地计算机中,而不是放在远程计算机中。
答案 0 :(得分:2)
你需要做两件事:
\\MachineName\MyLocalBackups\20131011_1200_MyDbBackup.bak
这样的UNC路径访问该文件夹。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