复制数据库 SQL Server 2012 中的“作业失败”
Posted
技术标签:
【中文标题】复制数据库 SQL Server 2012 中的“作业失败”【英文标题】:" The job failed" in copying database SQL Server 2012 【发布时间】:2015-03-16 11:26:07 【问题描述】:我正在尝试复制数据库。通过复制数据库向导时,我收到了执行 SQL Server 代理作业错误。错误状态
作业失败。查看目标服务器上的事件日志以了解详细信息
执行操作
为包添加日志(成功)
添加传输数据库对象的任务(成功)
创建包(成功)
启动 SQL Server 代理作业(成功)
执行 SQL Server 代理作业(错误)
错误:
作业失败。检查目标服务器上的事件日志以获取详细信息。 (复制数据库向导)
我似乎找不到导致此问题的原因。我使用正确的方法吗?我只需要复制这个数据库。提前致谢。
【问题讨论】:
请使用备份/恢复,而不是复制数据库“向导”或分离/附加。 谢谢亚伦伯特兰。我的问题解决了,我使用备份/恢复方法 【参考方案1】:如果您尝试在同一台服务器上克隆数据库,请尝试以下操作:
-
创建要复制的数据库的备份
右击
Databases
并选择Restore Database
从From Database
中选择要复制的数据库
Source for restore
部分中的下拉列表
在To database
字段中输入新数据库的名称
Destination for Restore
部分 - 这不能是一个名称
现有数据库。
点击确定
【讨论】:
为了完成这项工作,即使文件不存在,我也必须更改恢复为文件名并检查覆盖选项。 这是一种解决方法,它确实对我们有用,但我们确实需要一个解决方案,而不仅仅是一种解决方法。仍在搜索。 这对我有用。有谁知道为什么会这样?当我使用向导时,即使我的驱动器上有足够的空间,它也会给我带来错误,这就是最初导致我的错误的原因。 “复制数据库”对我没有用,事件日志中也没有错误原因,因此无法找到解决方案。这帮助我使用 SSMS 2017 创建了我的数据库的本地副本。谢谢!【参考方案2】:检查 Windows 事件日志。
-
事件查看器
Windows 日志
应用
查找与以下任何一项相关的警告/错误消息:
SQLAgent
SQLIPackage
读取错误。
这是一个例子。
以下是我们遇到的一些错误和解决方法。
无法确定作业...的所有者 (...) 是否具有服务器访问权限(原因:无法获取有关 Windows NT 组/用户“...”的信息,错误代码 0x54b。[SQLSTATE 42000] (错误 15404))。
我们需要确保在复制数据库向导期间,我们用于登录目标服务器的帐户具有适当的权限,并且这些权限是可获取的(我们最终使用了 sa
帐户。)以上警告。
访问被拒绝
我们需要确保本地 SQL Server 代理在本地服务器上具有适当的权限。因此,我们将 SQL Server 代理登录为本地系统。这很有效,因为 Local System 是我们 SQL Server 实例中的系统管理员。
无法读取元数据,可能是由于访问权限不足。
我们需要为本地系统帐户提供更多权限。
来自 SSMS 右键单击服务器名称并单击属性 单击“权限”选项卡 单击用户本地系统 在显式权限几乎在底部有“查看任何定义”授予该权限。看看这是否可行。xp_regread() 返回错误 5,“访问被拒绝。”
这阻碍了我们,我们又问了一个问题:xp_regread() returned error 5, 'Access is denied.'
【讨论】:
【参考方案3】:这通常是因为您的帐户(NT Service\SQLSERVERAGENT)没有数据文件夹(..Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA)的权限。设置为完全控制就可以了
上面的账户是默认的,如果你想查看哪个账户运行代理,去 services.msc 。检查帐户登录
【讨论】:
这为我指明了正确的方向。但是,我正在远程尝试使用 SQL Mgt Studio Server 2017 执行此操作。当我使用 SQL 2005 在我们的(非常旧的)服务器上设置权限时,用户帐户显示“SQLServer2005 ...”,所以最终我不得不登录到那个服务器并从 Mgt Studio 2005 中完成。在那之后终于工作了【参考方案4】:对于我的复制数据库向导问题:错误:值不能为空。参数名称:数据库 StackTrace:在 Microsoft.SqlServer.Dts.Tasks.TransferObjectsTask.TransferObjectsTask.CheckLocalandDestinationStatus
我已尽一切努力让我的复制数据库向导完成从 SQL 2012 到 SQL2017 的计划 1. 我已经将 SQL 代理帐户设置为管理员,尽管我已经设置了一个系统管理员的代理 2. 我已经进入数据工具,并尝试将最大错误更改为不止一个。
我采取的有效的最后步骤如下: A. 我在 2017 服务器上安装了数据工具(以备不时之需) B. 我在 2017 服务器上添加了一个虚拟数据库,这样我就可以从 SSMS 内部访问复制数据库向导。 C. 我从虚拟数据库的 NEWER 系统启动 opy 数据库向导,但将我的源更改为源服务器(而不是本地 SQL 实例的默认值),并分别将我的目标更改为我的本地机器 SQL 实例。
D.我浏览了每个项目的向导(对于我来说,它是一个复制和替换选项,使用 SSMS(不是分离和重新附加,因为我无法在生产中关闭源),然后我在每个数据库上单击了 REFRESH更改目标目录后复制向导屏幕。
(如果在 SSMS 2017 上为 SQL 2017 迁移数据库,则需要一个 CAVIAT。确保您具有 SQL 版本的最新累积更新:https://support.microsoft.com/en-us/help/4342123 与在查询中选择 @@version
还要确保您的 SQL 代理和 SQL 服务器帐户有权访问目标目录)
之后,我的脚本终于在 SQL2017 服务器上运行,已添加到 SQL 代理作业中
【讨论】:
【参考方案5】:对我来说,我正在将一个数据库复制到我的本地主机。
-
我将代理服务更改为以我自己的身份运行。
在我的本地主机上添加了一个缺少的角色,因为事件日志显示“无法更改服务器角色 '开发者',因为它不存在或您没有权限”
看到此“InnerException --> 过程 'sys.sp_procoption' 无法在事务中执行。”。因此,我将向导设置更改为不复制存储过程。
下一个错误是“属性 HasMemoryOptimizedObjects 不适用于数据库 '[TCCPortal_UAT]'。此对象可能不存在此属性,或者由于访问权限不足而可能无法检索”,我无法通过以下方式快速轻松地修复我。
那时,我放弃并使用了 SQL Server 导入和导出向导,它似乎可以满足我的需要。 https://docs.microsoft.com/en-us/sql/integration-services/import-export-data/import-and-export-data-with-the-sql-server-import-and-export-wizard?view=sql-server-2017
请注意,使用导入和导出向导可以很好地处理表格。我确实必须通过右键单击数据库->任务->生成脚本来分别复制视图、存储过程和函数,然后向导将引导您完成可以选择的对象。
祝你好运,我希望这对某人有帮助。
【讨论】:
以上是关于复制数据库 SQL Server 2012 中的“作业失败”的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server复制的阶段:1级 - SQL Server复制简介
SQL Server复制的阶梯:第1级 - SQL Server复制简介
翻译:SQL Server复制的阶梯:第1级 - SQL Server复制