Hemos implementado varios cambios en los paquetes SSIS con éxito, pero este cambio en particular nos da un error de

Los metadatos del componente no están sincronizados con el script compilado. Vuelva a compilar la secuencia de comandos con el Editor de componentes de secuencia de comandos.

Funciona bien en el depurador en mi host de salto. ¿Qué hago para "recompilar el script"? ¿O hay un problema más profundo?

ACTUALIZACIÓN 1: Este componente de script en particular es más como un destino y asíncrono. Acepta filas de entrada, y todas (o la mayoría) de ellas se consumen dentro del script (actualiza datos externos a través de un servicio web), y solo los casos de error continúan hasta la salida.

Reduje el problema al cambio mínimo absoluto que produce este error: agregar otra columna de entrada (o eliminar una columna de entrada no utilizada). Para ser precisos, después de abrir el paquete en Visual Studio 2012 en mi host de salto, haga doble clic en la tarea Realizar ETL para abrir el flujo de datos, luego haga doble clic en el Componente de script del servicio web G9 .

Screenshot of Script Component properties

Me cambio a Columnas de entrada , hay 16 marcadas / enumeradas, y desmarco una que en realidad no se usa en el script. O marco (agrego) otra columna (que quiero usar en el script).

Luego vuelvo a Script , hago clic en Editar script y espero a que aparezca la ventana VstaProjects.

O cierro esta ventana de VstaProjects de inmediato, o hago un cambio extremadamente pequeño en el script (solo comentario), luego Build> Build ScriptComponent_5aa ... acb, luego presiono el símbolo del disquete (Guardar) y salgo de Vsta.

Luego ejecuto el depurador (presiono la flecha verde de inicio) y funciona como se esperaba. Construyo haciendo clic derecho en el proyecto (G9) y seleccionando Build (esto puede ser redundante después de ejecutarlo en el depurador).

