当前位置: 首页 > news >正文

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

循环遍历查看小于指定时间点的文件 %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;-- 执行您的命令
EXEC xp_cmdshell @Cmd;-- 恢复 xp_cmdshell 的状态(可选)
EXEC sp_configure 'xp_cmdshell', 0;  
RECONFIGURE;

这里执行之后还是没有成功删除,继续修改脚本!!!!!!

三、问题解决

命令里面的管道符,必须要转义,否则会报错,报错内容如下

此时不应有 |。管道符号(|)的误用: SQL Server 的 T-SQL 语言本身并不支持管道符号(|)。如果您尝试在 SQL 查询中直接使用它,可能会导致该错误。管道符号通常用于命令行界面或其他编程环境(例如 PowerShell)。错误的命令: 如果您在 SQL Server 中执行的命令尝试以不正确的格式使用 SQL Server 的功能或选项,可能也会引发此错误。

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

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执行一点问题没有,但是用xp_cmdshell 执行,就是不行,还会误删所有文件,一直百思不得其解,后来多种测试以后发现是%~ti压根没有获取到。

终于找到方法解决了,真是太不容易了,不过还是对命令不熟悉,这里尝试多次后发现以下命令可以完美解决!!

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;-- 执行您的命令
EXEC xp_cmdshell @Cmd;-- 恢复 xp_cmdshell 的状态(可选)
EXEC sp_configure 'xp_cmdshell', 0;  
RECONFIGURE;
http://www.lryc.cn/news/460791.html

相关文章:

  • 【Docker系列】Docker查看镜像架构
  • Python案例 | 测试网络的下载速度上传速度和 ping 延迟
  • 一键找回,2024四大固态硬盘数据恢复工具推荐!
  • 数据结构~AVL树
  • ffmpeg面向对象——rtsp拉流探索(1)
  • 【启明智显分享】ZX7981PM WIFI6 5G-CPE:2.5G WAN口,2.4G/5G双频段自动调速
  • openresty“热部署“lua
  • 基于SpringBoot+Vue+MySQL的企业招聘管理系统
  • vue3之defineComponent
  • springboot+vue家政服务管理平台
  • python pip安装requirements.txt依赖与国内镜像
  • 解决Qt的QWidget设计师编辑UI后和软件运行显示不一致
  • 交易所开发:构建安全、高效、可靠的数字资产交易平台
  • 【Next.js 入门教程系列】09-优化技巧
  • Windows 11 开发详解:工具与高级用法
  • leetcode 292.Nim游戏
  • 《最优化方法》
  • fork中的死锁问题
  • Java面试题———SpringBoot篇
  • 模块化沙箱:构建零信任架构的关键技术
  • 10.14学习日志
  • “我们为什么缺少科学精神”演讲内容拆解
  • openpyxl 3.0.7 中文教程
  • idea开发工具使用
  • Android map 获取值
  • Leetcode.13 罗马数字转整数
  • 骨架提取(持续更新)
  • B3622 枚举子集
  • git submodule add用法
  • 计算机毕业设计 基于Python的汽车销售管理系统的设计与实现 Python毕业设计 Python毕业设计选题【附源码+安装调试】