2013-09-20 7 views
0

Задача состоит в том, чтобы ежедневный, автоматически и по электронной почте получал отчет Oracle.Задача БД для генерации/отправки отчета Oracle 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

Если есть два сбалансированных по нагрузке сервера, это сильно означает, что сетевые пользователи должны были настроить какой-то виртуальный IP (VIP) для этой услуги. Вы (и все остальные) должны использовать этот VIP, а не конкретное имя сервера.

Например, если у вас есть два сервер reportA.yourdomain.com и reportB.yourdomain.com, вы почти наверняка создать VIP для reports.yourdomain.com что балансировка нагрузки между двумя серверами (и знает, является ли один из серверов вниз, или новый сервер reportC был добавлено). Этот VIP будет либо выполнять балансировку нагрузки, либо указывать на фактический балансировщик нагрузки, который распределяет трафик. Все приложения будут ссылаться на reports.yourdomain.com VIP, а не на любые имена жестко запрограммированных серверов.

+0

Это было то, что я обсуждал с командой сервера, когда я впервые задал им вопрос (так было, как это делала другая организация, с которой я работал). Они смогли помочь мне с частью «http: // server» из вышеперечисленной ссылки, чтобы указать имя VIP для этой части ... однако первым параметром в URL-адресе является указание процесса сервера отчетов имя (например, «server = rep_batch_somereportserver»), и именно там я повесил трубку. Я думал, что есть что-то, что они могли бы сделать на их конце тоже для этого, похожего на то, что вы предложили для доменной части URL-адреса. –

+1

@UnsureHowToDoThis - Кажется сумасшедшим разработать сервис, который требует, чтобы вы ударили по VIP, а затем передали определенное имя сервера в качестве параметра. Это побеждает всю цель балансировки нагрузки. Мне также трудно поверить, что когда сервер падает, кто-то сначала должен обойти и обновить конфигурационные файлы на каждом сервере и «по умолчанию env» (не знаю, что это значит) и дождаться, что все кэшированные данные будут очиститесь, прежде чем отключать сервер, только чтобы отменить эти изменения, когда сервер возвращается. –

+0

Я полностью согласен с вами: имя экземпляра сервера. Я вернусь к этой серверной команде и посмотрю, смогут ли они найти лучшее решение. Я как бы цифра, я пытаюсь решить проблему, на которую они должны найти решение. В любом случае, спасибо за быструю помощь! –

Смежные вопросы