我正在努力将存储过程从本地SQL Server数据库移动到Azure SQL数据仓库(ASDW)。在整个过程中,我不得不解决一些缺失的功能 - 耗费时间但并非不可能。我必须做的一件事是用临时表替换CTE,然后用MERGE语句替换UPDATE / INSERT / DELETE语句(因为CTE不能跟这些语句一起)。在每个SP的开头,我检查临时表并删除它们(如果存在)。
今天,我在ASDW中创建了另一个存储过程,没有任何临时表(没有更新/插入/删除所以我将CTE留在那里),它“编译”了,我能够毫无问题地运行它(返回一个空结果集,因为还没有数据)。之后我创建了另一个SP,当我去执行它时,我收到了以下错误:
...在数据库26中找不到分区ID(id)的商品。元数据不一致。运行DBCC CHECKDB以检查元数据损坏...
然后我回到了我提到的第一个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
答案 0 :(得分:1)
很抱歉听到您使用Azure SQL数据仓库的经历。我相信这是与NOT NULL列的BIT数据类型处理相关的缺陷。你能否确认你有一个BIT NOT NULL列(例如,CREATE TABLE t1(IsTrue BIT NOT NULL);)?
如果是这样,修复程序已编码并正在测试发布。要立即缓解此问题,您可以切换到TINY INT或删除列的NOT NULL设置。