SQL Server 大文件异地备份
2015-11-14 23:10
441 查看
通常SQL Server 的异地备份,一般都是想到使用\\ip\bakdir 的方式实现,可是在备份文件很大,比如几个T的时候,这种方法效果不是很好,文件很难写入异地服务器,出错概率较高,因此考虑使用大文件拷贝的方式座位推送。
大文件推送也有很多问题,选来选去使用Cuteftp的传输组件还是不错的,网上有很多讲VB脚本传输大文件的,实测不是很稳定,于是使用VB.NET来实现大文件的异地备份,效果还不错,分享给大家。
Module Module1
Sub Main()
Dim argParam = System.Environment.GetCommandLineArgs()
Dim MySite, fos, outFile
On Error Resume Next
fos = CreateObject("scripting.filesystemobject")
outFile = fos.OpenTextFile("\\10.7.68.111\Schedule\VBS_TRANS_LOG.txt", 8, True)
outFile.WriteLine("==========================================================================================")
outFile.WriteLine("Start Time: " & FormatDateTime(Now()))
' 创建cuteftp对象
MySite = CreateObject("CuteFTPPro.TEConnection")
' 初始化参数
MySite.Host = "10.7.68.100"
MySite.Protocol = "SFTP"
MySite.Port = 22
MySite.Retries = 30
MySite.Delay = 30
MySite.MaxConnections = 2
MySite.TransferType = "AUTO"
MySite.DataChannel = "DEFAULT"
MySite.AutoRename = "OFF"
' 用户名密码
MySite.Login = "user"
MySite.Password = "pwd"
MySite.SocksInfo = ""
MySite.ProxyInfo = ""
' 链接服务器
MySite.Connect
If CBool(MySite.IsConnected) Then
outFile.WriteLine("Connected to server: " & MySite.Host)
End If
If Err.Number > 0 Then
outFile.WriteLine("Error: " & Err.Description)
Err.Clear()
End If
' 备份和下载文件
UploadAndBackupFiles(MySite, fos, outFile, "d:\files\", "d:\bakfiles\" & FormatCurrentDate() & "\")
DownloadFilesFromSFTP(MySite, outFile, "d:\files", "/downloads/")
' Close
outFile.WriteLine("End Time: " & FormatDateTime(Now()))
outFile.WriteLine("==========================================================================================" & vbCrLf & vbCrLf)
outFile.Close
fos = Nothing
MySite.Disconnect
'MySite.Close
End Sub
' 返回时间
Function FormatCurrentDate()
FormatCurrentDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
End Function
' 上传和备份文件
Sub UploadAndBackupFiles(MySite, fs, outFile, localFolder, bakLocalFolder)
Dim oFolder, oFiles, fileName
oFolder = fs.GetFolder(localFolder)
oFiles = oFolder.Files
For Each file In oFiles
fileName = file.Name
' 检查备份文件夹
If (Not (MySite.LocalExists(bakLocalFolder))) Then
MySite.CreateLocalFolder(bakLocalFolder)
End If
If (MySite.LocalExists(localFolder & fileName)) Then
' Upload file
If (Not (MySite.RemoteExists("/public/" & fileName))) Then
outFile.WriteLine(FormatCurrentDate() & ": [UPLOAD] " & fileName)
MySite.Upload(localFolder & fileName, "/public/" & fileName)
End If
' Backup file to bak folder
outFile.WriteLine(FormatCurrentDate() & ": [BACKUP] " & fileName)
MySite.LocalRename(localFolder & fileName, bakLocalFolder & fileName)
End If
Next
End Sub
' Download files from remote SFTP
Sub DownloadFilesFromSFTP(MySite, outFile, localFolder, remoteFolder)
Dim strFileList, strFileName, i, j
MySite.LocalFolder = localFolder
MySite.RemoteFolder = remoteFolder
If CBool(MySite.RemoteExists(MySite.RemoteFolder)) Then
If CBool(MySite.LocalExists(MySite.LocalFolder)) Then
' 获取远程下载目录的文件列表,以"|||"作为分隔符
MySite.GetList("", "", "%NAME|||")
strFileList = MySite.GetResult
If Len(strFileList) <> 0 Then
i = 1
Do While True
j = InStr(i, strFileList, "|||")
If j <= 0 Then
Exit Do
End If
strFileName = Mid(strFileList, i, j - i)
outFile.WriteLine(FormatCurrentDate() & ": [DOWNLOAD] " & strFileName)
MySite.Download(strFileName)
outFile.WriteLine(FormatCurrentDate() & ": [*REMOVE*] " & strFileName)
MySite.RemoteRemove(strFileName)
'加5,因为分隔符"|||"的长度为3个字符,另外还有回车和换行2个字符
i = j + 5
Loop
Else
outFile.WriteLine("Message! There is no file in remote sftp")
End If
Else
outFile.WriteLine("Error! Local directory doesn't existing")
End If
Else
outFile.WriteLine("Error! Remote directory doesn't existing")
End If
End Sub
End Module
大文件推送也有很多问题,选来选去使用Cuteftp的传输组件还是不错的,网上有很多讲VB脚本传输大文件的,实测不是很稳定,于是使用VB.NET来实现大文件的异地备份,效果还不错,分享给大家。
Module Module1
Sub Main()
Dim argParam = System.Environment.GetCommandLineArgs()
Dim MySite, fos, outFile
On Error Resume Next
fos = CreateObject("scripting.filesystemobject")
outFile = fos.OpenTextFile("\\10.7.68.111\Schedule\VBS_TRANS_LOG.txt", 8, True)
outFile.WriteLine("==========================================================================================")
outFile.WriteLine("Start Time: " & FormatDateTime(Now()))
' 创建cuteftp对象
MySite = CreateObject("CuteFTPPro.TEConnection")
' 初始化参数
MySite.Host = "10.7.68.100"
MySite.Protocol = "SFTP"
MySite.Port = 22
MySite.Retries = 30
MySite.Delay = 30
MySite.MaxConnections = 2
MySite.TransferType = "AUTO"
MySite.DataChannel = "DEFAULT"
MySite.AutoRename = "OFF"
' 用户名密码
MySite.Login = "user"
MySite.Password = "pwd"
MySite.SocksInfo = ""
MySite.ProxyInfo = ""
' 链接服务器
MySite.Connect
If CBool(MySite.IsConnected) Then
outFile.WriteLine("Connected to server: " & MySite.Host)
End If
If Err.Number > 0 Then
outFile.WriteLine("Error: " & Err.Description)
Err.Clear()
End If
' 备份和下载文件
UploadAndBackupFiles(MySite, fos, outFile, "d:\files\", "d:\bakfiles\" & FormatCurrentDate() & "\")
DownloadFilesFromSFTP(MySite, outFile, "d:\files", "/downloads/")
' Close
outFile.WriteLine("End Time: " & FormatDateTime(Now()))
outFile.WriteLine("==========================================================================================" & vbCrLf & vbCrLf)
outFile.Close
fos = Nothing
MySite.Disconnect
'MySite.Close
End Sub
' 返回时间
Function FormatCurrentDate()
FormatCurrentDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
End Function
' 上传和备份文件
Sub UploadAndBackupFiles(MySite, fs, outFile, localFolder, bakLocalFolder)
Dim oFolder, oFiles, fileName
oFolder = fs.GetFolder(localFolder)
oFiles = oFolder.Files
For Each file In oFiles
fileName = file.Name
' 检查备份文件夹
If (Not (MySite.LocalExists(bakLocalFolder))) Then
MySite.CreateLocalFolder(bakLocalFolder)
End If
If (MySite.LocalExists(localFolder & fileName)) Then
' Upload file
If (Not (MySite.RemoteExists("/public/" & fileName))) Then
outFile.WriteLine(FormatCurrentDate() & ": [UPLOAD] " & fileName)
MySite.Upload(localFolder & fileName, "/public/" & fileName)
End If
' Backup file to bak folder
outFile.WriteLine(FormatCurrentDate() & ": [BACKUP] " & fileName)
MySite.LocalRename(localFolder & fileName, bakLocalFolder & fileName)
End If
Next
End Sub
' Download files from remote SFTP
Sub DownloadFilesFromSFTP(MySite, outFile, localFolder, remoteFolder)
Dim strFileList, strFileName, i, j
MySite.LocalFolder = localFolder
MySite.RemoteFolder = remoteFolder
If CBool(MySite.RemoteExists(MySite.RemoteFolder)) Then
If CBool(MySite.LocalExists(MySite.LocalFolder)) Then
' 获取远程下载目录的文件列表,以"|||"作为分隔符
MySite.GetList("", "", "%NAME|||")
strFileList = MySite.GetResult
If Len(strFileList) <> 0 Then
i = 1
Do While True
j = InStr(i, strFileList, "|||")
If j <= 0 Then
Exit Do
End If
strFileName = Mid(strFileList, i, j - i)
outFile.WriteLine(FormatCurrentDate() & ": [DOWNLOAD] " & strFileName)
MySite.Download(strFileName)
outFile.WriteLine(FormatCurrentDate() & ": [*REMOVE*] " & strFileName)
MySite.RemoteRemove(strFileName)
'加5,因为分隔符"|||"的长度为3个字符,另外还有回车和换行2个字符
i = j + 5
Loop
Else
outFile.WriteLine("Message! There is no file in remote sftp")
End If
Else
outFile.WriteLine("Error! Local directory doesn't existing")
End If
Else
outFile.WriteLine("Error! Remote directory doesn't existing")
End If
End Sub
End Module
相关文章推荐
- 小心服务器内存居高不下的元凶--WebAPI服务
- 运维入门
- Linux5.9无人值守安装
- 数据中心和云未来的十二大趋势
- 用vsftp快速搭建ftp服务器
- Linux快速构建apache web服务器
- 服务器监控策略浅谈
- 如何降低服务器采购成本 原理分析
- 路由器备份配置
- 建议的服务器分区办法
- 服务器托管六大优势分析
- Erlang实现的一个Web服务器代码实例
- 服务器技术全面解析
- 备份线路的配置
- 保护DNS服务器的几点方法小结
- 我国成为全球第二大服务器消费国
- 服务器 安全检查要点[星外提供]
- 推荐Sql server一些常见性能问题的解决方法
- 服务器应用自动重新启动IIS批处理[原创]_DOS/BAT_脚本之家