让SQL自动备份并压缩

这里就讲如何让产生后的备份文件自动压缩并删除源文件的方法

其实这里利用的是winrar的命令行来执行压缩并删除源文件的方法的

winrar命令行的压缩命令是[winrar路径] a [参数] [压缩后的路径] [需要压缩的文件路径],这是本文需要用到的命令格式

之后我们就要解决如何让SQL来执行这个命令行了

方法就是调用SQL的exec master..xp_cmdshell @cmd的存储过程方法来执行,这样我们就能够实现我们的目的了

大概方向已经取得,之后就是按实际要求来操作它们了,这里我只讲我的使用方法,具体的还是要看大家的具体需要的

我的SQL备份是每天都要执行的,所以我在设置自动备份的时候就是把备份文件名设置成当天日期的格式的

这是备份的命令:
declare @filename varchar(100)
set @filename='D:/'+convert(char(10),getdate(),120)
--设置备份文件的路径和文件名
print @filename
backup database[databasename] to disk=@filename with NOINIT,NOUNLOAD,NAME='backup',NOSKIP,STATS=10,NOFORMAT --执行备份

这是压缩并删除源文件的命令:
declare @file varchar(100)
set @file='c:/winrar.exe a -ep -df D:/'+convert(char(10),getdate(),120)+'.rar D:/'+convert(char(10),getdate(),120) --将压缩备份文件并删除源文件的winrar命令行命令
exec master..xp_cmdshell @file --执行命令

这里解释下压缩的命令,关于备份的命令因为之前的文章说明过,这里就不作多余的解释了

这里我本来是想把@file的命令直接写在exec master..xp_cmdshell @cmd的@cmd位置的,但之后发现这里不支持使用"+"号,一下子有点郁闷,幸好后来使用变量解决了该问题。。所以这里使用了@file的变量,不这样的话,命令就无法如意执行了。
'c:/winrar.exe a -ep -df D:/'+convert(char(10),getdate(),120)+'.rar D:/'+convert(char(10),getdate(),120
)
解释下这句话的具体意思:
一般默认下winrar的程序都是安装在C:/Program Files/WinRAR下的,但是由于其中的Program Files目录名中有空格,CMD命令行中是不支持有空格的名字的,所以只好把程序复制到一个简单的路径,然后加以调用了。
本来想过使用环境变量添加path来用的,结果这个方法在cmd中可行,放在sql中调用就不行,没办法,暂时就只好重新定义winrar的路径来解决问题了。
a就是winrar压缩文件的命令参数
-ep参数的作用是不压缩文件的完整路径,也就是指压缩指定的文件。
-df参数的作用就是压缩后删除源文件
后面命令的意思就是把D盘根目录下以当天日期命名的备份文件压缩到D盘根目录,并命名为当天日期的rar文件
更多的winrar参数命令可以参考winrar的帮助文档。

-------------------------------------------------------------------------

差不多就是这样了,这个问题我花了差不多一个上午的时间来研究,当中还碰到了sql权限的问题,所以这里还要特别说一下,新建这个作业的用户必须是拥有对master数据库有读写权限的用户,不然是不能执行xp_cmdshell的存储过程的。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在 SQL Server 中设置每日自动备份,可以使用 SQL Server 代理作业。SQL Server 代理允许您安排和自动运行各种任务,包括数据库备份。 以下是设置每日自动备份的步骤: 1. 打开 SQL Server Management Studio(SSMS)并连接到要设置自动备份SQL Server 实例。 2. 在对象资源管理器中,展开 "SQL Server 代理" 节点。 3. 右键单击 "作业" 文件夹,选择 "新建作业"。 4. 在 "新建作业" 对话框中,输入作业的名称和描述。 5. 在 "步骤" 选项卡中,单击 "新建",指定步骤的名称,并选择数据库备份操作。 6. 在 "命令" 文本框中,输入备份的 T-SQL 语句,例如: ```sql BACKUP DATABASE [数据库名] TO DISK = '备份路径' WITH INIT; ``` 确保将 [数据库名] 替换为要备份的实际数据库名称,并将 '备份路径' 替换为要保存备份文件的实际路径。 7. 在 "调度" 选项卡中,单击 "新建",指定要执行作业的时间表。您可以选择每天执行一次,并指定执行时间。 8. 在 "警报" 和 "通知" 选项卡中,根据需要配置警报和通知设置。 9. 单击 "确定" 来保存作业。 现在,您已经设置了每日自动备份的作业。SQL Server 代理将按照您指定的时间表自动运行该作业,并执行数据库备份操作。 请注意,您还可以根据需要进行其他高级配置,例如备份选项(如压缩、加密等)、保留备份的时间等。此外,确保将备份文件存储在安全的位置,并定期检查备份任务的运行情况,以确保备份操作正常执行。 希望对您有所帮助!如有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值