继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
|