欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

sql server刪除過期備份文件的腳本

 更新時間:2024年10月15日 09:13:15   作者:Winter_Sun灬  
這篇文章主要介紹了sql server刪除過期備份文件的腳本,文中通過代碼示例給大家講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下

一、通過腳本查看過期文件,時間可以自己設定

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)遍歷查看小于指定時間點的文件 %i 是文件,也可以輸出,切記 %~ti 的格式是 年/月/日 時:分
如果要對比的話要吧%~ti用雙引號引起來,后面的時間字符串也引用起來!

二、刪除過期文件

DECLARE @Path NVARCHAR(255) = 'E:\mybak_file\';  -- 備份文件存儲路徑
DECLARE @CutoffDate NVARCHAR(120) = REPLACE(CONVERT(VARCHAR(16), DATEADD(DAY, -14, GETDATE()), 120), '-', '/');
DECLARE @Cmd NVARCHAR(4000);

-- 刪除超過兩周的備份文件
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"';

-- 臨時啟用 xp_cmdshell
EXEC sp_configure 'show advanced options', 1;  
RECONFIGURE;  
EXEC sp_configure 'xp_cmdshell', 1;  
RECONFIGURE;

-- 執(zhí)行您的命令
EXEC xp_cmdshell @Cmd;

-- 恢復 xp_cmdshell 的狀態(tài)(可選)
EXEC sp_configure 'xp_cmdshell', 0;  
RECONFIGURE;

這里執(zhí)行之后還是沒有成功刪除,繼續(xù)修改腳本?。。。。?!

三、問題解決

命令里面的管道符,必須要轉義,否則會報錯,報錯內容如下

此時不應有 |。

管道符號(|)的誤用: SQL Server 的 T-SQL 語言本身并不支持管道符號(|)。如果您嘗試在 SQL 查詢中直接使用它,可能會導致該錯誤。管道符號通常用于命令行界面或其他編程環(huán)境(例如 PowerShell)。

錯誤的命令: 如果您在 SQL Server 中執(zhí)行的命令嘗試以不正確的格式使用 SQL Server 的功能或選項,可能也會引發(fā)此錯誤。

真是一波三折啊,命令拼好如下:

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í)行一點問題沒有,但是用xp_cmdshell 執(zhí)行,就是不行,還會誤刪所有文件,一直百思不得其解,后來多種測試以后發(fā)現(xiàn)是%~ti壓根沒有獲取到。

終于找到方法解決了,真是太不容易了,不過還是對命令不熟悉,這里嘗試多次后發(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\';  -- 備份文件存儲路徑
DECLARE @CutoffDate NVARCHAR(120) = REPLACE(CONVERT(VARCHAR(16), DATEADD(DAY, -14, GETDATE()), 120), '-', '/');
DECLARE @Cmd NVARCHAR(4000);

-- 刪除超過兩周的備份文件

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;
-- 臨時啟用 xp_cmdshell
EXEC sp_configure 'show advanced options', 1;  
RECONFIGURE;  
EXEC sp_configure 'xp_cmdshell', 1;  
RECONFIGURE;


-- 執(zhí)行您的命令
EXEC xp_cmdshell @Cmd;

-- 恢復 xp_cmdshell 的狀態(tài)(可選)
EXEC sp_configure 'xp_cmdshell', 0;  
RECONFIGURE;

到此這篇關于sql server刪除過期備份文件的腳本的文章就介紹到這了,更多相關sql server刪除過期文件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論