Ich aktualisiere derzeit unser Data Warehouse von SQL 2012 auf SQL 2016. Ich habe sowohl meine alten als auch meine neuen DWs parallel nebeneinander ausgeführt.
Mein ETL-Prozess (ein von einem Drittanbieter in SSIS entwickeltes Framework) wurde 2012 mehr als zwei Jahre lang erfolgreich ausgeführt, schlägt jedoch 2016 fehl. Bisher sind die Datenbanken und der ETL-Prozess identisch.
Beide Server sind virtuelle Maschinen, die unter VMWare ausgeführt werden. Alter Server ist Win 2008 mit 24 GB RAM. SQL 2012 Std. Maximales Mem auf 16 GB eingestellt. Neuer Server ist Win 2012 mit 64 GB RAM. SQL 2016 dev. Maximales Mem auf 50 GB eingestellt. In New DW wird v13.0.1601.5 RTM Developer Edition (64-Bit) ausgeführt.
Während der Ausführung meines ETL-Prozesses schlagen die Ladeschritte, die eine SQL-Zusammenführung in eine Dimension oder eine Faktentabelle verwenden, mit dem folgenden Fehler fehl.
Voller Text:
BESCHREIBUNG: SQL Server-Zusicherung: Datei :, Zeile = 951 Fehlgeschlagene Zusicherung = 'IS_OFF (BUF_MINLOGGED, m_buf-> bstat) || pageModifyType! = PageModifyType_Contents || GetPagePtr () -> IsTextPage () '. Dieser Fehler kann zeitabhängig sein. Wenn der Fehler nach dem erneuten Ausführen der Anweisung weiterhin besteht, überprüfen Sie die Datenbank mit DBCC CHECKDB auf strukturelle Integrität oder starten Sie den Server neu, um sicherzustellen, dass die speicherinternen Datenstrukturen nicht beschädigt werden.
Wie empfohlen habe ich DBCC ausgeführt und es wurden keine Fehler gefunden. Ich habe auch SQL neu gestartet. Ich habe dann den ETL-Prozess neu gestartet und den gleichen Fehler erhalten.
Meine Suche nach diesem Fehler zeigt, dass ein bekannter Fehler in SQL 2008, 2012 und 2014 bekannt war und in nachfolgenden Hotfixes und kumulativen Updates behoben wurde. Ich bin ein bisschen überrascht, dass es 2016 wieder auftaucht.
Die gefundenen Links wirken sich auf SSIS aus, wenn versucht wird, Einfügungen vorzunehmen, wenn sich die Datenbank im Wiederherstellungsmodell "Einfach" oder "Massenprotokolliert" befindet. (Ich verwende ein einfaches Wiederherstellungsmodell.)
Eine empfohlene Problemumgehung besteht darin, das Db-Wiederherstellungsmodell in FULL zu ändern. Ich habe es versucht und es funktioniert, aber es ist keine gute Lösung für ein Data Warehouse.
Hat das noch jemand mit 2016 erlebt?
Kann jemand alternative Problemumgehungen vorschlagen?
Aktualisierung:
26.7.2016: Ich habe das Critical Update KB3164398 (v13.0.1708.0) angewendet und das Problem besteht weiterhin.
27/7/2016: Ich habe das kumulative Update CU1 KB3164674 (v13.0.2149.0) angewendet.
08.03.2016: Bei unserem kleinsten Würfel ist über Nacht ein Fehler aufgetreten. CU1 hat das Problem nicht behoben. Heute habe ich den Fehler bei MS Connect gemeldet und einen Supportanruf bei Microsoft protokolliert.
08.12.2016: Der MS-Support antwortete zunächst, aber die Antwort lautete "Wir haben keine Lösung dafür". Der Support-Mitarbeiter wollte es mit seinen Kollegen besprechen und sich bei mir melden. 8 Tage später habe ich nichts von ihm gehört.
Obwohl ich keine Lösung gefunden habe, haben wir eine Problemumgehung gefunden, die zu uns passt. Siehe meine gepostete Antwort.
29.9.2016. Ich habe letzte Woche CU2 angewendet. Am Donnerstag haben wir versehentlich eine alte Version der Zusammenführung ausgeführt, die mit demselben Fehler erneut fehlgeschlagen ist. Also .. CU2 hat es auch nicht behoben.
23/1/2017 : Ich habe 2016 SP1 CU1 angewendet und glaube, dass dies das Problem behoben hat. Insbesondere KB3205964
quelle
Ich glaube, dies wurde im Jahr 2016 SP1 CU1 behoben.
Speziell von KB3205964
quelle
Dies wird durch Anwenden des kumulativen Updates 1 (CU1) für MSSQL2016 behoben, siehe Link https://support.microsoft.com/en-us/kb/3164674
quelle
Ich glaube, wir haben eine andere Problemumgehung gefunden. Ich poste meine Antwort, da ich denke, dass sie nützlich sein kann, und sie unterscheidet sich genug von wBobs Vorschlag.
Wir haben den Einfügeteil der Merge-Anweisung so geändert, dass er in eine temporäre Tabelle und nicht in das ursprüngliche Ziel eingefügt wird.
Sobald die Merge-Anweisung ausgeführt wird, fügen wir sie aus der # -Tabelle in das Ziel ein.
Es ist nicht ideal, aber zumindest die Zusammenführung behandelt die Komplexität des "Upsert" immer noch, indem Zeilen markiert werden, die zurückgezogen / abgelaufen sind.
Wir haben festgestellt, dass dies ein akzeptabler Kompromiss ist, verglichen mit dem vollständigen Umschreiben der Zusammenführung als separate Einfügungen und Aktualisierungen.
quelle