SQL Server 2016复制数据库向导错误

时间:2016-08-08 11:00:29

标签: sql-server sql-server-2016 copy-database-wizard

我试图将SQL Server数据库从sql server 2016 dev版复制到SQL Server 2014 dev版。

它失败并显示以下日志:

#Fields: event,computer,operator,source,sourceid,executionid,starttime,endtime,datacode,databytes,message

OnInformation,PAPERLESS-PRIME,NT AUTHORITY\NETWORK SERVICE,PAPERLESS-PRIME_PAPERLESS-PRIME_SQLEXPRESS_Transfer Objects Task,{F858F211-3783-40F8-9C7A-B477576706D4},{AB42BFE8-D674-4E86-ACEA-FA89BFF7E8BE},8/8/2016 11:40:52 AM,8/8/2016 11:40:52 AM,0,0x,Transferring database callmanager_pwc from PAPERLESS-PRIME server as callmanager_pwc to PAPERLESS-PRIME\SQLEXPRESS server
OnInformation,PAPERLESS-PRIME,NT AUTHORITY\NETWORK SERVICE,CDW_PAPERLESS-PRIME_PAPERLESS-PRIME_SQLEXPRESS_2,{2BE0FC74-D66D-4AFE-895F-B0CC80E7C848},{AB42BFE8-D674-4E86-ACEA-FA89BFF7E8BE},8/8/2016 11:40:52 AM,8/8/2016 11:40:52 AM,0,0x,Transferring database callmanager_pwc from PAPERLESS-PRIME server as callmanager_pwc to PAPERLESS-PRIME\SQLEXPRESS server
OnInformation,PAPERLESS-PRIME,NT AUTHORITY\NETWORK SERVICE,PAPERLESS-PRIME_PAPERLESS-PRIME_SQLEXPRESS_Transfer Objects Task,{F858F211-3783-40F8-9C7A-B477576706D4},{AB42BFE8-D674-4E86-ACEA-FA89BFF7E8BE},8/8/2016 11:40:52 AM,8/8/2016 11:40:52 AM,0,0x,Added data file callmanager in path C:\SQLDB\2014\callmanager_pwc.mdf to file group [PRIMARY]
OnInformation,PAPERLESS-PRIME,NT AUTHORITY\NETWORK SERVICE,CDW_PAPERLESS-PRIME_PAPERLESS-PRIME_SQLEXPRESS_2,{2BE0FC74-D66D-4AFE-895F-B0CC80E7C848},{AB42BFE8-D674-4E86-ACEA-FA89BFF7E8BE},8/8/2016 11:40:52 AM,8/8/2016 11:40:52 AM,0,0x,Added data file callmanager in path C:\SQLDB\2014\callmanager_pwc.mdf to file group [PRIMARY]
OnInformation,PAPERLESS-PRIME,NT AUTHORITY\NETWORK SERVICE,PAPERLESS-PRIME_PAPERLESS-PRIME_SQLEXPRESS_Transfer Objects Task,{F858F211-3783-40F8-9C7A-B477576706D4},{AB42BFE8-D674-4E86-ACEA-FA89BFF7E8BE},8/8/2016 11:40:52 AM,8/8/2016 11:40:52 AM,0,0x,Added log file callmanager_log in path C:\SQLDB\2014\callmanager_pwc.ldf
OnInformation,PAPERLESS-PRIME,NT AUTHORITY\NETWORK SERVICE,CDW_PAPERLESS-PRIME_PAPERLESS-PRIME_SQLEXPRESS_2,{2BE0FC74-D66D-4AFE-895F-B0CC80E7C848},{AB42BFE8-D674-4E86-ACEA-FA89BFF7E8BE},8/8/2016 11:40:52 AM,8/8/2016 11:40:52 AM,0,0x,Added log file callmanager_log in path C:\SQLDB\2014\callmanager_pwc.ldf
OnInformation,PAPERLESS-PRIME,NT AUTHORITY\NETWORK SERVICE,PAPERLESS-PRIME_PAPERLESS-PRIME_SQLEXPRESS_Transfer Objects Task,{F858F211-3783-40F8-9C7A-B477576706D4},{AB42BFE8-D674-4E86-ACEA-FA89BFF7E8BE},8/8/2016 11:40:52 AM,8/8/2016 11:40:52 AM,0,0x,Transferring data to database callmanager_pwc from callmanager_pwc
OnInformation,PAPERLESS-PRIME,NT AUTHORITY\NETWORK SERVICE,CDW_PAPERLESS-PRIME_PAPERLESS-PRIME_SQLEXPRESS_2,{2BE0FC74-D66D-4AFE-895F-B0CC80E7C848},{AB42BFE8-D674-4E86-ACEA-FA89BFF7E8BE},8/8/2016 11:40:52 AM,8/8/2016 11:40:52 AM,0,0x,Transferring data to database callmanager_pwc from callmanager_pwc
OnError,PAPERLESS-PRIME,NT AUTHORITY\NETWORK SERVICE,PAPERLESS-PRIME_PAPERLESS-PRIME_SQLEXPRESS_Transfer Objects Task,{F858F211-3783-40F8-9C7A-B477576706D4},{AB42BFE8-D674-4E86-ACEA-FA89BFF7E8BE},8/8/2016 11:40:54 AM,8/8/2016 11:40:54 AM,0,0x,Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
StackTrace:    at System.Collections.BitArray.Set(Int32 index, Boolean value)
   at Microsoft.SqlServer.Management.Smo.PermissionWorker.GetPermissionSetBase(PermissionEnumKind kind, Int32 i)
   at Microsoft.SqlServer.Management.Smo.SqlSmoObject.GetPermissionsFromCache(PermissionEnumKind kind)
   at Microsoft.SqlServer.Management.Smo.SqlSmoObject.AddScriptPermissions(StringCollection sc, PermissionEnumKind kind, ScriptingPreferences sp)
   at Microsoft.SqlServer.Management.Smo.ScriptMaker.ScriptCreateSpecialUrn(Urn urn, ScriptingPreferences sp, ObjectScriptingType& scriptType)
   at Microsoft.SqlServer.Management.Smo.ScriptMaker.ScriptCreate(Urn urn, ScriptingPreferences sp, ObjectScriptingType& scriptType)
   at Microsoft.SqlServer.Management.Smo.ScriptMaker.ScriptCreateObjects(IEnumerable`1 urns)
   at Microsoft.SqlServer.Management.Smo.ScriptMaker.ScriptUrns(List`1 orderedUrns)
   at Microsoft.SqlServer.Management.Smo.ScriptMaker.DiscoverOrderScript(IEnumerable`1 urns)
   at Microsoft.SqlServer.Management.Smo.ScriptMaker.ScriptWorker(List`1 urns, ISmoScriptWriter writer)
   at Microsoft.SqlServer.Management.Smo.DataTransferBase.GetScriptLoadedTransferWriter()
   at Microsoft.SqlServer.Management.Smo.Transfer.TransferData()
   at Microsoft.SqlServer.Dts.Tasks.TransferObjectsTask.TransferObjectsTask.TransferDatabasesUsingSMOTransfer()
