2011-07-19 173 views
0

我有一個SSIS作業,它從輸入的FTP目錄中獲取文件並將內容解壓縮到臨時目錄中以供進一步處理。我在輸入FTP目錄上使用For-Each目錄循環,並在其中調用Winzip。命令行調用的參數使用「SSIS表達式」構建器使用輸入文件的文件名和臨時目錄的名稱進行配置。它看起來像這樣在表達式生成器:SSIS DTSX包在SQL Server代理作業中丟失數據

-e " + @[User::InputFolder] + "\\" + @[User::CurrentInputFileName] + " " + @[User::TempFolder] 

現在,當我從VS2005在本地運行,並通過網絡訪問相關文件,這一切工作正常,很正常。但是當我部署到應用程序服務器時,我什麼也沒有得到另一方面;它只是掛在那裏。這些變量似乎正在失去。

任何想法的人?有沒有人從SSIS包中看到類似的行爲?

+0

哇...感謝Siva的詳細解答。 原來你是對的,在某種程度上。在服務器上運行使用了一組不同的權限,並且服務器上的文件夾的安全設置不受重擊。 –

回答

1

當您運行Business Intelligence Development Studio (BIDS)中的SSIS包時,它將在您的憑據下執行,並且您可能擁有將文件提取到的文件夾的完全權限。當您安排程序包在SQL Server代理程序中運行時,程序包將在SQL Agent Service Account下運行,該帳戶可能無權訪問該文件夾。

  • 如果您有權限登錄到託管數據庫的服務器,請登錄到服務器並雙擊包。當你雙擊包時,它會帶上dtexec工具。如果它在服務器內成功運行,則在該實用程序中運行軟件包,然後問題更可能與權限相關。

  • 另一件要檢查的是變量@[User::InputFolder]是否有可能在路徑中包含空格。在這種情況下,傳遞給Winzip命令行參數時,該參數應該包含在雙引號內。

  • 有沒有可能無法從託管SQL作業的服務器訪問FTP服務器?由於防火牆阻止,我遇到了這樣的問題。

  • 在包上啓用Logging選項將有助於捕獲錯誤消息。這是一個link,它解釋瞭如何啓用日誌記錄。

  • 我認爲問題中提供的表達式不是完整的表達式,因爲這不起作用。它必須以雙引號開頭,才能正確評估。 表達:"-e " + @[User::InputFolder] + "\\" + @[User::CurrentInputFileName] + " " + @[User::TempFolder]

以下步驟描述瞭如何建立一個SQL作業運行SSIS package.If你必須通過SQL Server Management Studio中獲得SQL Server Agent,這裏的步驟來創建一個作業使用圖形用戶界面。這些步驟顯示如何創建SQL作業以使用SQL Agent Service帳戶運行SSIS,以及如何使用不同的憑據創建代理以在不同的憑據下運行。如果問題是由權限引起的,則以不同帳戶運行可能會幫助您解決問題。

  1. 轉到SQL Server Management Studio。展開SQL Server Agent並右鍵單擊作業,然後選擇New Job...,如屏幕截圖#中所示。

  2. 提供一個名稱,默認情況下,所有者將是創建該作業的帳戶,但您可以根據自己的要求進行更改。如果您想要並指定類別並提供說明,請指定類別。請參閱屏幕截圖#。

  3. 在步驟部分,單擊New...,如屏幕截圖#所示。

  4. 在「新建作業步驟」對話框中,提供一個步驟名稱。從類型中選擇SQL Server Inegration Services Package。此步驟默認情況下將在SQL Agent Service Account下運行。選擇包源代碼爲File system,並通過單擊省略號瀏覽到包路徑。這將填充Package路徑。請參閱屏幕截圖#。如果您不想在SQL Agent Service Account下執行此步驟,請參閱步驟# - 瞭解如何使用其他帳戶。

  5. 如果您對包SSIS配置文件(.dtsConfig),單擊配置選項卡上,並添加配置文件,如在屏幕截圖。

  6. 單擊確定,並在步驟1中有包,如屏幕截圖#中所示。同樣,您可以創建不同的步驟。

  7. 一旦作業已經創建,您可以在工作中單擊鼠標右鍵,選擇Script Job as --> CREATE To --> New Query Editor Window來生成腳本,如圖截圖#。

  8. 要運行不同的帳戶下SSIS步驟,在管理工作室,如圖截圖#導航到Security --> right-click on Cedentials --> select New Credential...

  9. New Credential對話框,提供認證的名稱,Windows帳戶和密碼下,你想在SQL作業執行SSIS步驟。請參閱屏幕截圖#。 Credential將按照屏幕截圖#所示創建。

  10. 接下來,我們需要創建一個代理。在Management Studio上,導航至SQL Server Agent --> Proxies --> right-click on SSIS Package Execution --> select New Proxy...,如屏幕截圖#所示。

  11. 在新建代理帳戶窗口,提供一個代理服務器名稱,選擇新創建的憑證,提供說明,並選擇SQL Server Integration Services包,如圖截圖#。應該創建代理帳戶,如屏幕截圖#中所示。現在

  12. ,如果你回到在SQL作業步驟,你應該看到新創建的代理帳戶在運行方式下拉。請參閱屏幕截圖#。

希望有所幫助。

截圖#1:

1

截圖#2:

2

截圖#3:

3

截圖#4:

4

截圖#5:

5

截圖#6:

6

截圖#7:

7

截圖#8:

8

截圖#9:

9

截圖#10:

10

截圖#11:

11

截圖#1 2:

12

截圖#13:

13

截圖#14:

14

1

我的建議是啓用每個SSIS任務的執行後事件的日誌記錄(如果您還沒有),以確定軟件包在哪一點失敗。

例如,可能是運行SQL Server代理作業的用戶在FTP目錄中沒有權限。

相關問題