Alert指郵件警示系統,主要配置EBS發送警示郵件。
在11i中,未上Patch 4676589 11i.ATG_PF.H Rollup 4之前,簡單配置sendmail發送郵件;應用patch之後,使用workflow notification mailer服務發送郵件。用oracle的話講,之前的alert郵件發送技術過時、不支持MAPI,WF mailer應用最新技術處理進出郵件,而且整合WF 和Alert發送郵件功能,減少成本。
我們公司應用了Patch 4676589,此patch不可逆,所以只能配置workflow notification mailer 服務。
未上Patch 4676589的啓用Alert配置寫在8樓,注意哦,與上過patch的配置完全不一樣。
1.1. 配置MAPI郵箱
設置步驟
要發送郵件先要有個郵箱,126的也可以,sendmail 的也可以(需配置IMAP服務),我直接在exchange server上建立一個帳號。
1.登陸exchange server (任意一臺exchange)
2.打開路徑Active Direectory用戶和計算機
3.新建一個帳戶test1,並建立郵箱[email protected]
4.注意標籤‘帳戶’中,帳戶選項:‘密碼永不過期’,防止以後ERP在使用此帳號時因密碼需變更,而無法使用。
1.2. 配置 WorkflowNotification Mailer
1. 進入OAM,需要有System Administrator職責權限:
2. 進入 Worflow Manager
3. 點擊畫面靠下的Service Components
4.進入Service Components界面
點擊欄位Container欄的任一鏈接,都會進入啓動服務界面。
5.進入後,啓用三個container服務
啓動完這三個服務後,Service Components大部分服務都起來了。
6.返回workflow主頁,Agent listeners 和service Components 起來了,還差一個Notificaitons mailer 起來了就OK了。點擊它進行配置。
7.點擊Edit,進行配置
8. 選擇Workflow Notification Mailer,點擊下面的Edit按鈕,有8個步驟,跳過1、2、5、6;第7步可選
第三步驟中上面三行默認,紅色框中填入我們配置的郵件帳號。
另外建議:server name最好用IP,這樣通信也來的快。最下面要建立兩個Folder,你要是輸入PROCESS,DISCARD點擊下一步不成功的話,就在自己電腦上先配 個 outlook客戶端,連上test1帳戶,建兩個folder,這樣再下步驟準能成功。
9.第四步驟中,紅色框中輸入配置的帳號。
其他全默認。
10.這時三個服務都起來了。Alert 就可以郵遞出來了。
1.3. Alert 發送
實際做完以上設定就可以發送郵件了,但是還是要檢查下,Alert的設定。
1.進入Alert Manger 職責
進入system options
2. 應用patch 4676589後,Mailsystems ,Mail server Options和Response Processing功能已被閹割。所以這三個標籤中的設置隨便設置,不設置也行,已經無效了。值得一提是Response Processing功能,workflow mailer也有此功能,而且更加強。
3.檢查下MoreOptions,默認就行,如果改動過,要注意Coucurrent Manager Name的配置是否正確。Message Elements, 設置郵件格式的,什麼郵件頭尾等等。
4.建立一個Alert,測試下,可以收到(開發alert的資料,網上一大把,隨便下載個試一試,格式比較麻煩,可以參考11ihelp,寫的十分詳細)
進入Alert—Define定義一個Periodic Alert(詳細參考如何開發Alert)
2. Oracle Alert 異常處理
按照以上步驟配置workflow就可以發送Alert郵件了,但那是理想情況,實際生產環境中,服務正常,無錯誤日誌,就是不能發送郵件,考慮下隊列問題了。
很多歷史WF資料處於open狀態未即時清理,在WF郵件功能啓用後,這些資料狀態會處於mail狀態,數據較大,導致產生郵件隊列。所以這些隊列必須要清理掉。
隊列就有兩個WF_DEFERRED 和WF_NOTIFICATION_OUT隊列。
我碰到的正好是WF_NOTIFICATION_OUT隊列產生問題,判斷依據是APPLSYS.AQ$WF_NOTIFICATION_OUT有大量資料且處於READY狀態,且WF_NOTIFICATIONS表中大量資料處於MAIL狀態。
WF_DEFERRED隊列清理,寫在9樓。
2.1. Purge E-mail Notifications
兩種方法:update wf_notifications 表中mailstatus或者recreate此表。
1. update update wf_notifications
SQL> update WF_NOTIFICATIONS set mail_status = 'SENT' where mail_status = 'MAIL';
2. Run the script wfntfqup.sql to purge the WF_NOTIFICATION_OUT queue and rebuild it
sqlplus apps/******@newtest 執行 wfntfqup.sql
2.2. Purge WF_NOTIFICATION_OUT Queue
1. 關閉Notification mailers、Agent listeners、Service components三個服務。
2. Backup WF_NOTIFICATION_OUT
create table APPLSYS.AQ$WF_NOTIFICATION_OUT_BAK
as
select *
from APPLSYS.AQ$WF_NOTIFICATION_OUT
where CORR_ID like 'APPS:ALR%' and msg_state in ('READY','WAIT');
3 . Drop WF_NOTIFICATION_OUT queue
sqlplus apps/apps
Exec dbms_aqadm.stop_queue( queue_name => 'APPLSYS.WF_NOTIFICATION_OUT', wait => FALSE);
exec dbms_aqadm.drop_queue_table( queue_table => 'APPLSYS.WF_NOTIFICATION_OUT', force =>TRUE);
4.Recreate WF_NOTIFICATION_OUT
SSH登陸AP服務器,linux 命令行執行:
a. Recreate the JMS queues
sqlplus apps/apps @$FND_TOP/patch/115/sql/wfjmsqc2.sql applsys apps
b. Add the subscribers
sqlplus apps/apps @$FND_TOP/patch/115/sql/wfmqsubc2.sql APPLSYS APPS
5. Repopulate the WF_NOTIFICATION_OUT queue
sqlplus apps/apps @$FND_TOP/patch/115/sql/wfntfqup APPS apps APPLSYS
6. 執行以下script,將剛備份的未發送的而需要發送的Alert郵件,注入重建之後的WF_NOTIFICATION_OUT中。
set serveroutput on size 100000;
declare
x_out_queue varchar2(80) := 'APPLSYS.WF_NOTIFICATION_OUT';
x_enqueue_options dbms_aq.enqueue_options_t;
x_message_properties dbms_aq.message_properties_t;
x_msgid RAW(16);
i number := 0;
p_event SYS.AQ$_JMS_TEXT_MESSAGE;
cursor msg is
select * from APPLSYS.AQ$WF_NOTIFICATION_OUT_BAK
where msg_state in ('READY','WAIT');
begin
for m1 in msg loop
x_out_queue := 'APPLSYS.'||m1.queue;
x_message_properties.correlation := m1.corr_id;
--x_message_properties.original_msgid := m1.msg_id;
x_message_properties.priority := m1.msg_priority;
x_message_properties.recipient_list(1) := sys.aq$_agent(m1.consumer_name,
null,
0);
if (m1.msg_state = 'WAIT') and (m1.delay > sysdate) then
x_message_properties.delay := ((sysdate - m1.delay)*86400);
else
x_message_properties.delay := 0;
end if;
--dbms_output.put_line('msg.msgid = ' || m1.msg_id);
DBMS_AQ.ENQUEUE(
queue_name => x_out_queue,
enqueue_options => x_enqueue_options,
message_properties => x_message_properties,
payload => m1.user_data,
msgid => x_msgid); /* OUT*/
--dbms_output.put_line('x_msgid = ' || x_msgid);
if i = 20 then
i := 0;
commit;
else
i := i + 1;
end if;
end loop;
commit;
exception
when others then
dbms_output.put_line('sqlerrm = ' || sqlerrm);
end;
7. 啓動Notification mailers、Agent listeners、Service components三個服務。確保所有服務啓動,測試後問題可解決。
附一:
未上patch之前的Alert發送郵件配置。
1.配置sendmail,進入linux,root權限:
1.1. 修改sendmail.mc文件
檔案路徑:/etc/mail
#vi sendmail.mc
(1).修改第23行的dnl define((`SMART_HOST',` 192.168.x.x '),將192.168.x.x改爲ERP APserver地址
(2).修改146行的LOCAL_DOMAIN(`192.168.x.x '),將192.168.x.x改爲網關地址
(3).註釋DEAMON_OPTIONS(Port=SMTP,Addr=127.0.0.1,Name=MTA),此句前加上#,如果不去掉此句,其他PC無法訪問這個mailserver
1.2. 編譯sendmail.mc文件
#m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
1.3. 重啓服務
#service sendmail restart
1.4 . 注意DNS
#netconfig
必須填入正確的DNS,特別要注意,偉大工程別栽這裏。
#service network restart
2.設置Alert系統選項
2.1. 登入系統進入Alert manager 職責
進入system-options
2.2 進入配置選項
郵件系統中,選擇Unix:sendmail 打勾:
2.3 郵件服務器選項中
紅色框:database/server name內輸入ERP AP 地址,如erpap.zqcau.com(下圖沒輸,應該要輸入)
輸入帳號和密碼,帳號root,密碼………
剩下標籤默認,完成。
附二:
清理WF_DEFERRED隊列。
WF_DEFERRED 隊列在 WF_DEFERRED AGENTS not running時做清理,其實其佔用表空間較大,如果超過幾百兆或者到G級別時,也可以考慮清理一次,提高效能。
1. 如果是clone系統,WF_DEFERRED AGENTS not running時需執行下面操作:
a. 關閉所有服務
b. $sqlplus apps/pwd
c. SQL>exec fnd_conc_clone.setup_clean;
d. Run AutoConfig on ALL tier nodes
e. 重啓所有服務,參考1.2開啓WF三個服務。
2. 清理WF_DEFERRED隊列
a. 參考關閉wf三個發郵件的服務
b. 執行script
Exec dbms_aqadm.stop_queue( queue_name => 'WF_DEFERRED', wait => FALSE);
Exec dbms_aqadm.drop_queue(queue_name=> 'WF_DEFERRED');
Exec dbms_aqadm.drop_queue_table( queue_table => 'WF_DEFERRED', force => TRUE);
commit;
c. Recreate WF_DEFERRED
sqlplus apps/apps @$FND_TOP/patch/115/sql/wfevquec.sql APPLSYS APPS WF_DEFERRED APPS
Enter the values for the following parameters:
max-retries=5
retry-delay=3600
retention=86400
重建之後WF_DEFERRED AGENTS即可running。