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,并建立邮箱 test1@zqcau.com
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。