我们正在从旧系统(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 提供程序:指定的网络名称不再可用。
任何想法可能是一个原因将非常感激
谢谢,
赛义夫