簡體   English   中英

SSIS DTSX package 在 SQL 服務器代理作業中丟失數據

[英]SSIS DTSX package losing data in a SQL Server Agent job

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

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

現在,當我從 VS2005 在本地運行它並通過網絡訪問相關文件時,這一切都可以正常工作。 但是當我部署到應用程序服務器時,我沒有從另一端得到任何東西; 它只是掛在那里。 變量似乎在此過程中丟失了。

有什么想法嗎? 有沒有人從 SSIS package 看到類似的行為?

我的建議是在每個 SSIS 任務的執行后事件上啟用日志記錄(如果您還沒有),以確定 package 何時失敗。

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

當您在Business Intelligence Development Studio (BIDS)中運行 SSIS package 時,它會在您的憑據下執行,並且您可能對文件提取到的文件夾擁有完全權限。 When you schedule the package to run in SQL Server Agent, the package will run under SQL Agent Service Account , the account may not have access to the folder.

  • 如果您有權登錄托管數據庫的服務器,則登錄服務器並雙擊 package。 當您雙擊 package 時,它將帶來 dtexec 實用程序。 在實用程序中運行 package,如果它在服務器內成功運行,則問題更可能與權限有關。

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

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

  • 在 package 上啟用Logging選項將有助於捕獲錯誤消息。 這是一個解釋如何啟用日志記錄的鏈接

  • 我假設問題中提供的表達式不是完整的表達式,因為那是行不通的。 它必須以這樣的雙引號開頭才能正確評估。 表達式: "-e " + @[User::InputFolder] + "\\" + @[User::CurrentInputFileName] + " " + @[User::TempFolder]

Following steps describe how to set up an SQL job to run SSIS package.If you have access to SQL Server Agent through SQL Server Management Studio, here are the steps to create a job using the Graphical User Interface. 這些步驟顯示了如何使用 SQL 代理服務帳戶創建 SQL 作業以運行 SSIS,以及如何創建代理以在不同的憑據下運行。 如果問題是由於權限引起的,在不同的帳戶下運行可能會幫助您解決問題。

  1. Go 到 SQL 服務器管理工作室。 展開SQL Server Agent並右鍵單擊作業,然后單擊 select New Job... ,如屏幕截圖 # 1所示。

  2. 提供名稱,默認情況下所有者將是創建作業的帳戶,但您可以根據您的要求進行更改。 如果您願意,請指定一個類別並提供描述。 參考截圖# 2

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

  4. 在“新建作業步驟”對話框中,提供步驟名稱。 Select SQL Server Inegration Services Package從類型。 此步驟將默認在SQL Agent Service Account下運行。 Select 將 package 源作為File system並通過單擊省略號瀏覽到 package 路徑。 這將填充 Package 路徑。 參考截圖# 4 如果您不想在SQL Agent Service Account下執行該步驟,請參閱步驟 # 8 - 9以了解如何使用其他帳戶。

  5. 如果您有 package 的 SSIS 配置文件 (.dtsConfig),請單擊配置選項卡並添加配置文件,如屏幕截圖 # 5所示。

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

  7. 創建作業后,您可以右鍵單擊作業和 select Script Job as --> CREATE To --> New Query Editor Window以生成腳本,如屏幕截圖 # 7所示。

  8. 要在不同的帳戶下運行 SSIS 步驟,請在 Management Studio 上導航至Security --> right-click on Cedentials --> select New Credential...如屏幕截圖 # 8所示。

  9. New Credential對話框中,提供一個 Credential 名稱、Windows 帳戶和 Password,您希望在 SQL 作業中執行 SSIS 步驟。 參考截圖# 9 將創建憑證,如屏幕截圖 # 10所示。

  10. 接下來,我們需要創建一個代理。 On the Management Studio, navigate to SQL Server Agent --> Proxies --> right-click on SSIS Package Execution --> select New Proxy... as shown in screenshot # 11 .

  11. On the New Proxy Account window, provide a Proxy name, select the newly created Credential, provide a description and select SQL Server Integration Services Package as shown in screenshot # 12 . 應該創建代理帳戶,如屏幕截圖 # 13所示。

  12. 現在,如果您 go 回到 SQL 作業中的步驟,您應該會在Run as下拉菜單中看到新創建的代理帳戶。 參考截圖# 14

希望有幫助。

截圖#1:

1

截圖#2:

2

截圖#3:

3

截圖#4:

4

截圖#5:

5

截圖#6:

6

截圖#7:

7

截圖#8:

8

截圖#9:

9

截圖#10:

10

截圖 #11:

11

截圖#12:

12

截圖#13:

13

截圖#14:

14

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM