VS 2017 Database Project导入大数据库因SqlSpatialIndex反向工程超时失败
解决SSDT 17导入大型数据库时空间索引反向工程超时问题
我之前在使用SSDT 17(15.6.5版本)导入大型SQL Server数据库时,也碰到过一模一样的空间索引反向工程超时问题,折腾了好一阵才解决,给你几个亲测有效的方案:
延长SSDT的连接与命令超时时间
首先最直接的就是调大超时阈值:- 在Visual Studio里,点击
工具->选项->数据库工具->数据连接,把“连接超时”从默认的30秒改成300秒甚至更长,比如600秒。 - 如果还是超时,就去修改SSDT的配置文件:找到VS安装目录下的
Microsoft.Data.Tools.Schema.Sql.dll.config(路径大概是C:\Program Files (x86)\Microsoft Visual Studio\2017\你的版本\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\150),找到<add key="SqlCommandTimeout" value="30" />这一行,把value改成更大的数值,比如600。
- 在Visual Studio里,点击
临时排除空间索引再手动补全
既然报错明确指向SqlSpatialIndex类型的元素,那可以先跳过这类索引的反向工程:
在导入数据库的向导中,走到“选择要导入的对象”步骤时,展开“索引”节点,取消所有空间索引的勾选。完成基础数据库结构导入后,再从原数据库生成这些空间索引的脚本,手动粘贴到SSDT项目中,或者通过“比较架构”功能把索引同步到项目里。优化源数据库的元数据查询性能
SSDT反向工程时会查询系统视图获取对象元数据,如果源数据库的统计信息过时或者负载过高,会拖慢查询速度:
先在源数据库执行UPDATE STATISTICS更新所有表的统计信息,或者暂时停止非核心的业务进程,减轻数据库压力,让SSDT能更快拿到元数据。分批次拆分导入
不要一次性导入整个数据库,拆分模块分批操作:比如先导入所有表结构,再单独导入索引、存储过程、触发器等对象;或者按业务模块划分,每次只导入一个模块的对象。小批次操作不容易触发超时。
另外还要注意,如果是远程数据库,检查一下网络连接的稳定性,避免因为网络波动导致的超时问题。
内容的提问来源于stack exchange,提问作者user3268139
相关产品推荐
相关产品推荐

