SQL Server 2012跨链接服务器迁移空间数据,查询超时?
我们正在从旧系统(sql server 2008)迁移到新系统(sql server 2012),我们使用的数据源是远程的,因此我们将其配置为链接服务器,我们迁移的源中的数据具有特殊数据(地理类型),我们正在迁移每个客户的数据,因此,一些客户拥有比其他客户更多的数据,我们对数据进行批处理,并使用OPENQUERY将空间数据拉过。对于数据较少的客户,迁移会顺利进行并成功完成,但对于一个表中记录数超过数百万条的客户,迁移会停止,并主要出现两个错误: 错误是这样出现的: 链接服务器“xxx”的OLE DB提供程序“yyy”返回消息“查询超时已过期”。 消息7399,16级,状态1,服务器nnn,第1行 链接服务器“xxx”的OLE DB提供程序“yyy”报告了一个错误。由于达到资源限制,提供程序终止了执行。 消息7320,16级,状态2,服务器ttt,第1行 无法执行查询“SQL Server 2012跨链接服务器迁移空间数据,查询超时?,sql,sql-server,Sql,Sql Server,我们正在从旧系统(sql server 2008)迁移到新系统(sql server 2012),我们使用的数据源是远程的,因此我们将其配置为链接服务器,我们迁移的源中的数据具有特殊数据(地理类型),我们正在迁移每个客户的数据,因此,一些客户拥有比其他客户更多的数据,我们对数据进行批处理,并使用OPENQUERY将空间数据拉过。对于数据较少的客户,迁移会顺利进行并成功完成,但对于一个表中记录数超过数百万条的客户,迁移会停止,并主要出现两个错误: 错误是这样出现的: 链接服务器“xxx”的OLE
select top (200000)
[row] = row_number () over ( order by t.[x])
, .....
, [Spatial] = cast(ts.[Spatial] as varbinary(max))
from [..].[..].[..] t
join [...].[..].[… ] s
on t.[..] = s.[...]
where (t.[x] > '00000000-0000-0000-0000-000000000000')
and v.[x] = x
order by t.[x]
针对链接服务器“xxx”的OLE DB提供程序“yyy”。生成步骤“执行Windows批处理命令”将生成标记为失败
这个问题也发生在另一个表中,该表中没有空间数据
我们试图遵循的方法,
我们增加了查询的超时时间,
我们已将批量大小降至每批200000
提供程序处于“进程模式”
我们只有两个链接服务器,因此缓冲区大小超出了可接受范围,
我们尝试使用管理员角色运行迁移,以确保这不是权限问题
我们认为这可能是网络问题,但不是负载平衡器问题。也许是别的原因
另一个经常出现的错误是
HResult 0x40,级别16,状态1
TCP提供程序:指定的网络名称不再可用。
任何可能是原因的想法都将受到极大的赞赏
谢谢,
Lsaif我会说“指定的网络名称不再可用”。错误表示远程服务器没有响应。因为SQLServer已经有一段时间没有“听到”远程服务器的消息了,所以它放弃了。我会将批量缩小到非常小的规模,并随着成功而增加(而不是相反)。这样,您将找到一个有效的批量大小。此外,这在“客户”之间可能有所不同,具体取决于您与他们的连接(即线路类型和大小、线路上的流量等)
P>个人,我喜欢BCP OUT/BCP的选择,因为我知道它是有效的,但是你仍然需要考虑从远程服务器传递数据的方法。如果您有一个健壮的企业MFT而不是专用T1或更好的,那么您可能不会有问题
SSIS提供了更多的直接传输,但我认为您将遇到与现在相同的网络问题。也就是说,您可以在SSIS中创建通用BCP解决方案。我认为“指定的网络名称不再可用”。错误表示远程服务器没有响应。因为SQLServer已经有一段时间没有“听到”远程服务器的消息了,所以它放弃了。我会将批量缩小到非常小的规模,并随着成功而增加(而不是相反)。这样,您将找到一个有效的批量大小。此外,这在“客户”之间可能有所不同,具体取决于您与他们的连接(即线路类型和大小、线路上的流量等)
P>个人,我喜欢BCP OUT/BCP的选择,因为我知道它是有效的,但是你仍然需要考虑从远程服务器传递数据的方法。如果您有一个健壮的企业MFT而不是专用T1或更好的,那么您可能不会有问题
SSIS提供了更多的直接传输,但我认为您将遇到与现在相同的网络问题。也就是说,您可以在SSIS中创建一个通用BCP解决方案。这并不能回答您的“为什么”问题,但我会使用本机模式的良好ol来实现这一点。这将把记录复制到一个平面文件中,然后您可以使用BCP IN在另一端导入它们。倾向于比OpenQuery更快,并且避免了许多超时问题。这并不能回答您的“为什么”问题,但我会使用良好的ol和本机模式来实现这一点。这将把记录复制到一个平面文件中,然后您可以使用BCP IN在另一端导入它们。倾向于比OpenQuery更快,并且避免了许多超时问题。