【问题标题】:SQL Server Copy Database IssueSQL Server 复制数据库问题
【发布时间】:2018-07-02 15:23:44
【问题描述】:

我正在 SQL Server 的 2008 R2 实例上运行复制数据库向导。

我要复制的数据库是 SQL 2000 数据库。 我将该数据库复制到另一个 SQL SErver 2008 R2。

向导对两台服务器都使用 SQL 身份验证,并且都是系统管理员。

当我运行它时,我收到以下错误(仅供参考,我已尝试复制登录名并将其排除在外):

事件名称:OnError 消息:错误:errorCode=-1073548784 description=执行查询“sys.sp_addrolemember @rolename = N'RandomRoleName...”失败,出现以下错误:“当前数据库中不存在角色'RandomRoleName'。”。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或连接未正确建立。 helpFile= helpContext=0 idofInterfaceWithError={C81DFC5A-3B22-4DA3-BD3B-10BF861A7F9C} StackTrace:在 Microsoft.SqlServer.Management.Dts.DtsTransferProvider.ExecuteTransfer() 在 Microsoft.SqlServer.Management.Smo.Transfer.TransferData() 在 Microsoft.SqlServer.Dts.Tasks.TransferObjectsTask.TransferObjectsTask.TransferDatabasesUsingSMOTransfer()

任何帮助将不胜感激!

吉姆

【问题讨论】:

  • 您是否检查了角色名称 Under Security -> Role -> ?
  • @SQL 我假设您的意思是在源数据库中?是的......这就是向导从中挑选角色的地方。
  • 当然,该错误的真正原因是smallsoft 公司的一些脚本小子没有在他们的代码中检查 nil 指针(他们可能调用它是一个空指针)

标签: sql-server sql-server-2008


【解决方案1】:

我的建议是不要使用复制数据库向导。在 2000 服务器上创建数据库的完整备份,然后在 2008 服务器上恢复它。

如果你用谷歌搜索“Microsoft.SqlServer.Management.Dts.DtsTransferProvider.ExecuteTransfer 复制数据库向导”,你会发现很多人都遇到过同样的错误或其他几乎相同的 smo 错误……似乎没有人遇到过过去了。

这并不是说它不可能......只是,恢复备份比向导或故障排除向导要容易得多。祝你好运。

【讨论】:

    【解决方案2】:

    复制向导错过了一些安全性和 IIRC,这是由于 2 个版本之间的安全表、主体等方面的细微差异造成的。

    坦率地说,最简单的方法是执行以下两种方法之一:

    • 备份/恢复
    • 分离、复制、附加

    【讨论】:

      【解决方案3】:

      如果您无权访问操作系统并且无法获取它,另一种选择是在副本运行时在后台创建缺少的角色。

      您必须在创建文件和尝试引用角色之间捕获它,但是如果您继续单击执行,则有几秒钟的时间来创建它们 - 我设法创建了 9 个角色。

      不幸的是,您最终也会在另一个数据库中获得角色(而您的角色无法使用),因此需要删除这些角色。

      当然,这只是当你实在无法使用其他方法时的一种选择。

      【讨论】:

        【解决方案4】:

        虽然使用备份技术的答案通常可以解决问题,但在多次遇到相同问题后,我能够使用 Windows 的事件查看器将问题的根源追溯到数据库复制向导,使用SQL 代理,最终将创建一个作业供代理运行,之后代理将运行使用自己的凭据(即您可以在 Windows 服务中查找的凭据,在我的情况下,@ 987654321@)

        您需要做的就是转到 SQL Server 创建数据库文件的文件夹(例如,SQL 2014 默认为 C:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014\MSSQL\DATA)并授予 SQL 代理窗口用户对该文件夹的写入/读取权限。

        【讨论】:

          【解决方案5】:

          原因可能是文件系统上已存在具有新数据库名称的文件。我们在将数据库 X 重命名为 X_Old 并尝试将数据库 Y 复制到 X 时遇到了这种情况。这无法完成,因为数据库 X_Old 仍然与文件名 X 关联。

          要么删除冲突的数据库,要么重命名文件系统上的文件。

          http://codecopy.wordpress.com/2012/01/03/error-while-copying-a-database/

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-10-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-09-26
            相关资源
            最近更新 更多