Oracle

Oracle DBMS 調度程序電子郵件通知動態發送伺服器和實例名稱

  • August 6, 2021

我們有兩台 Oracle 數據庫伺服器。一個用於生產,上面有一個實例,另一個用於開發、測試等多個實例。我有一些工作在生產上執行,當它們失敗時給我發電子郵件。我最初將發件人設置為 server1.prod@company.com 之類的東西,這樣我就知道錯誤來自什麼環境。

問題是當我們將生產複製到測試或開發環境之一以使其更新時,無論出於何種原因,作業都會出錯,但它說它來自 server1.prod@company.com,這是不正確的。

我希望通知電子郵件能夠獲取發送它的伺服器名稱和實例名稱,因此如果它來自測試,它將是 server2.test@company.com。如果這不可能,那麼可以在電子郵件的主題行或正文中獲取此資訊。

我可以很容易地獲得伺服器和實例名稱

SELECT  host_name, instance_name
FROM    v$instance;

,但我不知道如何在工作電子郵件通知中使用它。

我使用 sql 開發人員嚮導設置了這些作業,所以如果你能告訴我如何用它來改變它就可以了,或者使用 pl/sql 程式碼,我都可以。

如果這一切都不可能,那麼我有沒有辦法讓工作至少在它們到達非生產環境後不發送出去,因為我真的不在乎它們是否在那裡失敗。

SYS_CONTEXT 可用於提取數據庫伺服器的主機名和實例名。

您只需呼叫dbms_scheduler.add_job_email_notification以添加電子郵件通知,如下所示:

BEGIN
DBMS_SCHEDULER.add_job_email_notification (
 job_name => <JOBNAME>,
 recipients => <EMAIL>,
 subject => 
   SYS_CONTEXT('USERENV','SERVER_HOST') || ' ' || 
   SYS_CONTEXT('USERENV','INSTANCE_NAME') ||
   ' - Scheduler Job Notification-%job_owner%.%job_name%-%event_type%', 
 events => 'job_failed');
END;

可以在此處找到所有 SYS_CONTEXT 參數的 12c 文件。

引用自:https://dba.stackexchange.com/questions/152312