如何删除数据库日志文件,但是想想还是不是不方便需要手工操作,于是想结合作业实现自动清理日志文件,在清理日志文件时我加上了条件,当磁盘控空间不足多少M才会清理,下面介绍如何实现该功能。没有阅读上一篇文章的,可以通过传送门阅读(删除数据库日志文件的方法)!
阅读目录
SQL查询磁盘空间大小
存储过程添加作业
示例下载
回到顶部
SQL查询磁盘空间大小
采用内置的存储过程,即可查看各个磁盘可用空间
exec master..xp_fixeddrives
回到顶部
存储过程添加作业
GO))BEGIN dbo.usp_p_CreateJobENDGO dbo.usp_p_CreateJob( ), ), , , , )AS功能:创建SQL作业参数: @jobname:作业名称 @sql:要执行的命令 @freqtype:时间周期,month 月,week 周,day 日 @fsinterval:相对于每日的重复次数 @time:开始执行时间,对于重复执行的作业,将从0点到23:59分 @description:作业的描述*/ BEGIN ) () TRANSACTION INT 0 添加类别 ) BEGIN ' QuitWithRollback END 删除作业 ) ) @JobName ) BEGIN 检查此作业是否为多重服务器作业 ) ) ) BEGIN 多重服务器作业不操作 ' ) QuitWithRollback END ELSE BEGIN 删除[本地]作业 @JobName NULL END END NULL , , , , , , , , , OUTPUT QuitWithRollback */ , , , , , , , , , , , , 0 QuitWithRollback 1 QuitWithRollback 创建调度 int 4 8 ,end 0 end , , , , , , , @time QuitWithRollback ' QuitWithRollback TRANSACTION EndSave QuitWithRollback: EndSave:ENDGO
结合上一篇文章的usp_p_delDBLog,进行改造
GO))BEGIN dbo.usp_p_delDBLogENDGO usp_p_delDBLog( , )* 功能:收缩当前数据库日志文件* 参数 @DriveLimit:当前数据库所在磁盘空间到达多少的时候进行收缩数据库 MB* @DBLogSise:日志文件收缩至多少M 默认收缩到最小*/AS BEGIN 0 BEGIN RETURN END 当前数据库所在磁盘 ) BIGINT sysfiles #TempFile( Drive 磁盘 Available 可用大小MB ) #TempFile(Drive,Available) master..xp_fixeddrives 查询当前数据库所在磁盘剩余空间大小 #TempFile @Drive 符合条件则进行收缩日志文件 @DriveLimit BEGIN 查询出数据库对应的日志文件名称 ) ) ) SELECT B.name, A.name A B B.database_id () --设置数据库恢复模式为简单 ALTER DATABASE [] SET RECOVERY SIMPLE; --收缩日志文件 DBCC SHRINKFILE (); --恢复数据库还原模式为完整 ALTER DATABASE [' ) END #TempFileENDGO
这里主要添加了查询当前数据库所在磁盘空间剩余大小的功能
当前数据库所在磁盘 ) BIGINT sysfiles #TempFile( Drive 磁盘 Available 可用大小MB ) #TempFile(Drive,Available) master..xp_fixeddrives 查询当前数据库所在磁盘剩余空间大小 #TempFile @Drive
好了上面的准备工作做完以后可以通过以下SQL进行添加自动运行的作业
----执行条件为磁盘空间不足 5000MB,即@DriveLimit=5000 可自行配置)' varchar(100) varchar(max) varchar(6) int int varchar(1000)