复制文件创建作业

时间:2009-07-22 20:12:50

标签: sql-server

我需要每天将备份文件从服务器复制到共享。实际上我每天都需要创造一份工作。我创建了一个bat文件来完成它。问题是我不知道如何让它在工作中运行。有没有其他方法可以做到这一点。

请建议。我真的很感激。

由于

5 个答案:

答案 0 :(得分:2)

Q1:您何时需要复制备份文件? Q2:您如何知道在您要执行复制时备份已完成?

为了避免尝试复制尚未完成的备份文件,我将创建备份的进程的副本部分(具有“IF(备份成功)THEN(复制文件)ELSE”的逻辑(发送恐慌电子邮件。你可以在不同的时间表(r)上设置它,但是你可能有时间同步问题 - 你现在必须解决的问题将适用于下一个N周,几个月或几年,以及事物(例如数据库大小)往往会在不太长的时间内以不可预测的方式发生变化。

如果(例如)您的数据库备份是由SQL代理作业生成的,那么您要做的是在备份复制文件后向作业添加一个步骤 - 在这种情况下,调用你的批处理文件。有很多方法可以做到这一点,而且它们都有一点涉及,所以我只是给出一些亮点:   - 添加第二个作业步骤,作业步骤类型为“操作系统(CmdExec)”;在这里,调用批处理文件   - 添加第二个作业步骤,作业步骤类型“Transact-SQL脚本(T-SQL)”,并使用xp_cmdshell调用批处理文件   - 添加第二个T-SQL步骤,它调用一个过程,该过程通过xp_cmdshell弹出,并且可以根据需要执行其他操作。

这里的重点是安全:运行SQL Agent的帐户是否有足够的权限来访问文件文件和文件夹,你想要启用xp_cmdexec,SQL Agent代理帐户怎么样......它可以快速复杂,具体取决于关于如何配置环境以及您希望安全性的严密程度。当你继续前进时要小心!

答案 1 :(得分:1)

如果您只需要运行批处理脚本,set up a Windows scheduled task就可以了。

答案 2 :(得分:1)

我同意Philip,使用SQL Agent。

由于我不想对其他帖子发表两条单独的评论,我会将其作为答案发布。

将OS调度(at,schtask)与SQL操作混合存在很多问题。它使部署的管理和故障排除变得不必要。在发生故障转移(群集或镜像)时,OS调度程序不会遵循SQL。他们不参与系统备份和恢复策略。他们有一个单独的管理工具集,这意味着管理员必须知道来查找它们。搜索依赖项时找不到它们。依此类推。

由于SQL Server附带了如Agent这样一个丰富的作业调度工具,它已经存在了一段时间,而且关于如何使用它的技术诀窍很丰富,所以没有理由转向at.exe及其小表弟。

OS调度程序甚至值得考虑的唯一地方是Agent不可用时:Express部署。对于他们我更喜欢使用timers,因为它们被保留在数据库中,因此它们在备份/恢复方案中表现更好,但我承认OS调度程序也是一个有效的选择。同样,仅适用于Express。

答案 3 :(得分:0)

您可以使用两个命令:at.exe或schtasks.exe

at.exe更易于使用,但灵活性较差。 article here讨论了你想要做的事情。

schtasks.exe是Windows计划任务的命令行版本。您可以在此处找到更多相关信息:http://msdn.microsoft.com/en-us/library/bb736357(VS.85).aspx

at.exe的粒度要小得多。它每天只能运行一次。 schtasks.exe更复杂,但非常非常灵活。您可以安排工作每N分钟重复一次,等等。

例如,如果您想每5分钟备份一次(比如热备份数据库):

schtasks.exe /Create /ST 00:00 /SC MINUTE /MO 5 /RU SYSTEM /TN DatabaseBackup /TR "backup_db.bat" /F

答案 4 :(得分:0)

我尝试使用代理作业复制到共享。 我使用net use来确保当前上下文有一个映射驱动器,然后我将文件复制到该共享。

当我手动启动作业时,它表示它已启动,但从未完成。数据量足以让10分钟绰绰有余。我没有在代理日志中看到任何进度指示器。关于我在哪里可以看到发生了什么的任何想法。

使用时间戳作为指示,我相信没有正在复制的文件。 Hmmmm ....

任何想法?

格雷格