2009-10-06 64 views
3

我們正在使用在DBMS_JOB之上運行的作業調度系統。它使用主作業來創建一次性作業。我們爲所有客戶部署相同的作業集,但可以指定哪些作業只應在特定客戶端上運行。殺死Oracle作業。 10g特定

我們偶爾遇到掛起作業時運行的進程問題。造成這種情況的主要原因是UTL_TCP在得到預期響應時沒有超時。我希望能夠殺死這些工作,以便他們能夠再次運行。

我正在尋找創造一個新的工作,殺死任何這些一直運行超過一定時間的一次性工作。

我們被Oracle 10g困住了一段時間,所以我受限於能夠做什麼。

有,似乎涵蓋了大部分的這種在

http://it.toolbox.com/blogs/database-solutions/killing-the-oracle-dbms_job-6498

我有一種感覺,這是不打算覆蓋所有的可能性,包括文章:

  1. 我們運行可以作爲幾個不同的用戶和一個用戶只能打破/刪除他們創建的作業。我相信我可以使用DBMS_IJOB來解決這個問題,但我需要讓DBA來執行它。
  2. 我們擁有Oracle RAC系統。我知道10g限制ALTER SYSTEM KILL SESSION在當前實例上查殺會話。我可以安排所有工作在同一個實例上運行,但我還沒有嘗試過。

還有什麼我應該考慮的?堆棧溢出需要一個明確的答案。

+3

您的陳述「但我需要讓DBA讓我執行它」聽起來好像您沒有將問題與您的DBA一起解決?在DBA類別中,這是一個強烈的問題,我(作爲DBA發言)會建議您在對程序化解決方案進行過於嚴格的工作之前直接與您的DBA打交道。 – Rob 2009-10-06 14:45:10

+1

我已經提出了Rob的評論,並補充說我會調查設置資源限制來處理這種情況。根據我的經驗,如鏈接文章所述,有時您需要主機操作系統訪問權限和權限來殺死運行作業的ora_qnnn進程,以有效地終止作業,因此您可能無法完全停止數據庫程序。 – dpbradley 2009-10-06 15:28:17

+0

+1 @rob。在我看來,這是對 +1 @dpbradley提出操作系統方面活動的可能性的建設性答案 – 2009-10-06 20:08:46

回答

1
  • 您可以從作業表中獲得PID並通過正常的OS命令殺死卡住的進程。

  • 你可以殺死任何實例上的作業。在10g中,你需要知道哪些情況下被卡住的作業正在運行,並連接到該實例:

爲了讓您的實例和PID:

select inst_id, process from gv$session where ... 

連接到特定的實例:

sqplus [email protected] as sysdba 
alter system kill session ... 
1

還有更多方法可以在oracle上終止會話。取決於你的plattform。在unix會話上運行(後臺作業)也由進程表示。殺死進程,殺死會話。在Windows會話由一個線程表示。殺死線程使用orakill,殺死會話。進程(或線程)標識存儲在gv$process中。

+0

UTL_TCP上的Oracle文檔說寫操作沒有實現超時。仍然不在11g中。如果他們解決了這個問題,那麼我可能不需要幹掉工作。 – steevc 2009-10-07 15:42:40

+0

對不起,我編輯我的答案。 – Christian13467 2009-10-08 07:17:37