【发布时间】:2014-06-18 03:47:01
【问题描述】:
我的目标是自动执行 SQL Server 数据库的每日计划备份,并使用 sftp 将其发送到远程计算机。
这有多难?
使用用于维护计划和代理作业的内置实用程序“相当容易”安排数据库的本地备份...
下一步,安排将其发送到我的 ftp 有点困难。
我尝试在 Windows Server 2012 中设置“计划任务”以使用脚本执行 WinSCP。这种工作。我唯一的问题是它永远不会停止。任务只是继续运行,永远不会结束。此外,我不喜欢有两个单独的计划操作,我必须“手动同步”,例如让第一个在凌晨 3 点运行,另一个在凌晨 4 点运行,希望第一个在 1 小时内运行。
我现在尝试的另一个选项是将 WinSCP 执行添加到我已经存在的备份代理作业中,方法是使用 CmdExec 和命令添加第二个步骤:C:\DB_BACKUP\WinSCP.exe /script=C:\ DB_BACKUP\script.txt
这不起作用,我不明白为什么。如果我在命令提示符下输入完全相同的命令,它运行得非常好。但代理作业步骤返回“作业失败,有关详细信息,请参阅历史日志”。历史日志包含几乎相同的信息。运行作业的帐户对包含 exe、脚本和备份文件的文件夹具有完全权限。我已经尝试了各种命令文本的变体,但似乎没有什么能让代理满意。
所以我的问题是:
- 为什么我不能使用作业步骤中的脚本在命令提示符下运行正常时执行 WinSCP?
- 为什么使用 SQL Server 执行计划的外部备份如此困难?我这样做有错吗?
- 是否有任何现有的 CLR SPROC 可以用来直接完成整个操作,而无需使用作业或任务?
【问题讨论】:
-
我们使用 PowerShell 从 SSIS 包中的任务调用 PSFTP.exe。起初看起来很复杂,但现在效果很好。从作业步骤调用 PSFTP 也应该很容易,但是作业中可用的 PowerShell 不允许您做太多事情(日期操作在 PS 窗口中没有时出错。这可能是我们,但我们会有 SQL2012 吗?我会构建一个 SSIS 包来 SFTP 文件,然后在备份后将其作为作业步骤。
标签: .net sql-server windows scheduled-tasks database-backups