继SQL Server自动备份并压缩文件后,需要上传到指定FTP。
思路是通过 ftp -n -s:c:\upload.ftp 来实现自动上传。
c:\upload.ftp是FTP命令集,格式如下:
open 192.168.1.150 user TEST 123 cd /backupdir lcd c:\sqlback prompt off put filename bye |
那么TSQL的代码主要是生成这个文件:
declare @filename varchar(100) declare @ftpfile varchar(260) declare @batchcmd varchar(200) declare @path varchar(200) set @path = 'D:\sqlback\' set @filename = 'mydatabase_db_' + convert(varchar(10), getdate(),112) + '.rar' set @ftpfile = @path + 'upload.ftp' --FTP地址 set @batchcmd = '@echo open 192.168.1.150>' + @ftpfile exec master.dbo.xp_cmdshell @batchcmd --用户名 set @batchcmd = '@echo user testuser>>' + @ftpfile exec master.dbo.xp_cmdshell @batchcmd --密码 >>字符应紧接密码后面,否则空格会被当作密码 set @batchcmd = '@echo myftppwd>>' + @ftpfile exec master.dbo.xp_cmdshell @batchcmd set @batchcmd = '@echo prompt off >>' + @ftpfile exec master.dbo.xp_cmdshell @batchcmd set @batchcmd = '@echo lcd ' + @path + '. >>' + @ftpfile exec master.dbo.xp_cmdshell @batchcmd set @batchcmd = '@echo bin >>' + @ftpfile exec master.dbo.xp_cmdshell @batchcmd set @batchcmd = '@echo put ' + @filename + ' >>' + @ftpfile exec master.dbo.xp_cmdshell @batchcmd set @batchcmd = '@echo bye >>' + @ftpfile exec master.dbo.xp_cmdshell @batchcmd --开始上传 set @batchcmd = 'ftp -n -s:' + @ftpfile exec master.dbo.xp_cmdshell @batchcmd --删除upload.ftp set @batchcmd = 'del /Q ' + @ftpfile exec master.dbo.xp_cmdshell @batchcmd |