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 ответ
По моему опыту, использование модели восстановления = простой иногда дает эту ошибку. Переключение на модель восстановления = полная устраняет проблему и является моим обходным путем, хотя и не идеальным.