0

私はこの問題に苦労し、苦労しました。このトピックに関する多くの同様の質問を読みましたが、私はこれが初めてで、「Greek to me」を読んでいます。おそらく、誰かがこれで初歩的なレベルで私を助けてくれるでしょう. いくつかの手順で SSIS パッケージを作成しました。最初のステップは、VB8 スクリプトを使用して SFTP サーバーからデータを取得するスクリプト タスクです。スクリプトは次のようになります。

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 ファイルを取得する最初のステップは実行されますが、データはプルされません。ジョブ アクティビティ モニターには、成功したと表示されます。

次に何をすべきかわかりません。私に優しくしてください。私はこれが初めてです。

4

1 に答える 1

0

受信していない場合やエラーが発生した場合は、アクセス許可の問題が発生する可能性がありますが、コードが実行されていないことが示唆されます。スクリプトのどこにコードを配置したかを見るとSUBMain () Sub. 新しいスクリプトを作成すると、次のように表示されます。

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

基本的に、ここにコードを追加すると書かれている場所は、Microsoft がスクリプトを追加するように指示した場所です。あなたが持っているように、独自のサブでそれを行うことは完全に問題ありませんが、そうする場合は、次のMain() SUBようにサブを呼び出す必要があります。

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

    Dts.TaskResult = ScriptResults.Success
End Sub

実際にMain SUBコードを呼び出している場合。wsftppro.exe内にエラーがある可能性があります。スクリプトの外でコードを実行しましたか?

アクセス許可がエラーではなく exe 内で問題を引き起こしている場合は、場所へのアクセス権を持つユーザーとして開発環境を介して実行してみることができます。成功した場合は、SQL エージェントおよび/またはサービス アカウントのアクセス許可が必要になる可能性があります。

于 2016-12-13T00:15:31.743 に答える