亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

使用作業自動清理數據庫日志文件

2024-07-21 02:49:51
字體:
來源:轉載
供稿:網友
使用作業自動清理數據庫日志文件

在上一篇文章中介紹了如何刪除數據庫日志文件,但是想想還是不是不方便需要手工操作,于是想結合作業實現自動清理日志文件,在清理日志文件時我加上了條件,當磁盤控空間不足多少M才會清理,下面介紹如何實現該功能。沒有閱讀上一篇文章的,可以通過傳送門閱讀(刪除數據庫日志文件的方法)!

閱讀目錄

  • SQL查詢磁盤空間大小
  • 存儲過程添加作業
  • 示例下載
回到頂部SQL查詢磁盤空間大小

  采用內置的存儲過程,即可查看各個磁盤可用空間

  

exec master..xp_fixeddrives

回到頂部存儲過程添加作業

  

GOIF EXISTS(SELECT 1 FROM sysobjects WHERE id=OBJECT_ID('usp_p_CreateJob'))BEGIN    DROP PROC dbo.usp_p_CreateJobENDGOCREATE PROCEDURE dbo.usp_p_CreateJob(    @jobname varchar(100),             @sql VARCHAR(MAX),                          @freqtype varchar(6)='day',         @fsinterval int=1,                    @time int=235959,                         @description VARCHAR(1000)=''           )AS/*功能:創建SQL作業參數:    @jobname:作業名稱    @sql:要執行的命令    @freqtype:時間周期,month 月,week 周,day 日    @fsinterval:相對于每日的重復次數    @time:開始執行時間,對于重復執行的作業,將從0點到23:59分    @description:作業的描述*/ BEGIN    DECLARE @dbname AS VARCHAR(500)    SET @dbname=DB_NAME()            BEGIN TRANSACTION    DECLARE @ReturnCode INT    SELECT @ReturnCode = 0        --添加類別    IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name='添加作業' AND category_class=1)    BEGIN        EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'添加作業'        IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback    END        --刪除作業      DECLARE @JobID BINARY(16)       DECLARE @ErrMsg NVARCHAR(500)          SELECT  @JobID = job_id  FROM msdb.dbo.sysjobs WHERE name = @JobName      IF ( @JobID IS NOT NULL )      BEGIN         -- 檢查此作業是否為多重服務器作業        IF ( EXISTS ( SELECT * FROM msdb.dbo.sysjobservers WHERE ( job_id = @JobID ) AND ( server_id <> 0 ) ) )        BEGIN          --多重服務器作業不操作          SET @ErrMsg = '無法導入作業"' + @JobName + '",因為已經有相同名稱的多重服務器作業。'          RAISERROR (@ErrMsg, 16, 1)           GOTO QuitWithRollback        END        ELSE         BEGIN          -- 刪除[本地]作業           EXECUTE msdb.dbo.sp_delete_job @job_name = @JobName          SELECT @JobID = NULL         END       END      SET @JobID = NULL        EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=@jobname,             @enabled=1,             @notify_level_eventlog=2,             @notify_level_email=0,             @notify_level_netsend=0,             @notify_level_page=0,             @delete_level=0,             @description=@description,             @category_name=N'添加作業',             @owner_login_name=N'sa', @job_id = @jobId OUTPUT    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback    /****** Object:  Step [數據同步]    Script Date: 01/25/2014 23:00:36 ******/    EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=@jobname,             @step_id=1,             @cmdexec_success_code=0,             @on_success_action=1,             @on_success_step_id=0,             @on_fail_action=2,             @on_fail_step_id=0,             @retry_attempts=5,             @retry_interval=5,             @os_run_priority=0, @subsystem=N'TSQL',             @command= @sql,             @database_name=@dbname,             @flags=0    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback    EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback        --創建調度    declare @ftype int,@fstype int,@ffactor int    select @ftype=case @freqtype when 'day' then 4                                            when 'week' then 8                                            when 'month' then 16 end            ,@fstype=case @fsinterval when 1 then 0 else 8 end    if @fsinterval<>1 set @time=0    set @ffactor=case @freqtype when 'day' then 0 else 1 end        EXEC msdb..sp_add_jobschedule @job_name=@jobname,         @name = @jobname,        @freq_type=@ftype ,                                                @freq_interval=1,                                               @freq_subday_type=@fstype,                               @freq_subday_interval=@fsinterval,                @freq_recurrence_factor=@ffactor,        @active_start_time=@time                                     IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback    EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'    IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback    COMMIT TRANSACTION    GOTO EndSave    QuitWithRollback:        IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION    EndSave:ENDGO

結合上一篇文章的usp_p_delDBLog,進行改造

  

