我需要使用批处理文件自动化此过程。从服务器复制文件很容易,但如何自动压缩备份呢?
我需要的完整流程如下:
1.每晚运行备份 2.将备份压缩以减小大小(使用唯一的zip文件名) 3.将zip文件移动到设置为数据库服务器上的网络驱动器的远程服务器
我承认压缩部分让我感到困惑。任何建议都将不胜感激。
提前致谢。
你可以(而且应该!)研究一下SQL Server 维护计划。
这些计划可以帮助你自动化以下操作:
我不确定它们是否内置了对于打包压缩和复制到远程服务器的支持,但你肯定可以通过维护计划来自动化备份部分,以及通过某种命令文件来完成其余部分。
如果您只是卡在批处理文件中如何压缩的问题上:
为了获得唯一的文件名,我通常嵌入日期/时间:yyyymmddhhMMss-backup.7z
你可以通过命令行进行压缩,例如使用 RAR。只需将ZIP命令添加到复制的位置即可。如果在T-SQL中操作,可以使用 xp_cmdshell 执行ZIP命令。
对于豪华选项,请查看 Red Gate Backup,它使这个过程相当轻松。
既然你已经有了2008,那么就已经安装了PowerShell。我建议在成功备份后查看一个psh脚本,将其压缩并通过网络复制。这很可能是备份之后的第二步。
你也可以老派一些,编写一个批处理文件来进行压缩和复制。然后在备份作业/步骤之后再作为cmdshell作业步骤调用它。
如果你是一名程序员,你可以编写一个应用程序,通过SMO获取你的数据库备份,并使用可用的库将此文件压缩为.gz文件。
请尝试这个链接:[http://www.sqlhub.com/2009/05/copy-files-with-sql-server-from-one.html][1]
简单来说:
1 - 您必须启用“Ole Automation Procedures”
2 - 修改并运行此脚本进行测试:
DECLARE @FsObjId INTEGER
DECLARE @Source VARCHAR(4096)
DECLARE @Destination VARCHAR(4096)
SET @Source = 'C:\ritesh'
SET @Destination= 'D:\ritesh'
--creare OLE Automation instance
EXEC sp_OACreate 'Scripting.FileSystemObject', @FsObjId OUTPUT
--call method of OLE Automation
EXEC sp_OAMethod @FsObjId, 'CopyFolder', NULL, @Source, @Destination
--once you finish copy, destroy object
EXEC sp_OADestroy @FsObjId
3 - 创建一个维护计划:
3.1 - 添加一个“备份数据库任务”,并确保选择“设置备份压缩”= 压缩备份。(这将以压缩格式创建您的备份)
3.2 - 添加一个“执行 T-SQL 语句任务”,使用上述脚本,该脚本将在 3.1 任务之后执行,将移动您的文件 :)
你可以使用备份助手。这将是一个解决方案。
你需要为这个程序设置一个时间表(比如每小时)。 然后你需要在Appsettings.json中配置你的备份文件路径和FTP凭据。
{ "AppSettings": {
"BackupPaths": [
{
"LocalPath": "C:\\Users\\Sinan\\Desktop\\FtpBackup\\TestDb",
"RemotePath": "TestDb"
},
{
"LocalPath": "C:\\Users\\Sinan\\Desktop\\FtpBackup\\TestHangFireDb",
"RemotePath": "TestHangFireDb"
},
{
"LocalPath": "C:\\Users\\Sinan\\Desktop\\FtpBackup\\TestLogDb",
"RemotePath": "TestLogDb"
}
],
"BackupFileExtensions": [ ".bak" ],
"DeleteFilesAfterSend": true,
"ZipFilesBeforeSend": true,
"DeleteZipFilesAfterSend": false,
"WriteLog": true,
"Providers": {
"FtpServer": {
"Enabled": true,
"Host": "ftphost",
"Port": "21",
"Username": "ftpusername",
"Password": "ftppassword"
}
} } }