3

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

1 回答 1

1

得知您对 Azure SQL 数据仓库的体验,我深感遗憾。我相信这是与 NOT NULL 列的 BIT 数据类型处理相关的缺陷。您能否确认您有一个 BIT NOT NULL 列(例如,CREATE TABLE t1 (IsTrue BIT NOT NULL);)?

如果是这样,则已对修复进行了编码并正在测试发布。现在要缓解这种情况,您可以切换到 TINY INT 或删除列的 NOT NULL 设置。

于 2016-03-01T13:15:45.880 回答