GOIF EXISTS(SELECT 1 FROM sysobjects WHERE id=OBJECT_ID('usp_p_delDBLog'))BEGIN    DROP PROC dbo.usp_p_delDBLogENDGOCREATE PROC usp_p_delDBLog(    @DriveLimit AS BIGINT,    @DBLogSise AS INT =0)/**    功能:收縮當前數據庫日志文件*    參數  @DriveLimit:當前數據庫所在磁盤空間到達多少的時候進行收縮數據庫  MB*          @DBLogSise:日志文件收縮至多少M 默認收縮到最小*/AS BEGIN    IF @DBLogSise<0 OR @DriveLimit<0    BEGIN        RETURN    END        --當前數據庫所在磁盤    DECLARE @Drive AS VARCHAR(10)    DECLARE @Available AS BIGINT    SELECT TOP 1  @Drive=SUBSTRING(filename,1,1)  from   sysfiles    CREATE TABLE #TempFile(        Drive VARCHAR(10),--磁盤        Available BIGINT --可用大小MB    )    INSERT INTO #TempFile(Drive,Available)    exec master..xp_fixeddrives    --查詢當前數據庫所在磁盤剩余空間大小    SELECT @Available=Available FROM #TempFile    WHERE Drive=@Drive    --符合條件則進行收縮日志文件    IF @Available<=@DriveLimit    BEGIN            --查詢出數據庫對應的日志文件名稱        DECLARE @strDBName AS NVARCHAR(500)        DECLARE @strLogName AS NVARCHAR(500)        DECLARE @strSQL AS VARCHAR(1000)                SELECT             @strLogName=B.name,            @strDBName=A.name        FROM master.sys.databases AS A        INNER JOIN sys.master_files AS B        ON A.database_id = B.database_id        WHERE A.database_id=DB_ID()                     SET @strSQL='        --設置數據庫恢復模式為簡單        ALTER DATABASE ['+@strDBName+'] SET RECOVERY SIMPLE;        --收縮日志文件        DBCC SHRINKFILE ('''+@strLogName+''' , '+CONVERT(VARCHAR(20),@DBLogSise)+');        --恢復數據庫還原模式為完整        ALTER DATABASE ['+@strDBName+'] SET RECOVERY FULL '        exec(@strSQL)        END        DROP TABLE #TempFileENDGO

這里主要添加了查詢當前數據庫所在磁盤空間剩余大小的功能

    --當前數據庫所在磁盤    DECLARE @Drive AS VARCHAR(10)    DECLARE @Available AS BIGINT    SELECT TOP 1  @Drive=SUBSTRING(filename,1,1)  from   sysfiles    CREATE TABLE #TempFile(        Drive VARCHAR(10),--磁盤        Available BIGINT --可用大小MB    )    INSERT INTO #TempFile(Drive,Available)    exec master..xp_fixeddrives    --查詢當前數據庫所在磁盤剩余空間大小    SELECT @Available=Available FROM #TempFile    WHERE Drive=@Drive

好了上面的準備工作做完以后可以通過以下SQL進行添加自動運行的作業

--添加作業--作業每天間隔兩小時執行一次--執行條件為磁盤空間不足 5000MB,即@DriveLimit=5000 可自行配置DECLARE @@jobname AS VARCHAR(1000)SELECT @@jobname=DB_NAME()+'_自動清理當前數據庫日志文件'EXEC dbo.usp_p_CreateJob @jobname = @@jobname, -- varchar(100)    @sql = 'EXEC usp_p_delDBLog @DriveLimit=5000,@DBLogSise=0', -- varchar(max)    @freqtype = 'day', -- varchar(6)    @fsinterval = 2, -- int    @time = 235959, -- int    @description = '自動清理當前數據庫日志文件' -- varchar(1000)

回到頂部示例下載

示例sql

  

   相關閱讀:附加沒有日志文件的數據庫方法

