2016-12-12 10 views
0

저는이 문제에 어려움을 겪고 고민했습니다. 나는이 주제와 관련하여 많은 비슷한 질문을 읽었지 만, 나는 이것에 대해 새롭고 "Greek to me"를 읽고있다. 어쩌면 누군가가 기꺼이 저를 초등 레벨에서 도와 줄 것입니다. 여러 단계로 SSIS 패키지를 만들었습니다. 첫 번째 단계는 VB8 스크립트를 사용하여 SFTP 서버에서 데이터를 가져 오는 스크립트 작업입니다. 스크립트는 다음과 같이 읽습니다.SSIS 스크립트 작업이 SQL 작업 단계에서 실행되지 않습니다.

Imports System 
Imports System.Data 
Imports System.Math 
Imports Microsoft.SqlServer.Dts.Runtime 

<System.AddIn.AddIn("ScriptMain", Version:="1.0", Publisher:="", Description:="")> _ 
<System.CLSCompliantAttribute(False)> _ 
Partial Public Class ScriptMain 
    Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase 

    Enum ScriptResults 
     Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success 
     Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure 
    End Enum 

    Public Sub HealthSmart() 

     Dim Path As String, Path2 As String ', fileName As String, fo As Object, x As Object, y As Object, z As Object, rs As Object 

     Path = "\\RENYSQL1\share\Health_Smart\Received_Files\Test" 
     Path2 = "\\RENYMstr1\shared\CLIENT FOLDERS\HEALTHSMART\Original_PDF_Files\Test" 

     Shell("""C:\Program Files (x86)\Ipswitch\WS_FTP 12\wsftppro.exe"" -s ""Health_Smart:/Test/AMC_Test/*.pdf"" -d ""local:" & Path & "\"" -quiet", vbMaximizedFocus) 
     Shell("""C:\Program Files (x86)\Ipswitch\WS_FTP 12\wsftppro.exe"" -s ""Health_Smart:/Test/AMC_Test/*.pdf"" -d ""local:" & Path2 & "\"" -quiet", vbMaximizedFocus) 

     Dts.TaskResult = ScriptResults.Success 
    End Sub 

End Class 

SSIS 패키지에서 단계가 실행될 때 완벽하게 실행됩니다. 또한 SSIS 패키지를 MSDB로 가져오고 패키지 실행을 선택하면 오류없이 실행됩니다. 그러나 내가 그것을 일의 한 걸음으로 내걸었을 때 마치 그것이 완벽하게 달리는 것처럼 행동합니다. 그러나 첫 번째 단계에서는 데이터를 가져 오지 않았습니다.

모든 권한을 가진 사용자에게 SSIS 패키지의 사용 권한을 설정하려고했습니다. 또한 패키지 보호 수준을 암호없이 DontSaveSensitive로 설정하려고했습니다.

SQL 작업 측면에서 이전에 패키지를 실행하기 위해 언급 한 로그인뿐만 아니라 작업에서 Windows 인증을 사용해 보았습니다. 어느 쪽도 효과가 없었다. 또한 32 비트로 실행되도록 변경했지만 아무런 도움이되지 않습니다.

SQL 작업이 SQL 에이전트에 의해 실행되는 것을 알고 있습니다. 상담원에게 특정 로그인이 있습니까? 내 부서 사람들은 안된다고.

이상한 점은 내가 작업을 실행하도록 예약하면 실행되고 성공적이라고 말합니다. 그러나 위의 스크립트로 SFTP 파일을 가져 오는 첫 번째 단계는 실행되지만 데이터는 가져 오지 않습니다. Job Activity Monitor는 성공했다고 말합니다.

다음에해야 할 일이 없습니다. 나 한테 쉬워. 나는 이것에 관해 새로운 사람이다.

+0

어떤 오류 메시지가 표시됩니까? 일이 끝났습니까? 이벤트 로거를 보셨습니까? – rvphx

+0

오류가 발생하지 않습니다. 패키지가 실행되고 성공적이라고합니다. 모든 것이 괜찮은 것처럼 일이 끝납니다. 작업 활동 모니터는 작업 이력과 마찬가지로 성공했다고 말합니다. 이벤트 로거를 보는 방법을 모르겠습니다. –

답변

0

받지 못하고 오류가 발생하는 경우 권한 문제가 발생할 수 있지만 코드가 실행되지 않는 것이 좋습니다. 스크립트에서 코드를 어디에 두 었는지보고 난 후에 SUB에 전화를 걸지 않았을 가능성이 완전히 있다고 생각합니다. Main() Sub에 있습니다. 마이크로 소프트는 당신이 당신의 스크립트를 추가 할 이끌고있는 곳입니다 여기에 코드를 추가 말한다 곳

Public Sub Main() 
    ' 
    ' Add your code here 
    ' 
    Dts.TaskResult = ScriptResults.Success 
End Sub 

그리고 기본적으로 : 새로운 스크립트를 만들 때 당신은 같은 것을 볼 수있다. 당신이 가지고있는 자신의 하위에 그것을 할 완전히 괜찮지 만, 당신이 경우에 당신은 너무처럼 Main() SUB 내에서 하위를 호출해야합니다

Public Sub Main() 
    ' 
    ' Add your code here 
    ' 
    HealthSmart() 

    Dts.TaskResult = ScriptResults.Success 
End Sub 

실제로 Main SUB 및 호출 코드이있는 경우. wsftppro.exe 내에 오류가있을 수 있습니다. 스크립트 외부에서 코드를 실행 했습니까?

권한이 exe 내에서 문제를 일으키고 오류가 발생하지 않은 경우 위치에 대한 액세스 권한이있는 사용자로 dev 환경을 통해 실행 해 볼 수 있으며 성공하면 SQL 에이전트 및/또는 서비스 계정.

+0

스크립트가 패키지에서 올바르게 실행됩니다. 패키지를 클릭하고 RUN을 선택하여 SSIS 패키지를 SMSS로 가져올 때도 실행됩니다. –

+0

(SSIS 패키지 내에서) VB8 스크립트가 실행되고 파일을 올바르게 전송합니다.또한 패키지를 클릭하고 RUN을 선택하여 SSIS 패키지를 SMSS로 가져올 때 파일을 실행하고 파일을 전송합니다. 그러나 SQL 작업에서 가져온 SSIS 패키지를 예약 할 때 VB8 (SSIS 패키지의 스크립트 작업 내)은 "실행되지만"파일은 이동하지 않습니다. –

+1

@AnneMarieColeman 내 답변의 마지막 부분에서 제시하는 것처럼 사용 권한처럼 들립니다. 에이전트 작업을 예약하면 SQL 에이전트 및 SQL 데이터베이스 엔진 서비스 계정의 보안 컨텍스트가 사용됩니다. 나는 그들이 당신이 wsftppro.exe를 통해 호출하는 것에 대한 액세스 권한이없고 EXE가 실제로 침묵한다는 오류를 던지기보다는 추측하고 있습니다. 스크립트에서 system.io를 사용할 때 파일 IO 권한이 없으면 액세스 거부 오류가 발생합니다. 이러한 서비스 계정이 도메인 계정이 아닌 로컬 계정 인 경우 다른 문제가 발생할 수 있습니다. 프록시 계정을 사용해 볼 수 있습니다. – Matt