2016-02-29 57 views
3

我正在將存儲過程從本地SQL Server數據庫移動到Azure SQL數據倉庫(ASDW)。在整個過程中,我不得不解決一些缺失的功能 - 耗時但並非不可能。我不得不做的一件事是用臨時表替換CTE的MERGE語句,然後是UPDATE/INSERT/DELETE語句(因爲CTE的後面不能跟這些語句)。在每個SP的開始處,我檢查臨時表並刪除它們(如果存在)。Azure SQL數據倉庫:在數據庫<id>中找不到分區ID <id>的商品。元數據不一致。運行DBCC CHECKDB

今天,我在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 
+0

您如何測試臨時表?如果object_id('tempdb ..#tablename')不是null drop table,則爲 –

+0

。顯示此錯誤的存儲過程雖然不使用臨時表,但它們仍在使用CTE。我會將這些細節添加到帖子中。 –

+0

但不支持INSERT/DELETE/UPDATE的CTE,所以這可能是你的問題,對吧? –

回答

1

我很遺憾聽到與SQL Azure的數據倉庫的體驗。我相信這是與NOT NULL列的BIT數據類型處理有關的缺陷。你能否確認你有一個BIT NOT NULL列(例如,CREATE TABLE t1(IsTrue BIT NOT NULL);)?

如果是這樣,一個修復程序已被編碼,並正在測試發佈。爲了緩解這個問題,您可以切換到TINY INT或刪除列的NOT NULL設置。

+0

我沒有這種數據類型的列。如果這是造成這個問題的原因,那麼如何將DW從100 DWU擴展到500 DWU可以解決這個問題? –

+0

如果您尚未這樣做,請爲此問題提出支持憑單,以便可以對其進行正確調查。 – JRJ

+0

您是否可以按照以下鏈接中的說明創建支持服務單? https://azure.microsoft.com/en-us/documentation/articles/sql-data-warehouse-get-started-create-support-ticket/ 如果您沒有支持計劃(要求創建技術支持案例),請直接在sqldwfeedback @ microsoft上向SQL Data Warehouse團隊發送電子郵件。幷包括您的服務器名稱,數據庫名稱,錯誤消息和此錯誤的大致時間戳 – JRJ

相關問題