En el Explorador de (archivos) de Windows, navego hasta la carpeta G9/bin/Development, hago doble clic en G9.ispac (pasos a través de la implementación: archivo de desarrollo del proyecto; my-dev-svr; SSISDB> ACME-SSIS (que da { {X2}}); ¡Implementar!

Problema: cuando inicio sesión en my-dev-svr, profundizo en los catálogos de Integration Services y ejecuto el paquete, luego profundizo en el informe general (para esta ejecución)> Ver mensajes, veo varios errores. Los mas importantes son

  1. Realizar ETL: Error: "Componente de script de servicio web G9" falló la validación y devolvió el estado de validación "VS_ISBROKEN".
  2. Realice ETL: Error: El componente metedata no está sincronizado con el script compilado. Vuelva a compilar la secuencia de comandos con el Editor de componentes de secuencia de comandos.

Línea de comando

No estoy completamente convencido de que esto esté relacionado, pero aquí está: copié G9.ispac en my-dev-svr, luego inicié sesión allí y en la línea de comandos, ejecuté dtexec. Tenga en cuenta que este es el mismo servidor donde depuración SSIS no funciona.

D:\ACME\Deploy\SSIS>dtexec /Project G9.ispac /Package ACMEPortal_ProjectProperties_G9.dtsx
Microsoft (R) SQL Server Execute Package Utility
Version 11.0.6020.0 for 64-bit
Copyright (C) Microsoft Corporation. All rights reserved.
Started:  10:51:21 PM
Warning: 2017-04-17 22:51:21.74
   Code: 0xC0016016
   Source:  SSIS:Property
   Description: Failed to decrypt an encrypted XML node. Verify that the project was created by the same user. Project load will attempt to continue without the encrypted information.
End Warning
Warning: 2017-04-17 22:51:21.74
   Code: 0x800190FF
   Source:
   Description: Failed to decrypt sensitive data in project with a user key. You may not be the user who encrypted this project, or you are not using the same machine that was used to save the project. If the sensitive data is a parameter value, the value may be required to run the package on the Integration Services server.
End Warning
Progress: 2017-04-17 22:51:25.61
   Source: Get ETL Configuration
   Executing query "etl_GetGenericETLConfigForACME".: 100% complete
End Progress
Progress: 2017-04-17 22:51:25.64
   Source: Get G9 Web Service Connection Config Details
   Executing query "etl_GetG9WSConfigSettings".: 100% complete
End Progress
Progress: 2017-04-17 22:51:25.65
   Source: Audit ETL Initiation
   Executing query "dbo.etl_AuditInitiation".: 100% complete
End Progress
Warning: 2017-04-17 22:51:25.68
   Code: 0x80019002
   Source: OnError
   Description: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED.  The Execution method succeeded, but the number of errors raised (6) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
End Warning
Error: 2017-04-17 22:51:25.68
   Code: 0xC0010026
   Source: Set Propogate Error to False
   Description: The task has failed to load. The contact information for this task is "".
End Error
Error: 2017-04-17 22:51:25.71
   Code: 0xC0024107
   Source: Set Propogate Error to False
   Description: There were errors during task validation.
End Error
Error: 2017-04-17 22:51:25.71
   Code: 0xC0010026
   Source: Set FilenamePart and Error Variables
   Description: The task has failed to load. The contact information for this task is "".
End Error
Warning: 2017-04-17 22:51:25.72
   Code: 0x80019002
   Source: OnError
   Description: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED.  The Execution method succeeded, but the number of errors raised (10) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
End Warning
Error: 2017-04-17 22:51:25.72
   Code: 0xC0010026
   Source: Set Propogate Error to False
   Description: The task has failed to load. The contact information for this task is "".
End Error
Error: 2017-04-17 22:51:25.73
   Code: 0xC0024107
   Source: Set Propogate Error to False
   Description: There were errors during task validation.
End Error
Error: 2017-04-17 22:51:25.73
   Code: 0xC0024107
   Source: Set FilenamePart and Error Variables
   Description: There were errors during task validation.
End Error
Warning: 2017-04-17 22:51:25.74
   Code: 0x80019002
   Source: ACMEPortal_ProjectProperties_G9
   Description: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED.  The Execution method succeeded, but the number of errors raised (8) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
End Warning
DTExec: The package execution returned DTSER_FAILURE (1).
Started:  10:51:21 PM
Finished: 10:51:25 PM
Elapsed:  4.344 seconds

ACTUALIZACIÓN 2: un extracto del componente de secuencia de comandos.

' Microsoft SQL Server Integration Services user script component
' This is your new script component in Microsoft Visual Basic .NET
' ScriptMain is the entrypoint class for script components

Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Imports ScriptComponentTaskUtility.ACME_ETLDataFlowScriptComponentTasks '-- custom toolkit
Imports ScriptComponentTaskUtility
Imports Microsoft.SqlServer.Dts
Imports System.Windows.Forms

<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
<CLSCompliant(False)> _
Public Class ScriptMain
    Inherits UserComponent

    Private _updateLimit As Integer

    Private _rowCount As Integer

    Public Overrides Sub PreExecute()
        MyBase.PreExecute()
        '  
        ' Our application code follows 
        _updateLimit = 2   '-- Intending to replace this hard-coding
        _rowCount = 0
    End Sub

    Public Overrides Sub G9ProjectInput_ProcessInputRow(ByVal Row As G9ProjectInputBuffer)

        Try
            ' We limit the updated records to X per run (X = 2, but want to make configurable).
            ' Next ETL run will pick up next X
            _rowCount += 1
            If (_updateLimit > 0 And _rowCount > _updateLimit) Then Exit Sub

            Dim taskComponent As G9Project = New G9Project(Me.UserID, Me.Password, Me.Config, Me.WSURL)
            Dim readResponse As Project_DoReadResponse
            ''MessageBox.Show(Me.WSURL)
            readResponse = taskComponent.ReadProject(Row.g9ProjectNumber, Row.Planet)


            If (readResponse.Errors.Items.Length > 0) Then
                CreateErrorRows(Row, readResponse.Errors.Items(0).ShortDescription)
                Exit Sub
            End If
            Dim g9Project As Project = readResponse.Project

            '**********************************
            'Change the property values here
            Try


                ' Who's in charge? The Manager or Owner?
                If Not (Row.acmeInChargeCode_IsNull) Then
                    g9Project.SelectionCodes(10).Value = Row.acmeInChargeCode.ToString
                End If

                ' ... other fields

            Catch ex As Exception
                Row.ErrorColumnName = "Web Service Error"
                CreateErrorRows(Row, ex.Message)
                Exit Sub
            End Try

            'End of change of property values
            '**********************************

            Dim updateResponse As ResponseBase
            updateResponse = taskComponent.UpdateProject(g9Project)
            If (updateResponse.Errors.Items.Length > 0) Then
                CreateErrorRows(Row, updateResponse.Errors.Items(0).ShortDescription)
                Exit Sub
            End If
        Catch ex As Exception
            CreateErrorRows(Row, ex.Message)
            Exit Sub
        End Try
    End Sub

' #Region ************************ NOTE: Copy & paste following code block *********************
' contains private member variables, etc, including CreateErrorRows()

End Class
1
Kiwi Nick 17 abr. 2017 a las 17:12

2 respuestas

La mejor respuesta

Como ya ha resuelto el guión y se asegura de que el guión funcione bien. Entonces tiene muchas posibilidades de tener problemas en su destination. Parece que está utilizando Script component como fuente de datos, intente verificar Metadata de la salida de la fuente (haga clic con el botón derecho en la restricción de precedencia), verifique si coinciden con la entrada de destino , lo que es más importante, si ha realizado algún cambio en las columnas de origen, será mejor que elimine y cree un nuevo destino, a veces puede almacenar en caché las columnas que ya no existen.

1
LONG 17 abr. 2017 a las 15:02

Era necesario registrar todos los detalles / configuración / código del Componente Script, luego eliminarlo y recrearlo nuevamente. Luego, vuelva a unir los flujos (para la entrada y la salida).

En este caso, el script es un script Transformation , pero en términos morales, es un destino; solo los casos de error llegan a la salida.

Hubo un segundo componente de secuencia de comandos que también tuvo que cambiar como parte de la misma corrección de errores. Agregar columnas adicionales para la entrada también provocó el error, por lo que también fue necesario hacer lo mismo eliminar y recrear en esto. También era un script Transformation , pero esto es totalmente sincrónico (cada fila de entrada llega a la salida, con algunas columnas de entrada de lectura-escritura cambiadas, y algunas otras columnas de entrada de solo lectura copiadas / filtradas a adicionales columnas de salida).

Es importante tener en cuenta (antes de eliminar y volver a crear), que siempre podía ejecutarlo en el depurador de Visual Studio 2012 en mi host de salto, pero el error "desincronizado" ocurrió después de haber implementado el {{X0} } archivo a my-dev-svr (y ​​se ejecuta a través de SSMS> Catálogo de servicios de integración> ... paquete, o por Agente SQL Server> Monitor de actividad de trabajo> trabajo).

Una observación adicional, que después de eliminar y recrear, ahora puedo agregar y eliminar libremente columnas de entrada al script, la actividad que causó el error anterior. Después de hacer los cambios en la columna de entrada, es suficiente presionar Editar secuencia de comandos ... , esperar a que aparezca la ventana VstaProjects, cerrarla inmediatamente, presionar OK en el Editor de transformación de secuencia de comandos diálogo y verifique que no aparezca una X roja.

Supongo que es el equivalente SSIS de "¿Lo apagó y lo volvió a encender?"

3
Kiwi Nick 20 abr. 2017 a las 01:54