继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

自动清理数据库日志文件的方法

达令说
关注TA
已关注
手记 161
粉丝 22
获赞 120

       如何删除数据库日志文件,但是想想还是不是不方便需要手工操作,于是想结合作业实现自动清理日志文件,在清理日志文件时我加上了条件,当磁盘控空间不足多少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)

复制代码

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP