我在2008 R2的SQL Server实例上运行了复制数据库向导。
我要复制的数据库是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()
任何帮助将不胜感激!
吉姆
答案 0 :(得分:2)
如果您无法访问操作系统且无法获取,则另一个选项是在副本运行时在后台创建缺少的角色。
您必须在创建文件和尝试引用角色之间捕获它,但是如果你不断点击执行,还有几秒钟的时间来创建它们 - 我设法创建了9个角色。
不幸的是,你最终也会在另一个数据库中使用这些角色(虽然你的角色无法使用),所以需要删除这些角色。
当然,只有当你真的不能使用其他方法时,这才是一个选择。
答案 1 :(得分:1)
我的建议是不要使用复制数据库向导。在2000服务器上创建数据库的完整备份,然后在2008服务器上将其还原。
如果你谷歌“Microsoft.SqlServer.Management.Dts.DtsTransferProvider.ExecuteTransfer复制数据库向导”你会发现很多人都得到了同样的错误或其他几乎相同的smo错误...没有人似乎得到了过去了。
这并不是说它不可能......只是,恢复备份比向导或向导故障排除要容易得多。祝你好运。
答案 2 :(得分:1)
复制向导错过了一些安全性和IIRC,这是由两个版本之间的安全表,主体等的细微差别引起的。
坦率地说,最简单的方法是做到这两个中的一个:
答案 3 :(得分:0)
原因可能是文件系统上已存在具有新数据库名称的文件。我们在将数据库X重命名为X_Old并尝试将数据库Y复制到X时遇到了这种情况。这是无法完成的,因为数据库X_Old仍然与文件名X相关联。
删除冲突的数据库,或重命名文件系统上的文件。
请参阅http://codecopy.wordpress.com/2012/01/03/error-while-copying-a-database/
答案 4 :(得分:0)
尽管使用备份技术的答案通常可以解决问题,但是在多次遇到相同的问题之后,我能够使用Windows的事件查看器找到问题的根源,方法是使用数据库复制向导SQL代理最终将为该代理创建要运行的作业,此后,该代理将使用其自身的凭据运行(即您可以在Windows服务中查找的凭据,在我的情况下为{ {1}})
您需要做的就是转到SQL Server创建数据库文件的文件夹(例如,对于SQL 2014,默认为NT Service\SQLAgent$SQL2014
),并赋予SQL Agent Windows用户对该文件夹的写/读访问权限。