0

任务是每天自动生成 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"部分将指导报告在适当的服务器上运行,并且作业的第一部分可以从运行报告的配置文件中获取报告服务器名称。我不确定这是否可以从数据库级别,或者如何做到这一点。有任何想法吗?

也许有更好的方法可以做到这一点?

4

1 回答 1

1

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

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

于 2013-09-20T16:29:06.373 回答