Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 复制文件作业创建_Sql Server - Fatal编程技术网

Sql server 复制文件作业创建

Sql server 复制文件作业创建,sql-server,Sql Server,我需要每天将备份文件从服务器复制到共享。事实上,我需要每天创造一份工作来做这件事。我已经创建了一个bat文件来完成它。问题是我不知道如何在作业中运行它。还有别的办法吗 请建议。我会非常感激的 如果您只需要运行批处理脚本,请为此感谢。如果您只需要运行批处理脚本,请为此感谢。您可以使用两个命令:at.exe或schtasks.exe at.exe更易于使用,但灵活性较差。会议讨论了你想做的事情 schtasks.exe是Windows计划任务的命令行版本。您可以在此处找到更多信息: at.exe的粒

我需要每天将备份文件从服务器复制到共享。事实上,我需要每天创造一份工作来做这件事。我已经创建了一个bat文件来完成它。问题是我不知道如何在作业中运行它。还有别的办法吗

请建议。我会非常感激的


如果您只需要运行批处理脚本,请为此感谢。

如果您只需要运行批处理脚本,请为此感谢。

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

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

schtasks.exe是Windows计划任务的命令行版本。您可以在此处找到更多信息:

at.exe的粒度要小得多。它一天只能运行一次作业。schtasks.exe更复杂,但它非常灵活。您可以将作业计划为每N分钟重复一次,甚至更多

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


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

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

schtasks.exe是Windows计划任务的命令行版本。您可以在此处找到更多信息:

at.exe的粒度要小得多。它一天只能运行一次作业。schtasks.exe更复杂,但它非常灵活。您可以将作业计划为每N分钟重复一次,甚至更多

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


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

为了避免试图复制尚未完成的备份文件,我会将复制作为创建备份过程的一部分(逻辑为“IF(backup successful)”,然后是(copy file)ELSE(send panic email)”。您可以将其设置为不同的计划(r),但随后您可能会遇到时间同步问题--您现在必须解决的问题将适用于未来N周、数月或数年,而且随着时间的延长,事情(如数据库大小)往往会以不可预测的方式发生变化

如果(例如)您的数据库备份是由SQL代理作业生成的,那么您要做的是在备份完成后向该作业添加一个步骤来复制文件——在本例中,是调用批处理文件。有很多方法可以做到这一点,它们都有点复杂,所以我只想强调一下: -添加第二个作业步骤,作业步骤类型为“操作系统(CmdExec)”;在此处,调用批处理文件 -添加第二个作业步骤,作业步骤类型为“Transact-SQL脚本(T-SQL)”,并使用xp\u cmdshell调用批处理文件 -添加第二个T-SQL步骤,它调用一个过程,该过程通过xp_cmdshell展开,并且可以在必要时执行其他操作


这里最大的问题是安全性:运行SQL Agent的帐户是否有足够的权限访问文件和文件夹,是否要启用xp_cmdexec,SQL Agent代理帐户如何…它可能会很快变得复杂,这取决于您的环境如何配置,以及您希望安全性有多严格。在继续操作时要小心这!

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

为了避免试图复制尚未完成的备份文件,我会将复制作为创建备份过程的一部分(逻辑为“IF(backup successful)”,然后是(copy file)ELSE(send panic email)”。您可以将其设置为不同的计划(r),但随后您可能会遇到时间同步问题--您现在必须解决的问题将适用于未来N周、数月或数年,而且随着时间的延长,事情(如数据库大小)往往会以不可预测的方式发生变化

如果(例如)您的数据库备份是由SQL代理作业生成的,那么您要做的是在备份完成后向该作业添加一个步骤来复制文件——在本例中,是调用批处理文件。有很多方法可以做到这一点,它们都有点复杂,所以我只想强调一下: -添加第二个作业步骤,作业步骤类型为“操作系统(CmdExec)”;在此处,调用批处理文件 -添加第二个作业步骤,作业步骤类型为“Transact-SQL脚本(T-SQL)”,并使用xp\u cmdshell调用批处理文件 -添加第二个T-SQL步骤,它调用一个过程,该过程通过xp_cmdshell展开,并且可以在必要时执行其他操作


这里最大的问题是安全性:运行SQL Agent的帐户是否有足够的权限访问文件和文件夹,是否要启用xp_cmdexec,SQL Agent代理帐户如何…它可能会很快变得复杂,这取决于您的环境如何配置,以及您希望安全性有多严格。在继续操作时要小心这!

我同意Philip的观点,使用SQL代理

因为我不想对其他帖子给出两条单独的评论,所以我将作为答案发布

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

由于SQL Server附带了一个丰富的作业调度工具,如代理,它已经存在了一段时间,而且关于如何使用它的专门知识非常丰富,因此没有理由求助于at.exe及其小表亲

操作系统调度器唯一值得考虑的地方是代理何时可用
schtasks.exe /Create /ST 00:00 /SC MINUTE /MO 5 /RU SYSTEM /TN DatabaseBackup /TR "backup_db.bat" /F