我正在将存储过程从本地 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