Actualmente estoy actualizando nuestro almacén de datos de SQL 2012 a SQL 2016. Tengo mis DW antiguos y nuevos funcionando de forma paralela.
Mi proceso ETL (un marco desarrollado en SSIS por un tercero) se ejecutó con éxito durante más de 2 años en 2012, pero falla en 2016. Hasta ahora, las bases de datos y el proceso ETL son idénticos.
Ambos servidores son máquinas virtuales que se ejecutan en VMWare. Old Server es Win 2008 con 24 Gb de RAM. SQL 2012 Std. Memoria máxima establecida en 16 Gb. El nuevo servidor es Win 2012 con 64 Gb de RAM. SQL 2016 dev. Memoria máxima establecida en 50 Gb. El nuevo DW ejecuta v13.0.1601.5 RTM Developer Edition (64 bits).
Mientras ejecuto mi proceso ETL, los pasos de carga que usan una combinación SQL en una tabla de dimensiones o hechos fallan con el siguiente error.
Texto completo:
DESCRIPCIÓN: Afirmación de SQL Server: Archivo:, línea = 951 Afirmación fallida = 'IS_OFF (BUF_MINLOGGED, m_buf-> bstat) || pageModifyType! = PageModifyType_Contents || GetPagePtr () -> IsTextPage () '. Este error puede estar relacionado con el tiempo. Si el error persiste después de volver a ejecutar la instrucción, use DBCC CHECKDB para verificar la integridad estructural de la base de datos o reinicie el servidor para asegurarse de que las estructuras de datos en memoria no estén dañadas.
Según lo recomendado, ejecuté DBCC y no se encontraron errores. También he reiniciado SQL. Luego reinicié el proceso ETL y obtuve el mismo error.
Mis búsquedas de este error muestran que se conocía un error en SQL 2008, 2012 y 2014 y se corrigió en revisiones posteriores y actualizaciones acumulativas. así que estoy un poco sorprendido de ver que reaparece en 2016.
Los enlaces que he encontrado dicen que afecta a SSIS cuando intento hacer inserciones si la base de datos está en el modelo de recuperación Simple o Bulk Logged. (Estoy corriendo en el modelo de recuperación simple)
Una solución alternativa sugerida es cambiar el modelo de recuperación de Db a COMPLETO. He intentado esto y funciona, pero no es una gran solución para un Data Warehouse.
¿Alguien más ha encontrado esto con 2016?
¿Alguien puede sugerir soluciones alternativas?
Actualizaciones:
26/7/2016: Apliqué la actualización crítica KB3164398 (v13.0.1708.0) y el problema aún existe.
27/7/2016: He aplicado la actualización acumulativa CU1 KB3164674 (v13.0.2149.0).
8/03/2016: se produjo un error durante la noche en nuestro cubo más pequeño. CU1 no solucionó el problema. Hoy informé el error en MS Connect y también he registrado una llamada de soporte con Microsoft.
8/12/2016: MS-Support respondió inicialmente, pero las respuestas fueron "No tenemos una solución para eso". El tipo de Soporte iba a discutirlo con sus colegas y me respondería. 8 días después no he sabido nada de él.
Aunque no tengo una 'solución', encontramos una solución que nos convenía. Ver mi respuesta publicada.
29/9/2016. Apliqué CU2 la semana pasada. El jueves accidentalmente ejecutamos una versión anterior de la fusión que falló nuevamente con el mismo error. Entonces ... CU2 tampoco lo ha solucionado.
23/1/2017 : Apliqué 2016 SP1 CU1 y creo que esto ha resuelto el problema. Específicamente KB3205964
fuente
Creo que esto se resolvió en 2016 SP1 CU1.
Específicamente por KB3205964
fuente
Esto se soluciona aplicando la actualización acumulativa 1 (CU1) para MSSQL2016; consulte el enlace https://support.microsoft.com/en-us/kb/3164674
fuente
Creo que hemos encontrado otra solución. Estoy publicando mi respuesta, ya que creo que puede ser útil, y es lo suficientemente diferente de la sugerencia de wBob.
Hemos cambiado la parte de inserción de la declaración de fusión para que se inserte en una tabla temporal en lugar del objetivo original.
Una vez que se ejecuta la declaración de fusión, luego insertamos desde la tabla # en el objetivo.
No es ideal, pero al menos la fusión aún maneja la complejidad de la 'inserción' al marcar las filas que han sido retiradas / caducadas.
Descubrimos que esta es una compensación aceptable en comparación con la reescritura completa de la fusión como insertos y actualizaciones por separado.
fuente