none
SQL Agent Job執行Asp網頁,成功執行後,但JOB無法停止 RRS feed

  • 問題

  • 各位好
    目前設計一個ssis,來執行一個asp網頁(用jmail來寄發逾期通知mail)
    裡頭只有一個容器:"執行處理工作"容器

    屬性如下:
    Executable: C:\Program Files\Internet Explorer\IEXPLORE.EXE
    Arguments: http://xxxxx:89/dailymail/dailymail.asp

    後續發佈封裝,用JOB執行,也成功有寄發MAIL到各個USER
    但MAIL都寄發完後,這個JOB始終於停不下來,一直綠色圓圈轉個不停

    我有在該ASP最後,把自己這個Form關掉

     response.write "<script language=""javascript"">"
     response.write "window.opener=parent;"
     response.write "window.close();"
     response.write "</script>"

    但JOB還是停不下來,不知各位有沒有什麼好方法能解決,謝謝各位
    SQL SERVER版本為:
    Microsoft SQL Server 2005 - 9.00.3054.00 (X64)   Mar 23 2007 18:41:50   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)
    2009年4月24日 上午 09:12

解答

  • Hi,

    您的SQL Agent如果設定Successvalue=1時, 有沒有報錯?
    我這邊再度測試了一下, 我把我測試成功的步驟提供給您參考:
    1. 我先設定SSIS package(這邊因為我設定1會報一個錯)

    2. 我把package放到D槽下, D:\Package.dtsx

    3. 設定Job


     

    執行完畢就會自動停止. 您可以試看看.


    微軟技術支援中心(CSS) - http://twitter.com/msdn_taiwan
    • 已提議為解答 Lolota Lee 2009年4月30日 上午 11:17
    • 已標示為解答 Lolota Lee 2009年5月4日 上午 02:09
    2009年4月28日 上午 04:03
  • Dear  Tim,
    我昨日也是要使用SSIS來處理資料,而第一個動作就是要以瀏覽器執行一個.asp的程式,一直不知如何處理,後來在網頁上搜尋找到您的這篇文章,讓我知道要使用『執行處理工作』的物件來作。
    當然從您的敘述中我也瞭解了要在『執行處理工作』物件的屬性上設定
    Executable為指向系統中瀏覽器(ie)的執行檔,如您所示的 C:\Program Files\Internet Explorer\IEXPLORE.EXE
    Arguments為指向要去執行網頁asp程式的URL,如您所示的 http://xxxxx:89/dailymail/dailymail.asp

    也看到您反應該『執行處理工作』物件執行停不下來的問題,也有朋友幫忙尋找解決之道。

    我是個後知後覺者,不過我也花了1hr去嘗試,最後我找到答案解決了。
    方法是『執行處理工作』屬性都不需要更動,當然也不須去修改sap程式增加關掉瀏覽器視窗的功能。
    我發現SSIS的『執行處理工作』一直停不下來的原因,是開啟瀏覽器(IE)視窗去執行ASP程式,當瀏覽器(IE)視窗未關閉,SSIS就會以為『執行處理工作』未執行完畢,所以就一直運轉不停止,若那時您手動去把瀏覽器(IE)視窗關閉,您就會發現『執行處理工作』物件執行完畢,緊接著去執行後續的控制流程動作了。

    就因為如此,我判定若把『執行處理工作』物件的屬性中之WindowStyle設定為Hidden,即可避開開啟與關閉瀏覽器(IE)視窗問題,而asp程式照常進行,並返回SSIS去執行後續的控制流程動作

    當然,我確實如此設定後,在SSIS設計階段的執行一切正常,而封裝完成後部署到Server的SQL Agent 的封裝執行,則仍處於一直在執行而停不下來的情況。
    所以,在SERVER那部份,我仍然要再花時間去測試看看。

    上述的封裝包含執行ASP程式及其他檔案處理,試過幾次後發現的確在SSIS設計階段是OK的,但部署到Server後執行封裝就停不下來。

    今天下午,接著我就嘗試將執行ASP程式的物件獨立在一個封裝內,而其餘的部份放在另一個封裝內。也就是程式分為兩個封裝。
    首先在SSIS設計階段分別執行那兩個封裝,結果仍然是OK正常的。
    再接著將兩個封裝都部署到SERVER上,然後用SQL Agent安排此兩個封裝步驟,一著執行完成後再執行另一個。
    當這個作業設定好了之後,緊接著啟動作業,最後如預期正常執行,一切ok,沒有跑不停的現象發生。

    很高興,下午的嘗試把完成後部署的封裝執行問題也解決了。

    希望這個回饋能幫上您的忙。

    • 已提議為解答 steve510373 2009年9月9日 上午 01:58
    • 已標示為解答 Lolota Lee 2009年9月9日 上午 02:01
    2009年9月9日 上午 01:58
  • Dear  Tim Hsu,

    今天下午把server端的IE換成6.0版之後(6.0及7.0版皆可,就是不能是8.0版,因為8.0版會出現有視窗關閉警示窗),ASP仍然停不下來。
    後來我又把SSIS封裝裡的『連接管理員』檢視了一遍。發現我在其中建了一個『Http連接管理員』,會不會是它在搞鬼,所以我就嘗試把它刪除,再RUN封裝就正常了。

    不過我也測過在ASP程式後端,於執行完畢後,加了把IE視窗關閉的程式碼。果然它執行完畢後,就會把IE視窗關閉。不過也測過不加該程式碼,只要如之前我表達將『執行處理工作』物件的屬性中之WindowStyle設定為Hidden,一樣可以正常運作。

    所以總結今天測試結果如下:

    1. server 端的IE不可以是IE 8.0,而6.0及7.0則皆可。
    2. 若ASP程式碼未加關閉視窗程式段,則『執行處理工作』物件的屬性中之WindowStyle設定為Hidden,反之則設為normal即可。
    3. 其餘的設定維持預設值
         FailTaskIfReturnCodeIsNotSuccessValue:True
         SuccessValue:0
         Timeout:0
         TerminateProcessAfterTimeOut:True
    4. SSIS封裝裡的『連接管理員』裡不要加入及設定『Http連接管理員』。

    以上測試謹提供大家參考。

    • 已提議為解答 steve510373 2009年10月8日 上午 09:11
    • 已標示為解答 Lolota Lee 2009年10月9日 上午 01:42
    2009年10月8日 上午 09:10

