首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T-SQL脚本在作为代理作业运行时不会删除文件-如果手动运行

T-SQL脚本在作为代理作业运行时不会删除文件-如果手动运行
EN

Database Administration用户
提问于 2016-04-14 13:59:41
回答 1查看 1.6K关注 0票数 1

我正在编写一个脚本,将Server备份文件的最后一组“好”复制到另一个驱动器(说来话长--我们使用供应商R1Soft进行备份,当我们谈到大约100万文件时,它将不允许我们排除文件夹)。

脚本背后的想法是:

  • 从Server获取最后一个备份位置
  • 从单独的驱动器中删除文件。
  • 运行Ola Hallengrens脚本来运行备份
  • 再次抓取最后一个备份位置(所以现在是刚刚完成的备份位置)
  • 将该文件复制到单独的驱动器。

我遇到的问题是,如果我手动运行代理作业,一切都会正常运行,但是当任务按计划运行时,它会在结束时执行复制部分,但不会执行初始的删除操作--所以所有旧文件都保留在驱动器上,必须手动删除。

日志中没有任何内容可以指示可能发生的事情(没有失败或错误消息)。我假设这是一个权限问题-代理作业在计划时运行的是哪个用户?也许是我登录的用户,因为它是手动运行时使用的?

要么是这样,要么是有更好的方法?我真的不想运行两次备份,因为大约有1TB的数据需要备份。

EN

回答 1

Database Administration用户

发布于 2016-04-14 18:55:14

用于运行作业的帐户将需要删除这些文件的权限。要测试您的进程,请以特定用户的身份登录,并与该用户一起测试您的工作--特别是删除文件。

尽管如此,我在清除Server备份时遇到了问题,所以我创建了这个CmdExec脚本。要删除文件并获取错误信息,请考虑将其作为作业步骤之一运行(应该/必须是CmdExec正确工作的一条线):

代码语言:javascript
复制
cmd /e:on /c "forfiles /p "c:\MYDATABASEBACKUPS" /s /m *.BAK /d -2 /c "cmd /c del @path" 2>&1 |  findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&EXIT 1||EXIT 0"&exit %errorlevel%

此脚本根据备份的天数清除备份。/d -2告诉脚本保留两天的价值。把2换成你想要保留的任何号码。

另外,将c:\MYDATABASEBACKUPS更改为备份位置。将*.BAK更改为备份文件的备份扩展名。这个脚本的“幻想”是因为我去掉了假阳性的“没有找到的文件”--因为有时候找不到文件。

祝你的脚本顺利!

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/135291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档