DB作业生成/通过电子邮件发送Oracle报告输出

时间:2013-09-20 16:22:29

标签: oracle email pdf report environment-variables

任务是每天自动生成Oracle报告,并通过电子邮件发送给用户。

所以我有点工作(如果我硬编码下面的一个报告服务器名称,它就有效。)

我在数据库上创建了一个生成报告的作业。我可以使用以下命令将报告以PDF格式通过电子邮件发送到目的地:

UTL_HTTP.REQUEST('http://server/reports/rwservlet?server=specific_report_server &report='||p_report_name||'&userid='||p_connstring||'&destype=mail'||p_parameters||'&desname='||p_to_recipientlist||' &cc='||p_cc_recipientlist||'&bcc='||p_bcc_recipientlist||'&subject=%22' || REPLACE(p_subject,' ','%20') || '%22&paramform=no&DESformat=pdf&ENVID='||p_envid);

这很有效......

但问题是我的组织有两个负载均衡的报表服务器。我们的服务器团队可以在没有任何警告的情况下取下其中一个服务器,因此我不能仅使用其中一个报表服务器名称对报表服务器名称(上面的?server =参数)进行硬编码,因为它会工作一段时间,然后当该服务器发生故障时,它将停止工作。

我的服务器团队要求我寻找一种方法从formsweb.cfg文件或作业中的default.env值中提取服务器(其中有保存服务器名称的参数)。这样的想法是"http://server"部分将指示报告在适当的服务器上运行,并且作业的第一部分可以从运行报告的配置文件中获取报告服务器名称。我不确定这是否可以从数据库级别,或如何做到这一点。有什么想法吗?

是否有更好的方法可以做到这一点,或许?

1 个答案:

答案 0 :(得分:1)

如果有两个负载均衡的服务器,则强烈暗示网络用户必须为服务配置某种虚拟IP(VIP)。您(以及其他所有人)应该使用该VIP而不是特定的服务器名称。

例如,如果您有两台服务器reportA.yourdomain.comreportB.yourdomain.com,您几乎肯定会为reports.yourdomain.com创建一个VIP,它可以在两台服务器之间进行负载均衡(并知道其中一台服务器是否存在服务器已关闭或是否已添加新的reportC服务器)。此VIP可以自行进行负载平衡,也可以指向分配流量的实际物理负载均衡器。所有应用程序都将引用reports.yourdomain.com VIP而不是任何硬编码的服务器名称。