2

我们正在从旧系统(sql server 2008)迁移到新系统(sql server 2012),我们使用的数据源是远程的,所以我们将它配置为链接服务器,我们正在迁移的源中的数据有特殊数据(地理类型),我们正在迁移每个客户的数据,因此一些客户拥有比其他客户更多的数据,我们对数据进行批处理,并且我们正在使用OPENQUERY来拉取空间数据。对于数据较少的客户,迁移顺利并成功完成,但对于一个表中有超过几百万条记录的客户,迁移停止并主要出现2个错误:

错误是这样来的:

链接服务器“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 批处理命令”将构建标记为失败

这个问题也发生在另一个没有空间数据的表上。

我们尝试遵循的方法,我们增加了查询的超时时间,我们将批次大小降低到每批次 200,000 个 Provider 处于“进程模式”,我们只有几个链接的服务器,所以缓冲区大小是可以接受的,我们尝试使用管理员角色运行迁移以确保它不是权限问题我们认为这可能是网络问题,但它不是负载均衡器问题。也许是别的东西,

另一个经常出现的错误是

HResult 0x40,级别 16,状态 1 TCP 提供程序:指定的网络名称不再可用。

任何想法可能是一个原因将非常感激

谢谢,

赛义夫

4

1 回答 1

0

我会说“指定的网络名称不再可用”。错误表示远程服务器没有响应。由于 SQL Server 已经有一段时间没有“听到”来自远程服务器的消息,所以它放弃了。我会将批量减少到非常小的程度,并随着成功而增加(而不是相反)。这样你就会找到一个有效的批量大小。此外,这可能因“客户”而异,具体取决于您与他们的连接(即线路的类型和大小、线路上的流量等)。

就个人而言,我也喜欢 BCP OUT/BCP IN 选项,因为我知道它有效,但是您仍然需要考虑从远程服务器传输数据的方法。如果您在专用 T1 或更高版本上拥有强大的企业 MFT,那么您可能不会遇到问题。

SSIS 提供更多的直接传输,但我想您会遇到与现在相同的网络问题。也就是说,您可以在 SSIS 中创建通用 BCP 解决方案。

于 2012-06-16T17:48:18.493 回答