我们被要求从过去某个时间存在的特定 SQL 2005 作业中恢复它。我们有那个时期的 MSDB 数据库备份,但我无法覆盖当前的 MSDB 数据库,因为我不想丢失对该服务器上其他作业的最新更改。
如果我将其还原为副本(称为 MSDB_old 或其他名称),我如何提取该作业的信息?或者我需要通过临时服务器上的 MSDB 数据库来恢复它吗?
我们被要求从过去某个时间存在的特定 SQL 2005 作业中恢复它。我们有那个时期的 MSDB 数据库备份,但我无法覆盖当前的 MSDB 数据库,因为我不想丢失对该服务器上其他作业的最新更改。
如果我将其还原为副本(称为 MSDB_old 或其他名称),我如何提取该作业的信息?或者我需要通过临时服务器上的 MSDB 数据库来恢复它吗?
无需恢复到临时服务器,您可以将其恢复为您所说的 (MSDB_old) 并执行查询以恢复您的工作:
你必须恢复
编辑:这是一个应该在 SQL 2005 和 2008 中执行的脚本(假设您的工作被称为“我失去的工作”并且您恢复到 MSDB_Old)
该脚本大致基于已接受答案中的这个脚本。它已针对 SQL 2014 进行了更新,具有异常处理、原子事务和其他一些改进。
从 MSDB 中提取单个作业的最简单方法是右键单击 SSMS 中的作业并说 Script Job - 然后将脚本带到目标服务器并运行它以重新创建作业(可能需要进行一些修改)。
这仅在将 msdb 还原为 msdb 时才有效 - 这意味着在您的情况下,您必须在暂存服务器上将备份还原为 msdb。
我想您可以将其还原为 msdb 的副本,然后使用连接手动将所有内容从各种 msdb_copy.dbo.sysjobs/sysjobsteps/sysjobschedules/sysjobservers 表中提取出来。
希望这可以帮助!
嗨,我想补充一下 squillman 的回答。我在 2008 R2 中对其进行了测试。
首先,通过使用 sysjobschedules 和 sysschedules 修复 FK 违规错误。
其次,通过运行 dbo.sp_add_jobserver。
最后,让它遍历 msdb_old.dbo.sysjobs 中的所有作业以进行完整复制。
只需恢复到具有新名称的任何服务器,我以前做过很多次......