OnError,PAPERLESS-PRIME,NT AUTHORITY\NETWORK SERVICE,CDW_PAPERLESS-PRIME_PAPERLESS-PRIME_SQLEXPRESS_2,{2BE0FC74-D66D-4AFE-895F-B0CC80E7C848},{AB42BFE8-D674-4E86-ACEA-FA89BFF7E8BE},8/8/2016 11:40:54 AM,8/8/2016 11:40:54 AM,0,0x,Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
StackTrace:    at System.Collections.BitArray.Set(Int32 index, Boolean value)
   at Microsoft.SqlServer.Management.Smo.PermissionWorker.GetPermissionSetBase(PermissionEnumKind kind, Int32 i)
   at Microsoft.SqlServer.Management.Smo.SqlSmoObject.GetPermissionsFromCache(PermissionEnumKind kind)
   at Microsoft.SqlServer.Management.Smo.SqlSmoObject.AddScriptPermissions(StringCollection sc, PermissionEnumKind kind, ScriptingPreferences sp)
   at Microsoft.SqlServer.Management.Smo.ScriptMaker.ScriptCreateSpecialUrn(Urn urn, ScriptingPreferences sp, ObjectScriptingType& scriptType)
   at Microsoft.SqlServer.Management.Smo.ScriptMaker.ScriptCreate(Urn urn, ScriptingPreferences sp, ObjectScriptingType& scriptType)
   at Microsoft.SqlServer.Management.Smo.ScriptMaker.ScriptCreateObjects(IEnumerable`1 urns)
   at Microsoft.SqlServer.Management.Smo.ScriptMaker.ScriptUrns(List`1 orderedUrns)
   at Microsoft.SqlServer.Management.Smo.ScriptMaker.DiscoverOrderScript(IEnumerable`1 urns)
   at Microsoft.SqlServer.Management.Smo.ScriptMaker.ScriptWorker(List`1 urns, ISmoScriptWriter writer)
   at Microsoft.SqlServer.Management.Smo.DataTransferBase.GetScriptLoadedTransferWriter()
   at Microsoft.SqlServer.Management.Smo.Transfer.TransferData()
   at Microsoft.SqlServer.Dts.Tasks.TransferObjectsTask.TransferObjectsTask.TransferDatabasesUsingSMOTransfer()
