我正在致力于将存储过程从本地 SQL Server 数据库迁移到 Azure SQL 数据仓库 (ASDW)。在整个过程中,我不得不解决一些缺失的功能——耗时但并非不可能。我必须做的一件事是将 CTE 后跟 MERGE 语句替换为临时表后跟 UPDATE/INSERT/DELETE 语句(因为 CTE 后面不能跟这些语句)。在每个 SP 的开头,我检查临时表并删除它们(如果存在)。
今天,我在 ASDW 中创建了另一个存储过程,没有任何临时表(没有更新/插入/删除,所以我将 CTE 留在那里),它“编译”了,并且我能够毫无问题地运行它(返回结果集为空,因为还没有数据)。之后我创建了另一个 SP,当我执行它时,出现以下错误:
...No catalog entry found for partition ID (id) in database 26. The metadata is inconsistent. Run DBCC CHECKDB to check for a metadata corruption...
然后我回到我提到的第一个 SP,它给了我同样的错误,即使它之前运行没有缺陷。
我尝试按照指示运行 DBCC CHECKDB,但遗憾的是,它不受支持/不起作用。
我进行了很多研究,最终将我的数据库从 100DWU 扩展到 500DWU。我的数据库存储大小限制为 0.16%,并且几乎没有任何数据(数据库总大小为 <300MB)。
这有解释吗?如果没有,我就无法在生产环境中使用这个平台。
完整错误:
Msg 110802, Level 16, State 1, Line 1
110802;An internal DMS error occurred that caused this operation to fail.
Details: Exception: Microsoft.SqlServer.DataWarehouse.DataMovement.Workers.DmsSqlNativeException,
Message: SqlNativeBufferReader.Run, error in OdbcExecuteQuery: SqlState:
42000, NativeError: 608, 'Error calling: SQLExecDirect(this->GetHstmt(), (SQLWCHAR *)statementText, SQL_NTS), SQL return code: -1 | SQL Error Info:
SrvrMsgState: 1, SrvrSeverity: 16, Error <1>: ErrorMsg: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]No catalog entry found for partition ID
72057594047758336 in database 36. The metadata is inconsistent. Run DBCC
CHECKDB to check for a metadata corruption. | Error calling: pReadConn-
>ExecuteQuery(statementText, bufferFormat) | state: FFFF, number: 134148,
active connections: 100', Connection String: Driver={pdwodbc};APP=TypeC01-
DmsNativeReader:DB196\mpdwsvc (2504)- ODBC;Trusted_Connection=yes;AutoTranslate=no;Server=\\.\pipe\DB.196-
bb5f9dd884cf\sql\query
最佳答案
得知您使用 Azure SQL 数据仓库的体验,我们深表遗憾。我认为这是与 NOT NULL 列的 BIT 数据类型处理相关的缺陷。您能否确认您有一个 BIT NOT NULL 列(例如,CREATE TABLE t1 (IsTrue BIT NOT NULL);)?
如果是这样,修复程序已编码并正在测试发布中。现在为了缓解这个问题,您可以切换到 TINY INT 或删除该列的 NOT NULL 设置。
关于Azure SQL 数据仓库 : No catalog entry found for partition ID <id> in database <id>. 元数据不一致。运行 DBCC CHECKDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35708960/