刪除數據庫日志文件的方法


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线播放精品一区二区三区| 91sao在线观看国产| 日韩成人中文字幕在线观看| 国产精品久久久999| 国产69久久精品成人看| 日韩av在线免费播放| 国产美女精品视频免费观看| 国产999精品| 亚洲黄页网在线观看| 国产精品女主播| 亚洲午夜小视频| 国产精品大陆在线观看| 亚洲电影在线观看| 欧美激情亚洲精品| 久久精品久久久久久国产 免费| 亚洲欧美一区二区三区在线| 欧美国产高跟鞋裸体秀xxxhd| 国产成人精品a视频一区www| 成人信息集中地欧美| 97碰碰碰免费色视频| 国产精品久久久久久av福利| 亚洲第一网站男人都懂| 97视频国产在线| 91美女片黄在线观看游戏| 欧美日韩中文字幕| 日韩最新av在线| 在线观看日韩专区| 欧美激情一级二级| 国产精品福利久久久| 欧美精品性视频| 中文字幕不卡在线视频极品| 亚洲成人av资源网| 欧美高清电影在线看| 亚洲精品国精品久久99热一| 91久久精品在线| 国产精品视频午夜| 亚洲一区二区久久| 色偷偷综合社区| 成人免费视频97| 日本欧美一级片| 久久久国产精品视频| 国产一区二区三区在线播放免费观看| 日韩电视剧在线观看免费网站| 亚洲自拍在线观看| 国产一区二区黄| 91在线视频精品| 国产亚洲精品一区二区| 精品欧美一区二区三区| 久久久这里只有精品视频| 成人激情视频在线播放| 日韩电影中文字幕在线观看| 亚洲a在线观看| 久久精品国产清自在天天线| 久久网福利资源网站| 91精品国产91久久久久久| 欧美亚洲视频在线观看| 日本高清+成人网在线观看| 亚洲人成网在线播放| 亚洲xxxxx| 精品一区电影国产| 欧美电影免费观看电视剧大全| 久久福利网址导航| 国产精品一区av| 欧美国产日韩精品| 91精品国产综合久久香蕉922| 92版电视剧仙鹤神针在线观看| 亚洲色图偷窥自拍| 91国内精品久久| 91精品国产91久久| 国产极品jizzhd欧美| 91久久精品日日躁夜夜躁国产| 91夜夜未满十八勿入爽爽影院| 亚洲人高潮女人毛茸茸| 国产视频999| 欧洲亚洲妇女av| 日韩视频免费中文字幕| 亚洲国产日韩欧美在线动漫| 国产欧美日韩中文字幕在线| 欧美亚州一区二区三区| 日韩电影免费在线观看| 中国日韩欧美久久久久久久久| 九九久久国产精品| 亚洲天堂男人天堂| 亚洲图中文字幕| 欧美最猛性xxxxx亚洲精品| 欧美日韩成人在线播放| 九九热精品视频| 亚洲欧美另类自拍| 久久天天躁狠狠躁老女人| 亚洲free性xxxx护士hd| 性欧美暴力猛交69hd| 欧美色欧美亚洲高清在线视频| 亚洲а∨天堂久久精品喷水| 日韩中文字幕第一页| 最近2019年日本中文免费字幕| 尤物tv国产一区| 久久久久久香蕉网| 中文字幕精品www乱入免费视频| 韩国v欧美v日本v亚洲| 最新91在线视频| 久久久久国产精品www| 久久久91精品国产| 色综合伊人色综合网| 欧美成人午夜视频| 国产在线精品自拍| 久久精品久久久久久| 国产精品999999| 亚洲性视频网址| 色99之美女主播在线视频| 欧洲s码亚洲m码精品一区| 久久九九全国免费精品观看| 国产精品久久精品| 欧美激情伊人电影| 色综合天天综合网国产成人网| 亚洲免费精彩视频| 国产精品流白浆视频| 国产精品亚洲欧美导航| 日韩国产欧美精品一区二区三区| 色综合91久久精品中文字幕| www.日韩免费| 一区二区av在线| 国产成人在线播放| 欧美一级bbbbb性bbbb喷潮片| 亚洲字幕一区二区| 国产精品9999| 97超级碰碰碰久久久| 日韩欧美亚洲国产一区| 欧美日韩亚洲天堂| 国产精品海角社区在线观看| www.美女亚洲精品| 菠萝蜜影院一区二区免费| 欧美亚洲日本网站| 国产成人97精品免费看片| 欧美亚洲国产日韩2020| 亚洲网站在线观看| 日韩电影中文字幕一区| 黄色成人在线免费| 久久视频在线看| 最近中文字幕日韩精品| 插插插亚洲综合网| 国产91精品久| 91爱视频在线| 九九久久久久久久久激情| 亚洲sss综合天堂久久| 亚洲精品久久久久久久久久久| 操91在线视频| 日韩av手机在线| 欧美激情一区二区三区在线视频观看| 在线观看国产精品日韩av| 国产91ⅴ在线精品免费观看| 国产精品露脸av在线| 国产日韩欧美电影在线观看| 亚洲高清免费观看高清完整版| 国产精品成人免费视频| 国产精品99久久久久久白浆小说| 色噜噜久久综合伊人一本| 国产精品一区二区电影| 欧美日韩激情视频8区| 夜夜嗨av色一区二区不卡| 国产成人综合久久| 亚洲午夜精品久久久久久性色| 欧美日韩国产丝袜美女| 98精品国产自产在线观看| 最近日韩中文字幕中文|