OnProgress,PAPERLESS-PRIME,NT AUTHORITY\NETWORK SERVICE,PAPERLESS-PRIME_PAPERLESS-PRIME_SQLEXPRESS_Transfer Objects Task,{F858F211-3783-40F8-9C7A-B477576706D4},{AB42BFE8-D674-4E86-ACEA-FA89BFF7E8BE},8/8/2016 11:40:55 AM,8/8/2016 11:40:55 AM,0,0x,Database transfer failed for 1 database(s).

请问这是产品的问题,还是我做错了?

2 个答案:

答案 0 :(得分:1)

我知道达到此目标的唯一正确方法是从较高版本的SQL Server生成脚本并在较低版本上运行它。为此,请按照以下步骤操作:

  1. 打开SQL Server Management Studio
  2. 右键单击您正在使用的数据库。
  3. 选择任务>生成脚本
  4. 您将看到一个向导屏幕,在简介上您可以单击下一步。
  5. 选择是编写整个数据库和对象的脚本还是单独选择它们。我喜欢将其保留为第一选择。点击下一步
  6. 在输出类型中,选择将脚本保存到特定位置
  7. 保存到文件
  8. 点击高级
  9. 服务器版本脚本
  10. 选择所需的版本,我的是2012
  11. 脚本的数据类型-模式和数据
  12. 保留其他设置。
  13. 单击确定
  14. 要生成的文件-单个文件
  15. 文件名-为脚本命名,扩展名为.sql
  16. 另存为Unicode文本
  17. 单击下一步
  18. 使用加号打开选项
  19. 在摘要中检查设置是否正常-您主要是在查看要编写脚本的数据的版本和类型
  20. 单击下一步
  21. 等待它运行,如果成功,您应该会看到绿色的勾号。
  22. 单击完成
  23. 然后转到保存脚本的位置。
  24. 打开脚本
  25. 确保.mdf和log.ldf文件的文件路径正确。
  26. 运行脚本
  27. 您可能会收到类似以下的错误: 无法添加主体“ CodeShare”,因为它不存在或您没有权限 可以忽略这一点。从来没有给我带来问题。

this article开始采取的步骤对我有很多帮助。

如果脚本中包含大量数据,则可以使用CMD加载它:

  1. 打开命令提示符窗口。
  2. 在命令提示符窗口中,输入:sqlcmd -S myServer\instanceName -i C:\myScript.sql
  3. 按Enter。

第2步中的路径当然只是简单的示例。

另一种方法是只编写不含数据的数据库架构的脚本,然后在具有较低版本SQL Server的目标服务器上重新创建它。接下来,您可以使用SSMS连接到两个实例,并将数据从一个实例复制到另一个实例,但是如果您在表之间定义了关系,则必须记住正确的复制顺序。在这种情况下,删除关系并重新创建它们可能是一个很好的策略(请记住,已在生成的脚本中获得了它们)。 这样做的另一个陷阱是主键/标识列-默认设置可防止将数据插入此类列,但是您可以实现以下运行命令:

SET IDENTITY_INSERT dbo.YourTableName ON;

成功插入后,您还应该运行:

SET IDENTITY_INSERT dbo.YourTableName OFF;

希望本手册对您有帮助。

答案 1 :(得分:0)

这里有点晚了,但是希望这对其他人有帮助。我收到了类似的问题,并将两台服务器都更新为最新的CU,为我解决了该问题。