Oracle
Oracle DBMS 調度程序電子郵件通知動態發送伺服器和實例名稱
我們有兩台 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 文件。