SQL Server 2012跨链接服务器迁移空间数据,查询超时?

SQL Server 2012跨链接服务器迁移空间数据,查询超时?,sql,sql-server,Sql,Sql Server,我们正在从旧系统(sql server 2008)迁移到新系统(sql server 2012),我们使用的数据源是远程的,因此我们将其配置为链接服务器,我们迁移的源中的数据具有特殊数据(地理类型),我们正在迁移每个客户的数据,因此,一些客户拥有比其他客户更多的数据,我们对数据进行批处理,并使用OPENQUERY将空间数据拉过。对于数据较少的客户,迁移会顺利进行并成功完成,但对于一个表中记录数超过数百万条的客户,迁移会停止,并主要出现两个错误: 错误是这样出现的: 链接服务器“xxx”的OLE

我们正在从旧系统(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行 无法执行查询“

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更快,并且避免了许多超时问题。