所有回覆

  • 您可以check下列幾點:
    1.
    設定當package執行成功時拋出的Value.


    2.
    設定執行成功後跳出。

    微軟技術支援中心(CSS) - http://twitter.com/msdn_taiwan
    2009年4月27日 上午 02:51

  • 您好,明白您的意思
    但不知該如何設定及檢查,是設定Package屬性,還是寫code在asp裡檢查??

    事實上,我剛才修改呼叫的asp程式
    裡頭只留下一行:response.write "test"

    Job同樣是會hand住,停不下來
    如果我不把這個視窗關掉,會看到test是可以成功印出,但Job還是停不下來

    不好意思還請指點一下,非常感謝
    2009年4月27日 上午 06:24
  • 第一個圖片是在Package屬性中設定.
    第二個圖片則是在Job Agent中設定.


    微軟技術支援中心(CSS) - http://twitter.com/msdn_taiwan
    2009年4月27日 上午 06:38


  • 抱歉,因為我剛看不到圖檔(不知是IE設定還是我這裡有擋),所以才又問了一次
    其實我的job原本就有設Quit the job reporting success
    而後續我調整了package屬性設定,把SuccessValue改為1

    剛測試一下,還是沒停止
    我該如何check執行後的SuccessValue為何
    可以寫code在asp裡檢查嗎???
    謝謝
    2009年4月27日 上午 08:45
  • Hi,

    您的SQL Agent如果設定Successvalue=1時, 有沒有報錯?
    我這邊再度測試了一下, 我把我測試成功的步驟提供給您參考:
    1. 我先設定SSIS package(這邊因為我設定1會報一個錯)

    2. 我把package放到D槽下, D:\Package.dtsx

    3. 設定Job


     

    執行完畢就會自動停止. 您可以試看看.


    微軟技術支援中心(CSS) - http://twitter.com/msdn_taiwan
    • 已提議為解答 Lolota Lee 2009年4月30日 上午 11:17
    • 已標示為解答 Lolota Lee 2009年5月4日 上午 02:09
    2009年4月28日 上午 04:03

  • Hi..您好

    回報一下剛才的測試結果:

    ssis package中,arguments屬性為:http://ptw-tdp-01:89/dailymail/dailymail.asp
    而我目前把dailymail.asp簡化如下:

    <%    
     response.Write("ok")
     response.write "<script language=""javascript"">"
     response.write "window.opener=parent;"
     response.write "window.close();"
     response.write "</script>"
    %>

    我把修改後的Package.dtsx,copy到 主機 ptw-tdp-01的E:\ 下
    並設定Job去執行該檔(E:\Package.dtsx)
    但不論我SuccessValue設1或0,Job都沒停下來(真的很怪)(我有重新啟動Agent服務)
    且設定輸出歷程 C:\123.txt,有產生檔案,但內容是空的

    您提到設1有沒有報錯,我測試也是沒有
    這個錯是只要設1,執行Job時就會自動產生嗎?,還是要有額外的設定或寫code才會產生??

    麻煩您了
    2009年4月28日 上午 07:00
  • 如果設定為1, 123.txt內容是:
    Microsoft (R) SQL Server Execute Package Utility
    Version 9.00.3042.00 for 64-bit
    Copyright (C) Microsoft Corp 1984-2005. All rights reserved.

    Started:  下午 04:43:45
    Error: 2009-04-28 16:43:45.89
       Code: 0xC0029151
       Source: Execute Process Task Execute Process Task
       Description: In Executing "C:\Program Files\Internet Explorer\IEXPLORE.EXE" "http://www.microsoft.com" at "", The process exit code was "0" while the expected was "1".
    End Error
    DTExec: The package execution returned DTSER_FAILURE (1).
    Started:  下午 04:43:45
    Finished: 下午 04:43:45
    Elapsed:  0.358 seconds


    如果是0: (然後執行完畢就會停止)
    Microsoft (R) SQL Server Execute Package Utility
    Version 9.00.3042.00 for 64-bit
    Copyright (C) Microsoft Corp 1984-2005. All rights reserved.

    Started:  下午 04:45:13
    DTExec: The package execution returned DTSER_SUCCESS (0).
    Started:  下午 04:45:13
    Finished: 下午 04:45:13
    Elapsed:  0.359 seconds


    Agent的啟動帳號為? 我用sa跟網域帳號都可以.


    微軟技術支援中心(CSS) - http://twitter.com/msdn_taiwan
    2009年4月28日 上午 08:48

  • 嗯..有可能是我這台Server環境有問題
    我發佈到其他兩台Server去執行,的確可以停下來
    環境問題就比較麻煩一點
    我再check看看
    謝謝您的幫忙
    2009年4月28日 下午 12:57
  • 補充一下,另一台可以停下來的server,輸出的123.txt內容如下

    Microsoft (R) SQL Server 執行封裝公用程式
    32 位元版本 9.00.3042.00
    Copyright (C) Microsoft Corp 1984-2005. All rights reserved.

    已啟動:  下午 09:10:26
    DTExec: 封裝執行傳回 DTSER_SUCCESS (0)。
    已啟動:  下午 09:10:26
    已完成: 下午 09:10:27
    經過時間:  0.578 秒

    而不行的server,123.txt是空的,而且去刪除該檔時,檔案是使用中,刪不掉
    一定要先把該Job手動停止後,123.txt才可以刪除
    看來這個job把這個檔案鎖住了....
    真的是很奇怪.><

    2009年4月28日 下午 01:14
  • 這看起來應該是因為Job還在跑, log file被咬住, 所以內容還沒有被寫進去.
    您可能要去比對一下兩台之間的不同, 不過這就真的是費時的工作.

    微軟技術支援中心(CSS) - http://twitter.com/msdn_taiwan
    2009年4月29日 上午 01:43
  • Dear  Tim,
    我昨日也是要使用SSIS來處理資料,而第一個動作就是要以瀏覽器執行一個.asp的程式,一直不知如何處理,後來在網頁上搜尋找到您的這篇文章,讓我知道要使用『執行處理工作』的物件來作。
    當然從您的敘述中我也瞭解了要在『執行處理工作』物件的屬性上設定
    Executable為指向系統中瀏覽器(ie)的執行檔,如您所示的 C:\Program Files\Internet Explorer\IEXPLORE.EXE
    Arguments為指向要去執行網頁asp程式的URL,如您所示的 http://xxxxx:89/dailymail/dailymail.asp

    也看到您反應該『執行處理工作』物件執行停不下來的問題,也有朋友幫忙尋找解決之道。

    我是個後知後覺者,不過我也花了1hr去嘗試,最後我找到答案解決了。
    方法是『執行處理工作』屬性都不需要更動,當然也不須去修改sap程式增加關掉瀏覽器視窗的功能。
    我發現SSIS的『執行處理工作』一直停不下來的原因,是開啟瀏覽器(IE)視窗去執行ASP程式,當瀏覽器(IE)視窗未關閉,SSIS就會以為『執行處理工作』未執行完畢,所以就一直運轉不停止,若那時您手動去把瀏覽器(IE)視窗關閉,您就會發現『執行處理工作』物件執行完畢,緊接著去執行後續的控制流程動作了。

    就因為如此,我判定若把『執行處理工作』物件的屬性中之WindowStyle設定為Hidden,即可避開開啟與關閉瀏覽器(IE)視窗問題,而asp程式照常進行,並返回SSIS去執行後續的控制流程動作

    當然,我確實如此設定後,在SSIS設計階段的執行一切正常,而封裝完成後部署到Server的SQL Agent 的封裝執行,則仍處於一直在執行而停不下來的情況。
    所以,在SERVER那部份,我仍然要再花時間去測試看看。

    上述的封裝包含執行ASP程式及其他檔案處理,試過幾次後發現的確在SSIS設計階段是OK的,但部署到Server後執行封裝就停不下來。

    今天下午,接著我就嘗試將執行ASP程式的物件獨立在一個封裝內,而其餘的部份放在另一個封裝內。也就是程式分為兩個封裝。
    首先在SSIS設計階段分別執行那兩個封裝,結果仍然是OK正常的。
    再接著將兩個封裝都部署到SERVER上,然後用SQL Agent安排此兩個封裝步驟,一著執行完成後再執行另一個。
    當這個作業設定好了之後,緊接著啟動作業,最後如預期正常執行,一切ok,沒有跑不停的現象發生。

    很高興,下午的嘗試把完成後部署的封裝執行問題也解決了。

    希望這個回饋能幫上您的忙。

    • 已提議為解答 steve510373 2009年9月9日 上午 01:58
    • 已標示為解答 Lolota Lee 2009年9月9日 上午 02:01
    2009年9月9日 上午 01:58
  • Hi Steve

        謝謝您的回覆,我大致明白您的做法,就是用Agent Job 裡可能有二個step,stpe1去執行一個封裝,step2去執行另一個封裝(這樣講對嗎???)
        因此,幾個小地方再跟您請教一下
        我目前這個封裝裡,只有一個task,也就是『執行處理工作』,靠Executable屬性去指向一支asp,就沒有再做其他事了
      
        您第一個封裝應該還是執行asp,那您"其餘的部份放在另一個封裝內"指的是??????
        因為不知第二個封裝裡頭是什麼
        謝謝您   
    2009年9月9日 上午 11:10
  • Dear  Tim Hsu,

    今天回到此網站,看到了您的訊息。
    抱歉! 因為我以為解決了,所以就沒再進來這個網站。
    您的疑問是我第2個task是執行什麼? 確實我第1個task就是執行某個ASP程式,而第2個task就是接著去作一些SQL資料的轉入及匯出工作而已,也沒什麼特別。
    只是當時那支ASP程式停不下來,一直無法去執行後續的一些SQL資料的轉入及匯出工作,所以才試著把第2個task拆開來放在2個封裝內,試試看。
    後來經您這一質問,我就又把第2個task合在一起,放在1個封裝內。

    這次的新嘗試,我發現不論在SSIS封裝設計徵錯階段,或許是完成後部署到Server的SQL Agent排程執行,也都正常於執行完畢後停止,回覆正常。

    因此,謹總結我目前的設定予您參考:

    1.把SSIS裡『執行處理工作』物件的屬性中之WindowStyle設定為Hidden,確實可避開於SSIS封裝設計徵錯階段,需手動關閉瀏覽器(IE)視窗,方可繼續後續工作或完成的的問題,故建議您亦如此設定。

    2.其餘的設定維持預設值
       FailTaskIfReturnCodeIsNotSuccessValue:True
       SuccessValue:0
       Timeout:0
       TerminateProcessAfterTimeOut:True
       WindowStyle:Hidden

    之前由停不來,到正常結束,說真實的,我也不是很了解,只是試過一些情況後,他正常了。
    我想那應該是在Server的問題,所以我會再於Server端多試一下,如果有更好的解決消息,我會再回來討論與分享。
    謝謝。

    2009年9月18日 上午 06:01
  • Dear  Tim Hsu,

    下午我就嘗試回想那時我在Server端做了什麼,為什麼那個ASP程式會完成並停下來。

    總共我做了2件事,也不知道是否有影響,您參考參考:

    1.我在SERVER端設定了允許Active Server Pages的網頁服務
       [開始]->[我的電腦]->滑鼠右鍵->[管理]->[服務及應用程式]->[網際網路資訊服務(IIS)管理員]->[網頁服務延伸]->[Active Server Pages]->[允許]
       在此設定之前,我的Server已允許了[ASP.NET V2.0.50727]

    2.另外我也在Server端以SQL Agent執行了那個包含ASP程式的封裝
       [開始]->[所有程式]->[Microsoft SQL Server 2005]->[SQL Serevr Management Studio]->[SQL Server Agent]->[作業]->點選[部署完成的那個封裝]->滑鼠右鍵
        ->[從下列步驟啟動作業]

    2009年9月18日 上午 07:18
  • Dear  Tim Hsu,

    今天我的ASP程式又停不下來了,所以又得找解決方法了。

    我發現我的發展環境 pc client的internet explorer版本是 6.0,而server端的IE原本也是6.0版,後來更新為IE 8.0之後就又出現ASP程式停不下來的情況。
    所以,我將嘗試將IE 8.0移除,讓Server端回復到6.0版本,再來試試看。
    2009年10月8日 上午 06:36
  • Dear  Tim Hsu,

    今天下午把server端的IE換成6.0版之後(6.0及7.0版皆可,就是不能是8.0版,因為8.0版會出現有視窗關閉警示窗),ASP仍然停不下來。
    後來我又把SSIS封裝裡的『連接管理員』檢視了一遍。發現我在其中建了一個『Http連接管理員』,會不會是它在搞鬼,所以我就嘗試把它刪除,再RUN封裝就正常了。

    不過我也測過在ASP程式後端,於執行完畢後,加了把IE視窗關閉的程式碼。果然它執行完畢後,就會把IE視窗關閉。不過也測過不加該程式碼,只要如之前我表達將『執行處理工作』物件的屬性中之WindowStyle設定為Hidden,一樣可以正常運作。

    所以總結今天測試結果如下:

    1. server 端的IE不可以是IE 8.0,而6.0及7.0則皆可。
    2. 若ASP程式碼未加關閉視窗程式段,則『執行處理工作』物件的屬性中之WindowStyle設定為Hidden,反之則設為normal即可。
    3. 其餘的設定維持預設值
         FailTaskIfReturnCodeIsNotSuccessValue:True
         SuccessValue:0
         Timeout:0
         TerminateProcessAfterTimeOut:True
    4. SSIS封裝裡的『連接管理員』裡不要加入及設定『Http連接管理員』。

    以上測試謹提供大家參考。

    • 已提議為解答 steve510373 2009年10月8日 上午 09:11
    • 已標示為解答 Lolota Lee 2009年10月9日 上午 01:42
    2009年10月8日 上午 09:10
  • Hi Steve

        非常感謝您提供寶貴的經驗,我會再測試看看,謝謝
    2009年10月12日 上午 06:51