sql-server - VS 2017 数据库项目由于超时错误而无法导入数据库

标签 sql-server database visual-studio-2017 sql-server-data-tools

VS 2017 数据库项目无法导入数据库:尝试对 Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlSpatialIndex 类型的元素进行逆向工程时,从 SQL Server 收到错误:超时已过期。操作完成之前超时时间已过,或者服务器没有响应。

我在 SSDT 17 版本 15.6.5 中创建了一个 SQL Server 数据库项目。我能够导入一些小型数据库。但无法导入我们的主数据库,该数据库相当大。

收集列存储索引时导入失败,并出现以下错误: enter image description here

我还检查了 SQL Server 事件监视器,它正在运行下面的查询,但当我尝试手动运行它时它没有返回任何内容:

SELECT * FROM (
SELECT 
        SCHEMA_NAME([o].[schema_id])    AS [SchemaName],
        [si].[object_id]                AS [ColumnSourceId],
        [o].[name]                      AS [ColumnSourceName],
        [o].[type]                      AS [ColumnSourceType],
        [ic].[column_id]                AS [ColumnId],
        [c].[name]                      AS [ColumnName],
        [si].[index_id]                 AS [IndexId],
        [si].[name]                     AS [IndexName],
        [ds].[type]                     AS [DataspaceType],
        [ds].[data_space_id]            AS [DataspaceId],
        [ds].[name]                     AS [DataspaceName],
        [si].[fill_factor]              AS [FillFactor],
        [si].[is_padded]                AS [IsPadded],
        [si].[is_disabled]              AS [IsDisabled],
        [si].[allow_page_locks]         AS [DoAllowPageLocks],
        [si].[allow_row_locks]          AS [DoAllowRowLocks],
        [sit].[cells_per_object]        AS [CellsPerObject],
        [sit].[bounding_box_xmin]       AS [XMin],
        [sit].[bounding_box_xmax]       AS [XMax],
        [sit].[bounding_box_ymin]       AS [YMin],
        [sit].[bounding_box_ymax]       AS [YMax],
        [sit].[level_1_grid]            AS [Level1Grid],
        [sit].[level_2_grid]            AS [Level2Grid],
        [sit].[level_3_grid]            AS [Level3Grid],
        [sit].[level_4_grid]            AS [Level4Grid],
        [sit].[tessellation_scheme]     AS [TessellationScheme],
        [s].[no_recompute]              AS [NoRecomputeStatistics],
        [p].[data_compression]          AS [DataCompressionId],
        CONVERT(bit, CASE WHEN [ti].[data_space_id] = [ds].[data_space_id] THEN 1 ELSE 0 END)
                                        AS [EqualsParentDataSpace]
FROM
        [sys].[spatial_indexes]          AS [si] WITH (NOLOCK)
        INNER JOIN [sys].[objects]       AS [o] WITH (NOLOCK) ON [si].[object_id] = [o].[object_id]
        INNER JOIN [sys].[spatial_index_tessellations] [sit] WITH (NOLOCK) ON [si].[object_id] = [sit].[object_id] AND [si].[index_id] = [sit].[index_id]
        INNER JOIN [sys].[data_spaces]   AS [ds] WITH (NOLOCK) ON [ds].[data_space_id] = [si].[data_space_id] 
        INNER JOIN [sys].[index_columns] AS [ic] WITH (NOLOCK) ON [si].[object_id] = [ic].[object_id] AND [si].[index_id] = [ic].[index_id]
        INNER JOIN [sys].[columns]       AS [c] WITH (NOLOCK) ON [si].[object_id] = [c].[object_id] AND [ic].[column_id] = [c].[column_id]
        INNER JOIN [sys].[objects]       AS [o2] WITH (NOLOCK) ON [o2].[parent_object_id] = [si].[object_id]
        INNER JOIN [sys].[stats]         AS [s] WITH (NOLOCK) ON [o2].[object_id] = [s].[object_id] AND [s].[name] = [si].[name]
        INNER JOIN [sys].[partitions]    AS [p] WITH (NOLOCK) ON [p].[object_id] = [o2].[object_id] AND [p].[partition_number] = 1
        LEFT  JOIN [sys].[indexes]       AS [ti] WITH (NOLOCK) ON [o].[object_id] = [ti].[object_id]
        LEFT JOIN [sys].[tables]         AS [t] WITH (NOLOCK) ON [t].[object_id] = [si].[object_id]
WHERE [si].[is_hypothetical] = 0
        AND [ti].[index_id] < 2
        AND OBJECTPROPERTY([o].[object_id], N'IsSystemTable') = 0
        AND ([t].[is_filetable] = 0 OR [t].[is_filetable] IS NULL)
        AND ([o].[is_ms_shipped] = 0 AND NOT EXISTS (SELECT *
                                        FROM [sys].[extended_properties]
                                        WHERE     [major_id] = [o].[object_id]
                                              AND [minor_id] = 0
                                              AND [class] = 1
                                              AND [name] = N'microsoft_database_tools_support'
                                       ))
) AS [_results]

我也尝试过更改连接超时设置,但没有成功。

最佳答案

我也遇到了这个问题,甚至使用 QueryCommandTimeout 的 regedit 设置和其他类似错误的解决方案。可能不是一个“解决方案”,但这就是我能够解决这个问题的方法。我从命令行运行 SqlPackage 工具,然后导入生成的 DACPAC:

"C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin\SqlPackage.exe" /Action:Extract /SourceConnectionString:"Data Source=localhost;Initial Catalog=MyDB;Integrated Security=True;" /TargetFile:"path\to\database.dacpac" /p:CommandTimeout="0"

注意/p:CommandTimeout="0"。在变为 0 之前,您可能需要尝试较大的值。

关于sql-server - VS 2017 数据库项目由于超时错误而无法导入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49724001/

相关文章:

php - 日志文件与数据库在哪里保存用户事件数据以供分析?

database - Flask Migrate 和 PostgreSQL 数据更新

c++ - 判断SQLite数据库是否被锁定

visual-studio - Visual Studio 2017 中的注释样式

sql-server - 数据库项目未运行部署后脚本

.net - 找不到非对称 key ——因为它不存在或您没有权限

mysql - 如何在 MSSQL 中对单列使用 Group By

sql - 仅包括事件顺序有效的分组观察

c++ - 我们如何在 VS2017 中在项目成员之间共享编译设置?

c++ - VS2017 中缺少 Win32 控制台应用程序。如何创建 C++ 空项目?