SQL Server 2016 MERGE Причиной Сбой проверки системного утверждения

Позвольте мне сначала сказать, что я понимаю, что Microsoft говорит, что у них есть исправление ошибки, но мы установили накопительное обновление для 2016 года и до сих пор не повезло. Это MERGE для SCD типа 2, который работал нормально в 2014 году. Мы тестируем наше обновление до 2016 года, когда появилась эта ошибка. Ниже приведен пример запроса, который вызывает проблему.

/* Type 2 Merge */
INSERT INTO BDW.DMEmployer 
                (
                SCD_Current,
                Source_System,
                Company,
                Employer_Number
                )
SELECT          SCD_Current,
                Source_System,
                Company,
                Employer_Number
FROM
    (
       MERGE BDW.DMEmployer dim
       USING ETLWork.work.DMEmployer work
              ON     dim.Employer_Number = work.Employer_Number AND dim.Company = work.Company
       -- This inserts new records in the dimension table
       WHEN NOT MATCHED THEN
              INSERT (SCD_Current,
                    Source_System,
                    Company,
                    Employer_Number
       VALUES (     'Y',
                    work.last_updated,
                    'I',
                    'POINT',
                    work.Company,
                    work.Employer_Number
       WHEN MATCHED AND dim.SCD_Current = 'Y'
                    AND ( dim.Employer_FEIN <> work.Employer_FEIN ) THEN
               UPDATE SET   SCD_Current='N', 
                            SCD_Valid_To_Date = work.last_updated-2

        OUTPUT $Action
                    Action_Taken,                                          
                    'Y' AS SCD_Current,
                    work.Source_System,
                    work.Company,
                    work.Employer_Number
    ) AS MERGE_OUT
WHERE MERGE_OUT.Action_Taken = 'UPDATE';

Если бы вы только запускали MERGE, это не проблема. Но попытка запустить все это сейчас в 2016 году приводит к неудаче ниже. Мы попробовали исправить ошибку, но мне интересно, пропустил ли я что-то еще. Это только добавление ~150 строк во внешней части INSERT INTO.

Сообщение об ошибке:

Расположение: pageref.cpp:955

Выражение: IS_OFF (BUF_MINLOGGED, m_buf->bstat) || pageModifyType!= PageModifyType_Contents || GetPagePtr ()->IsTextPage ()

СПИД: 52

Идентификатор процесса: 2820

Сообщение 3624, уровень 20, состояние 1, строка 3 Проверка системного подтверждения не выполнена. Проверьте подробности в журнале ошибок SQL Server. Как правило, ошибка утверждения вызвана ошибкой программного обеспечения или повреждением данных. Чтобы проверить, не повреждена ли база данных, попробуйте запустить DBCC CHECKDB. Если вы согласились отправить дампы в Microsoft во время установки, мини-дамп будет отправлен в Microsoft. Обновление может быть доступно от Microsoft в последнем пакете обновления или в исправлении технической поддержки.

Сообщение 10054, уровень 20, состояние 0, строка 0 Произошла ошибка транспортного уровня при получении результатов с сервера. (провайдер: провайдер TCP, ошибка: 0 - существующее соединение было принудительно закрыто удаленным хостом.)

Мы запустили DBCC CHECKDB, который ничего не обнаружил. Итак, это все еще ошибка, или есть некоторые настройки, которые я мог пропустить во время нашей установки? Спасибо за помощь.

1 ответ

По моему опыту, использование модели восстановления = простой иногда дает эту ошибку. Переключение на модель восстановления = полная устраняет проблему и является моим обходным путем, хотя и не идеальным.

Другие вопросы по тегам