sql server刪除過(guò)期備份文件的腳本
一、通過(guò)腳本查看過(guò)期文件,時(shí)間可以自己設(shè)定
for /f "delims=" %i in ('dir /b /a-d "E:\mybak_file\*.bak" ^| findstr /i "backup" ^| findstr /v /i "no_backup"') do @if "%~ti" LSS "2024/09/29 16:50" echo %~ti NAME:%i
循環(huán)遍歷查看小于指定時(shí)間點(diǎn)的文件 %i 是文件,也可以輸出,切記 %~ti 的格式是 年/月/日 時(shí):分
如果要對(duì)比的話(huà)要吧%~ti用雙引號(hào)引起來(lái),后面的時(shí)間字符串也引用起來(lái)!
二、刪除過(guò)期文件
DECLARE @Path NVARCHAR(255) = 'E:\mybak_file\'; -- 備份文件存儲(chǔ)路徑 DECLARE @CutoffDate NVARCHAR(120) = REPLACE(CONVERT(VARCHAR(16), DATEADD(DAY, -14, GETDATE()), 120), '-', '/'); DECLARE @Cmd NVARCHAR(4000); -- 刪除超過(guò)兩周的備份文件 SET @Cmd = 'for /f "delims=" %i in (''dir /b /a-d "' + @Path + '*.bak" | findstr /i "backup" | findstr /v /i "no_backup" '') do @if "%~ti" LSS "' + CONVERT(VARCHAR, @CutoffDate, 120) + '" del "' + @Path + '%i"'; -- 臨時(shí)啟用 xp_cmdshell EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; -- 執(zhí)行您的命令 EXEC xp_cmdshell @Cmd; -- 恢復(fù) xp_cmdshell 的狀態(tài)(可選) EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE;
這里執(zhí)行之后還是沒(méi)有成功刪除,繼續(xù)修改腳本?。。。。。?/strong>
三、問(wèn)題解決
命令里面的管道符,必須要轉(zhuǎn)義,否則會(huì)報(bào)錯(cuò),報(bào)錯(cuò)內(nèi)容如下
此時(shí)不應(yīng)有 |。
管道符號(hào)(|)的誤用: SQL Server 的 T-SQL 語(yǔ)言本身并不支持管道符號(hào)(|)。如果您嘗試在 SQL 查詢(xún)中直接使用它,可能會(huì)導(dǎo)致該錯(cuò)誤。管道符號(hào)通常用于命令行界面或其他編程環(huán)境(例如 PowerShell)。
錯(cuò)誤的命令: 如果您在 SQL Server 中執(zhí)行的命令嘗試以不正確的格式使用 SQL Server 的功能或選項(xiàng),可能也會(huì)引發(fā)此錯(cuò)誤。
真是一波三折啊,命令拼好如下:
for /f "delims=" %i in ('dir /b /a-d "E:\yunbak_file\*.bak" ^| findstr /i "backup" ^| findstr /v /i "no_backup" ') do @if "%~ti" LSS "2024/09/16 17:31" echo del "E:\yunbak_file\%i"
直接在cmd執(zhí)行一點(diǎn)問(wèn)題沒(méi)有,但是用xp_cmdshell 執(zhí)行,就是不行,還會(huì)誤刪所有文件,一直百思不得其解,后來(lái)多種測(cè)試以后發(fā)現(xiàn)是%~ti壓根沒(méi)有獲取到。
終于找到方法解決了,真是太不容易了,不過(guò)還是對(duì)命令不熟悉,這里嘗試多次后發(fā)現(xiàn)以下命令可以完美解決??!
for /f "tokens=1,2,4 delims= " %i in ('dir /T:W "E:\yunbak_file\*.bak" ^| findstr /i "backup" ^| findstr /v /i "no_backup" ') do @if "%i %j" LSS "2024/09/16 17:54" echo del "E:\yunbak_file\%k"
四、終極版本
以下是修改后的完整的清理備份文件的腳本(終極版本):
DECLARE @Path NVARCHAR(255) = 'E:\yunbak_file\'; -- 備份文件存儲(chǔ)路徑 DECLARE @CutoffDate NVARCHAR(120) = REPLACE(CONVERT(VARCHAR(16), DATEADD(DAY, -14, GETDATE()), 120), '-', '/'); DECLARE @Cmd NVARCHAR(4000); -- 刪除超過(guò)兩周的備份文件 SET @Cmd = 'for /f "tokens=1,2,4 delims= " %i in (''dir /T:W "' + @Path + '*.bak" ^| findstr /i "backup" ^| findstr /v /i "no_backup" '') do @if "%i %j" LSS "' + CONVERT(VARCHAR, @CutoffDate, 120) + '" del "' + @Path + '%k"'; SELECT @Cmd; -- 臨時(shí)啟用 xp_cmdshell EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; -- 執(zhí)行您的命令 EXEC xp_cmdshell @Cmd; -- 恢復(fù) xp_cmdshell 的狀態(tài)(可選) EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE;
到此這篇關(guān)于sql server刪除過(guò)期備份文件的腳本的文章就介紹到這了,更多相關(guān)sql server刪除過(guò)期文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
隨機(jī)抽取的sql語(yǔ)句 每班任意抽取3名學(xué)生
表 student ,字段 class 及name 。其中class 表示班級(jí),name 表示每班學(xué)生姓名。要求每班任意抽取3名學(xué)生出來(lái),進(jìn)行學(xué)校大掃除2014-07-07SQL學(xué)習(xí)筆記一SQL基礎(chǔ)知識(shí)
剛開(kāi)始接觸sqlserver的朋友可以參考下。雖然文字比較短,但內(nèi)容都是經(jīng)驗(yàn)之談。2011-08-08SQLSERVER分頁(yè)查詢(xún)關(guān)于使用Top方式和row_number()解析函數(shù)的不同
這篇文章主要介紹了SQLSERVER分頁(yè)查詢(xún)關(guān)于使用Top方式和row_number()解析函數(shù)的不同的相關(guān)資料,需要的朋友可以參考下2016-02-02SQL?Server使用T-SQL進(jìn)階之公用表表達(dá)式(CTE)
這篇文章介紹了SQL?Server中T-SQL的公用表表達(dá)式(CTE),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05SQL Server遍歷表中記錄的2種方法(使用表變量和游標(biāo))
遍歷表一般都要用到游標(biāo)在SQL Server中可以很容易的用游標(biāo)實(shí)現(xiàn)循環(huán)實(shí)現(xiàn)遍歷表中記錄,本文將介紹使用表變量和游標(biāo)實(shí)現(xiàn)數(shù)據(jù)庫(kù)中表的遍歷,感興趣的朋友可以了解下本文,或許可以幫助到你2013-02-02mssql存儲(chǔ)過(guò)程表名和字段名為變量的實(shí)現(xiàn)方法
mssql存儲(chǔ)過(guò)程表名和字段名為變量的實(shí)現(xiàn)方法,需要的朋友可以參考下。2011-11-11SQL?Server日期時(shí)間和字符串之間的轉(zhuǎn)換方法實(shí)例
處理原始數(shù)據(jù)時(shí),您可能經(jīng)常會(huì)遇到存儲(chǔ)為文本的日期值,將這些值轉(zhuǎn)換為日期數(shù)據(jù)類(lèi)型非常重要,因?yàn)樵诜治鲞^(guò)程中日期可能更有價(jià)值,下面這篇文章主要給大家介紹了關(guān)于SQL?Server日期時(shí)間和字符串之間的轉(zhuǎn)換方法,需要的朋友可以參考下2023-06-06SqlServer實(shí)現(xiàn)類(lèi)似Oracle的before觸發(fā)器示例
本節(jié)主要介紹了SqlServer如何實(shí)現(xiàn)類(lèi)似Oracle的before觸發(fā)器,需要的朋友可以參考下2014-08-08