Хранилище данных SQL Azure: не найдена запись каталога для идентификатора раздела ‹id› в базе данных ‹id›. Метаданные несовместимы. Запустите команду DBCC CHECKDB.

Я работаю над перемещением хранимых процедур из локальной базы данных SQL Server в хранилище данных SQL Azure (ASDW). На протяжении всего процесса мне приходилось работать с несколькими отсутствующими функциями — отнимало много времени, но не невозможно. Одна вещь, которую мне пришлось сделать, это заменить CTE, за которыми следуют операторы MERGE, временными таблицами, за которыми следуют операторы UPDATE/INSERT/DELETE (поскольку за CTE не могут следовать эти операторы). В начале каждого SP я проверяю временные таблицы и удаляю их, если они существуют.

Сегодня я создал еще одну хранимую процедуру в ASDW без каких-либо временных таблиц (без обновлений/вставок/удалений, поэтому я оставил там CTE), она «скомпилировалась», и я смог запустить ее без проблем (вернул пустой набор результатов , так как данных пока нет). После этого я создал еще один SP, и когда я пошел на его выполнение, я получил следующую ошибку:

... Не найдена запись каталога для идентификатора раздела (id) в базе данных 26. Метаданные несовместимы. Запустите DBCC CHECKDB, чтобы проверить наличие повреждения метаданных...

Затем я вернулся к первому SP, который я упомянул, и он выдал ту же ошибку, хотя раньше он работал без ошибок.

Я попытался запустить DBCC CHECKDB в соответствии с инструкциями, но, увы, он не поддерживается/не работает.

Я много копался, и в итоге я увеличил свою базу данных со 100 DWU до 500 DWU. У меня 0,16% от предельного размера хранилища моей базы данных, и данных почти нигде нет (общий размер БД составляет ‹300 МБ).

Есть ли этому объяснение? Если нет, я не могу с чистой совестью использовать эту платформу в производственной среде.

Полная ошибка:

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

person How 'bout a Fresca    schedule 29.02.2016    source источник
comment
Как вы тестируете свою временную таблицу?   -  person Rob Farley    schedule 29.02.2016
comment
если object_id('tempdb..#tablename') не является нулевой отбрасываемой таблицей. Однако хранимые процедуры, выявляющие эту ошибку, не используют временные таблицы — они все еще используют CTE. Добавлю эту деталь в пост.   -  person How 'bout a Fresca    schedule 01.03.2016
comment
Но CTE с INSERT/DELETE/UPDATE не поддерживаются, так что это может быть вашей проблемой, верно?   -  person Rob Farley    schedule 01.03.2016
comment
Извините за путаницу - есть некоторые хранимые процедуры, в которых нет операторов INSERT/DELETE/UPDATE. Для этих SP я сохранил CTE. Когда я запускаю SP, у которых CTE составляет 100DWU, я получаю сообщение об ошибке, упомянутое выше.   -  person How 'bout a Fresca    schedule 01.03.2016
comment
А если использовать подзапросы вместо CTE?   -  person Rob Farley    schedule 01.03.2016


Ответы (1)


Мне жаль слышать о вашем опыте работы с хранилищем данных SQL Azure. Я считаю, что это дефект, связанный с обработкой типа данных BIT для столбцов NOT NULL. Можете ли вы подтвердить, что у вас есть столбец BIT NOT NULL (например, CREATE TABLE t1 (IsTrue BIT NOT NULL);)?

Если это так, то исправление было закодировано и находится в стадии тестирования для выпуска. Чтобы смягчить это сейчас, вы можете либо переключиться на TINY INT, либо удалить параметр NOT NULL для столбца.

person Matt Usher    schedule 01.03.2016
comment
У меня нет столбца этого типа данных. Если бы это было причиной проблемы, как бы ее решило масштабирование DW со 100 DWU до 500 DWU? - person How 'bout a Fresca; 01.03.2016
comment
Если вы еще этого не сделали, отправьте заявку в службу поддержки по этой проблеме, чтобы ее можно было надлежащим образом изучить. - person JRJ; 07.03.2016
comment
Можете ли вы создать заявку в службу поддержки, следуя инструкциям по ссылке ниже? azure.microsoft .com/en-us/documentation/articles/ Если у вас нет плана поддержки (требуется для создания обращения в службу технической поддержки), напишите команде хранилища данных SQL напрямую по адресу [email protected] и включите имя вашего сервера, имя базы данных, сообщение об ошибке и приблизительная временная метка этой ошибки - person JRJ; 08.03.2016