Показаны сообщения с ярлыком script. Показать все сообщения
Показаны сообщения с ярлыком script. Показать все сообщения

17 мая 2013

How-to Setup Essbase Clustering on Unix

На CEAL появилась инструкция по установке и настройке кластера Essbase 11.1.2.2 на Unix.
Матрица в оф.доках описывает возможные виды и ограничения отказоустойчивых или с распределением загрузки кластеров Essbase.

Оригинальный пост

05 мая 2013

Восстановление БД Essbase в резервном ДЦ, не оставливая primary БД

Леонид Борчук описал в своем блоге пример восстановления БД Essbase в резервном ДЦ без остановки primary БД.

28 августа 2012

SQL запросы для получения информации о формах в Planning

Можно потратить много времени, чтобы получить информацию о формах данных в Planning: папка формы, бизнес-правила, меню и др. Можно упростить это процесс. Подробнее

13 августа 2012

Связывание windows-сервисов Hyperion

Чтобы завязать между собой сервисы EPM при запуске, essbase.ru рекомендует:
sc config “HyS9FoundationServices” depend= OracleServiceHYPFM
sc config “HyS9FinancialManagementWebSvcs” depend= OracleServiceHYPFM
sc config “HFMWebServiceManager” depend= OracleServiceHYPFM
sc config “HyS9EPMAWebTier” depend= OracleServiceHYPFM
sc config “EPMA_Server” depend= OracleServiceHYPFM
sc config “HyS9EPMADataSynchronizer” depend= OracleServiceHYPFM
sc config “HyS9CALC” depend= OracleServiceHYPFM
sc config “HyS9aifWeb” depend= OracleServiceHYPFM

17 мая 2012

IBH в базе Essbase

Редко, но можно столкнуться с проблемой появления некорректных (дефектных) заголовков блоков - invalid block headers (IBH), которая описывается в логе приложения Essbase примерно так:
[Wed May 16 22:51:58 2012]Local/AppName/Cube/admin@Native Directory/Error(1006068)
Недопустимый статус транзакции для блока. Для поиска и устранения проблемы воспользуйтесь служебными программами поиска и устранения IBH.
Причинами могут быть:
  1. Какой-то сторонний процесс пытается получить доступ с блокировкой к файлам базы данных (куба) Essbase. Например, антивирус или ПО резервного копирования
  2. Служба Essbase была остановлена во время извлечения данных или выполнения расчетов. Иными словами, некорректная остановка или "падение" базы данных
  3. Проблемы с дисковой подсистемой сервера. Например, ошибки в работе RAID-массивов, bad blocks на накопителях информации
  4. Закончилось место на диске
  5. Сильная фрагментация диска
  6. Сильная фрагментация базы данных (куба)
  7. Использование Direct I/O 
  8. Слишком маленький кэш данных куба
  9. Подобные ошибки встречались в Essbase 6.х и 7.х
     
После проверки всех пунктов из списка выше для решения проблемы можно выполнить на проблемной базе данных (кубе) MaxL скрипт:
alter application 'AppName' disable connects;
alter system logout session on database 'AppName'.'Cube';
alter database 'AppName'.'Cube' validate data to local logfile 'f:\IBH.log';
alter database 'AppName'.'Cube' repair invalid_block_headers;
alter application 'AppName' enable connects;
Этот скрипт проверяет куб на наличие IBH и записывает найденные блоки в указанный лог-файл, а затем удаляет дефектные блоки из базы данных (куба).

Иногда после выполнения скрипта необходимо выполнить реструктуризацию куба, чтобы indeх файл был перестроен с учетом исправления IBH. В идеале - выгрузить данные из куба, очистить его и загрузить данные обратно.

UPD: Кроме того, имеет смысл иметь опцию в essbase.cfg:
IBHFIXTHRESHOLD AppName Cube 10
Эта команда говорит Essbase, что нужно проверять наличие IBH на кубе (это происходит и без указания опции в явном виде) и, в случае превышения порога 10% (пример), базу данных следует корректно остановить. Это сделано, с целью показать, что критическая масса IBH накоплена, и нужно что-то делать. Однако, в EPM 11 за работоспособность Essbase отвечает сервис OPMN, который регулярно пингует службу OLAP-сервера и может заставить запуститься приложение заново.

Наш соратник Евгений Расюк добавляет, и я его поддерживаю:
  • Всегда нужно иметь бэкап с выгруженными данными в текст. Это хоть и долго, на гораздо надежнее простого копирования файлов куба - "это видимость бэкапа" - в таком случае все проблемы (например, IBH) будут также занесены в бэкап
  • Нужно стараться проектировать модели таким образом, чтобы исключить кастом расчеты на агрегируемых уровнях

16 апреля 2012

Списки пользователей в Excel

Как и обещал, начинаю выкладывать некоторые "секреты" подготовки материалов к аудиту моей теперешней промышленной системы (FDM, HFM, Planning 11.1.2.00).
Для начала аудиторы запросили список существующих и удаленных пользователей системы. Используя вот эту подсказу вендора (структура и описание реляционных БД продуктов EPM), накидал 2! вьюхи в СУБД (MS SQL Server), в которых отразил все необходимые данные. К сожалению, FDM/HFM слабо интегрированы с HSS, поэтому вьюх и оказалось две.

Отчет по доступу к подсистеме бюджетирования на базе Planning/Essbase был получен таким образом из БД HSS:

SELECT DISTINCT TOP (100) PERCENT
dbo.CSS_USERS.NAME, dbo.CSS_USERS.FIRSTNAME, dbo.CSS_USERS.LASTNAME, dbo.CSS_USERS.DESCRIPTION, dbo.CSS_USERS.EMAIL, dbo.CSS_USERS.ACCOUNTSTATUS, dbo.CSS_GROUPS.NAME AS HSS_GROUP
FROM dbo.CSS_PROVISIONING_INFO CROSS JOIN
dbo.CSS_GROUP_MEMBERS INNER JOIN
dbo.CSS_GROUPS ON dbo.CSS_GROUP_MEMBERS.LOWER_GROUP_IDENTITY = dbo.CSS_GROUPS.LOWER_IDENTITY_ID INNER JOIN
dbo.CSS_USERS ON dbo.CSS_GROUP_MEMBERS.LOWER_MEMBER_IDENTITY = dbo.CSS_USERS.LOWER_IDENTITY_ID
ORDER BY dbo.CSS_USERS.NAME, HSS_GROUP

Отчет по доступу к подсистеме подготовки МСФО отчетности на базе FDM/HFM был получен из БД HSS + HSV_ProductionHFMAppName_SECCACCESS:
SELECT DISTINCT TOP (100) PERCENT
hyp11hss.dbo.CSS_USERS.NAME, hyp11hss.dbo.CSS_USERS.FIRSTNAME, hyp11hss.dbo.CSS_USERS.LASTNAME, hyp11hss.dbo.CSS_USERS.DESCRIPTION, hyp11hss.dbo.CSS_USERS.EMAIL, hyp11hss.dbo.CSS_USERS.ACCOUNTSTATUS,  dbo.HSV_ProductionHFMAppName_SECCLASSES.Label AS SecClass
FROM dbo.HSV_ProductionHFMAppName_SECCACCESS INNER JOIN
dbo.HSV_ProductionHFMAppName_SECCLASSES ON dbo.HSV_ProductionHFMAppName_SECCACCESS.ItemID = dbo.HSV_ProductionHFMAppName_SECCLASSES.ItemID INNER JOIN
hyp11hss.dbo.CSS_USERS ON dbo.HSV_ProductionHFMAppName_SECCACCESS.UserSID = hyp11hss.dbo.CSS_USERS.LOWER_IDENTITY_ID
ORDER BY hyp11hss.dbo.CSS_USERS.NAME
где hyp11hss - имя БД HSS, HSV_ProductionHFMAppName_SECCLASSES - имя таблицы с классами безопасности FDM/HFM.

Таким образом, подключившись к созданным вьюшкам из Excel, свободно получаем данные для формирования отчетов по безопасности.

Отмечу, что пользователей мы декативируем, а не удаляем, сохраняя таким образом целостность аудита. По полю ACCOUNTSTATUS устанавливаем фильтр: где 1 - активный пользователь; 2 - "мертвая душенка".


06 апреля 2012

MaxL по расписанию

Часто бывает необходимым поставить выполнение MaxL скрпита в расписание. Причем этот скрипт создан в EAS Console и хранится на сервере. Я решил эту задачу созданием batch файла, который ставится в расписание Windows Server:
@echo off
rem - Input parameter is a name of MaxL script (only name w/out extension)
Входящим параметром является имя MaxL скрпита без расширения.
setlocal
cls

Rem Set Variables
SET ESSSETENV=F:\Oracle\Middleware\user_projects\epmsystem1\EssbaseServer\essbaseserver1\bin\setEssbaseEnv.bat
SET SERVER=EssbaseServerNameOrIP
SET USER=Ess_admin_name
SET PASSWORD=Ess_password
Rem See more info about Encyption on https://forums.oracle.com/forums/thread.jspa?threadID=1021677
SET PKE=set_your_Public_Key_for_Encryption
SET PKD=set_your_Private_Key_for_Decryption
SET MaxLPath=F:\Oracle\Middleware\EPMSystem11R1\products\Essbase\eas\storage\mxlscripts\%USER%
SET EADMaxl=%MaxLPath%\%1
Вся информация сохранится в логе, имя файла которого задается переменной EXECLOG.
SET EXECLOG=AutoStartMaxL-%1.log
SET RunMaxl=AutoStartMaxL.mxl
SET CurrDir=%CD%

echo Started: %date% @ %time% > %CurrDir%\%EXECLOG%
Поскольку в консоли вход и подключение производить не нужно, а внешним скриптом - необходимо, добавляем строки входа (login) и завершения работы (logout и exit).
Rem - Generate MaxL Script - Start
echo login '%USER%' '%PASSWORD%' on '%SERVER%'; > %CurrDir%\%RunMaxl%
Сам скрипт считываем из исходного файла на сервере.
Rem - Read original MaxL
For /F "eol=; delims=/" %%i In (%EADMaxl%) Do (
    echo %%i ) >>  %CurrDir%\%RunMaxl%

echo logout; >> %CurrDir%\%RunMaxl%
echo exit; >> %CurrDir%\%RunMaxl%
Rem - Generate MaxL Script - Finish

Rem Set Essbase Env
call %ESSSETENV%
Сам скрипт запускаем в шифрованном виде. 
Rem Encrypt MaxL Script
essmsh -E %CurrDir%\%RunMaxl% %PKE% > nul
Rem Del Original MaxL Script
del %CurrDir%\%RunMaxl% > nul
Rem Run Encrypted MaxL Script with LOG
essmsh -D %CurrDir%\%RunMaxl%s %PKD% >> %CurrDir%\%EXECLOG%

echo ... >>  %CurrDir%\%EXECLOG%
echo Script: >>  %CurrDir%\%EXECLOG%
For /F "eol=; delims=/" %%i In (%CurrDir%\%RunMaxl%s) Do (
    echo %%i ) >>  %CurrDir%\%EXECLOG%
echo ... >>  %CurrDir%\%EXECLOG%

Rem Del Encrypted MaxL Script
del %CurrDir%\%RunMaxl%s >> %CurrDir%\%EXECLOG%

echo Finished: %date% @ %time%  >> %CurrDir%\%EXECLOG%
Добавляем в расписание (Task Scheduler) задачу на выполнение нашего bat-файла с параметром - именем MaxL скрпита.
 


26 марта 2012

Скользкие формы Planning

Встала передо мной задача: построить формы в Planning таким образом, чтобы на форме был текущий месяц (Period Dim) и пару месяцев назад. Естественно, каждый раз перестраивать ручками формы лень, а есть ситуации, когда нужно "заглянуть" на 1-2 мес в прошлый год. Вот и получаются у нас "скользящие" формы.
К сожалению, сами формы данных, в отличие от отчетов FinReporting, построить с использование ссылающихся функций (вроде Prior) нельзя. Ответ нашелся на форуме: https://forums.oracle.com/forums/thread.jspa?messageID=9454665 Да, и так понятно, что это единственный вариант - через переменные подстановки в Essbase. Прекрасно, приступим к реализации:
  1. Определяемся с набором переменных. Для каждого "специфического" периода может быть нужен свой год. Например, в моем случае: в январе текущего понадобятся еще ноябрь и декабрь прошлого года, а в феврале - только декабрь прошлого года и январь нынешнего:
    • CurrYearFor - текущий год
    • CurrPerFor - текущий период для Прогнозирования
    • Prev1PerFormFor - предыдущий период
    • Prev1YearFormFor - год для предыдущего периода (Prev1PerFormFor)
    • Prev2PerFormFor - пред-пердыдущий период
    • Prev2YearFormFor - год для пред-предыдущего периода (Prev2PerFormFor)
  2. Создаем эти переменные подстановки в кубе приложения Essbase. Либо ручками (операция по сути - разовая), либо MaxL-скриптиком с использованием команд на нужной БД (кубе) Essbase:
    alter database sample.basic add variable CurMnth 'Jan';
    таким синтаксисом мы создаем переменную для куба приложения. Есть еще варианты для одного приложения:

    alter application sample add variable CurMnth 'Jan';

    или инстанса Essbase:
    alter system add variable CurMnth 'Jan';
  3. Настраиваем формы данных на использование этих переменных. Здесь придется отказаться от выбора года и периода в срезе, потому что придется эти измерения "зашивать" в таблицы данных.
  4. Готовим скрипт (bat для Windows env.) для обновления переменных по мере необходимости:
    @echo off
    setlocal
    cls

    Rem Set Variables
    SET ESSSETENV=F:\Oracle\Middleware\user_projects\epmsystem1\EssbaseServer\essbaseserver1\bin\setEssbaseEnv.bat
    SET SERVER=epm_server_name
    SET USER=ess_admin
    SET PASSWORD=ess_password
    Ниже укзаываются Public Key for Encryption и Private Key for Decryption. Это необходимо для шифрования учетных записей пользователя для исполнения MaxL скрипта. Подробности
    SET PKE=
    SET PKD=
    SET App=AppName
    SET Cube=PlanName
    SET OuputMaxl=EssVarsUpdate.maxl
    В EssVarsUpdate_AutoExec.log будем сохранять лог основных операций, а в %LogDate%_EssVarsUpdate.log исполняемый MaxL.
    SET EXECLOG=EssVarsGenerator_Auto.log
    SET CurrDir=%CD%
    SET LogSubDir=%CurrDir%\LOGS
    SET CurrYear=%date:~12%
    SET /A PrevYear=%CurrYear% - 1
    SET Day=%date:~7,2%
    SET Month=%date:~4,2%
    SET LogDate=%CurrYear%-%Month%-%Day%
    if '%Month:~0,1%'=='0' set Month=%Month:~1,1%

    Не забудьте проверить значения переменных CurrYear, Month. Зависят от используемой на сервере локали.
    Rem LOG
    echo Генератор переменных БД Essbase по Прогозу для построения "скользящих" форм >> %LogSubDir%\%EXECLOG%
    echo Started: %date% @ %time% >> %LogSubDir%\%EXECLOG%
    echo Params: CurrMonth:%Month%; CurrYear:%CurrYear%; PrevYear:%PrevYear% >> %LogSubDir%\%EXECLOG%

    Rem Checkin' Input Parameter
    IF %Month% LSS 1 GOTO :error
    IF %Month% GTR 12 GOTO :error 
    Ниже - список базовых элементов измерения Period
    Rem Input Parameter Converter
    IF %Month%==1 SET TempMonth='January'
    IF %Month%==2 SET TempMonth='February'
    IF %Month%==3 SET TempMonth='March'
    IF %Month%==4 SET TempMonth='April'
    IF %Month%==5 SET TempMonth='May'
    IF %Month%==6 SET TempMonth='June'
    IF %Month%==7 SET TempMonth='July'
    IF %Month%==8 SET TempMonth='August'
    IF %Month%==9 SET TempMonth='September'
    IF %Month%==10 SET TempMonth='October'
    IF %Month%==11 SET TempMonth='November'
    IF %Month%==12 SET TempMonth='December'

    Rem Create MAXL script
    echo spool on to '%LogSubDir%\%LogDate%_EssVarsUpdate.log'; > %CurrDir%\%OuputMaxl%
    echo login '%USER%' '%PASSWORD%' on '%SERVER%'; >> %CurrDir%\%OuputMaxl%

    Rem Set Current Period and Year, Start Period for Forecast calculations
    echo alter database '%App%'.'%Cube%' set variable 'CurrYearFor' 'FY%CurrYear%'; >> %CurrDir%\%OuputMaxl%
    echo alter database '%App%'.'%Cube%' set variable 'CurrPerFor' %TempMonth%; >> %CurrDir%\%OuputMaxl%
    echo alter database '%App%'.'%Cube%' set variable 'StartPerFor' %TempMonth%; >> %CurrDir%\%OuputMaxl%

    Rem Set Previous Period and Year
    SET /A Mon = 100%Month% %% 100
    SET /A PriorMonth=%Mon% - 1
    SET Prev1YearFormFor='FY%CurrYear%'
    IF %PriorMonth% == 0 SET Prev1YearFormFor='FY%PrevYear%'
    IF %PriorMonth% == 0 SET PriorMonth=12
    IF %PriorMonth%==1 SET TempMonth='January'
    IF %PriorMonth%==2 SET TempMonth='February'
    IF %PriorMonth%==3 SET TempMonth='March'
    IF %PriorMonth%==4 SET TempMonth='April'
    IF %PriorMonth%==5 SET TempMonth='May'
    IF %PriorMonth%==6 SET TempMonth='June'
    IF %PriorMonth%==7 SET TempMonth='July'
    IF %PriorMonth%==8 SET TempMonth='August'
    IF %PriorMonth%==9 SET TempMonth='September'
    IF %PriorMonth%==10 SET TempMonth='October'
    IF %PriorMonth%==11 SET TempMonth='November'
    IF %PriorMonth%==12 SET TempMonth='December'
    echo alter database '%App%'.'%Cube%' set variable 'Prev1PerFormFor' %TempMonth%; >> %CurrDir%\%OuputMaxl%
    echo alter database '%App%'.'%Cube%' set variable 'Prev1YearFormFor' %Prev1YearFormFor%; >> %CurrDir%\%OuputMaxl%

    Rem Set Pre-Previous Period and Year
    SET /A PriorMonth=%Mon% - 2
    SET Prev2YearFormFor='FY%CurrYear%'
    IF %PriorMonth% == 0 SET Prev2YearFormFor='FY%PrevYear%'
    IF %PriorMonth% == -1 SET Prev2YearFormFor='FY%PrevYear%'
    IF %PriorMonth% == 0 SET PriorMonth=12
    IF %PriorMonth% == -1 SET PriorMonth=11
    IF %PriorMonth%==1 SET TempMonth='January'
    IF %PriorMonth%==2 SET TempMonth='February'
    IF %PriorMonth%==3 SET TempMonth='March'
    IF %PriorMonth%==4 SET TempMonth='April'
    IF %PriorMonth%==5 SET TempMonth='May'
    IF %PriorMonth%==6 SET TempMonth='June'
    IF %PriorMonth%==7 SET TempMonth='July'
    IF %PriorMonth%==8 SET TempMonth='August'
    IF %PriorMonth%==9 SET TempMonth='September'
    IF %PriorMonth%==10 SET TempMonth='October'
    IF %PriorMonth%==11 SET TempMonth='November'
    IF %PriorMonth%==12 SET TempMonth='December'
    echo alter database '%App%'.'%Cube%' set variable 'Prev2PerFormFor' %TempMonth%; >> %CurrDir%\%OuputMaxl%
    echo alter database '%App%'.'%Cube%' set variable 'Prev2YearFormFor' %Prev2YearFormFor%; >> %CurrDir%\%OuputMaxl%
    echo logout; >> %CurrDir%\%OuputMaxl%
    echo spool off; >> %CurrDir%\%OuputMaxl%
    echo exit; >> %CurrDir%\%OuputMaxl%

    Rem Set Essbase Env
    call %ESSSETENV%
    Rem Encrypt MaxL Script
    essmsh -E %CurrDir%\%OuputMaxl% %PKE% > nul
    Rem Del Original MaxL Script
    del %CurrDir%\%OuputMaxl% >> %LogSubDir%\%EXECLOG%
    Rem Run Encrypted MaxL Script
    essmsh -D %CurrDir%\%OuputMaxl%s %PKD% > nul
    Rem Del Encrypted MaxL Script
    del %CurrDir%\%OuputMaxl%s >> %LogSubDir%\%EXECLOG%

    echo MaxL log U can find here: %LogSubDir%\%LogDate%_EssVarsUpdate.log >> %LogSubDir%\%EXECLOG%
    GOTO :fine

    :error
    set ERRORLEVEL=-1
    echo Wrong input parameter '%Month%' (Num. of month) :( >> %LogSubDir%\%EXECLOG%
    echo Input value must be in range [1..12] >> %LogSubDir%\%EXECLOG%
    GOTO :end

    :fine
    set ERRORLEVEL=0
    echo Essbase Variables has been updated successfully =) >> %LogSubDir%\%EXECLOG%
    GOTO :end

    :end
    echo Finished: %date% @ %time% >> %LogSubDir%\%EXECLOG%
    echo ... >> %LogSubDir%\%EXECLOG%
  5. Автоматизируем запуск этого файла, вставляя задачу в Task Scheduler. Сначала я готовил батничек для ручного режима с менюшкой для ответственного пользователя, но пришел к выводу, что могу автоматизировать процесс такого обновления переменных: я знаю, что пользователи полезут в систему к 1-му числу, значит числа 25 могу смело обновлять переменные. 
UPD: Макс, спасибо за помощь в вопросах корректного запуска essmsh и шифрования учетных данных!

10 июля 2011

Запуск/остановка сервисов EPM 11.1.2.1

Ввиду того, что в этом релизе изменились имена некоторых сервисов, некоторых не стало вовсе, а также в связи с переводом на sc start|stop, предлагаю Вашему вниманию обновленные скрипты для запуска платформы Oracle EPM System 11.1.2.1 (DB, Foundation, Essbase, Planning, Reporting&Analysis):

epmStart.bat
@ECHO OFF
ECHO -----EPM 11.1.2.1 STARTING / Batch EPM full start script by Antun Kulkov, 2011
ECHO -----See more at http://silw.blogspot.com
ECHO -------SQL Server Starting
sc start "MSSQLSERVER"
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Oracle Process Manager (ohsInstance)
sc start "OracleProcessManager_ohsInstance1649849633"
waitfor NONEXISTINGSIGNAL /T 10
ECHO -------Oracle Process Manager (EPM_epmsystem1)
sc start "opmn_EPM_epmsystem1"
waitfor NONEXISTINGSIGNAL /T 10
ECHO -------Oracle Process Manager (ConfigurationManager)
sc start "OracleEpmSystem_Administratord_oracle_middleware_user_projects_epmsystem1ConfigurationManager"
waitfor NONEXISTINGSIGNAL /T 10
ECHO -------Hyperion RMI Registry
sc start "Hyperion RMI Registry"
waitfor NONEXISTINGSIGNAL /T 10
ECHO -------Hyperion Foundation Services - Managed Server
sc start HyS9FoundationServices
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Administration Services - Web Application
sc start HyS9eas
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Integration Services
sc start "Essbase Integration Server"
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Provider Services - Web Application
sc start HyS9aps
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Studio Service BPMS
sc start "Hyperion Studio Service BPMS bpms1"
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion EPM Architect - Process Manager
sc start EPMA_Server
waitfor NONEXISTINGSIGNAL /T 30
ECHO -------Hyperion EPMA Data Synchronizer - Web Application
sc start HyS9EPMADataSynchronizer
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion EPMA Web Tier - Web Application
sc start HyS9EPMAWebTier
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion CALC Manager - Web Application
sc start HyS9CALC
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Planning - WebHyS9Planning Application
sc start HyS9Planning
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Web Analysis - Web Application
sc start HyS9WebAnalysis
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Reporting and Analysis Framework
sc start HyS9RaFrameworkAgent
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Financial Reporting - Web Application
sc start HyS9FRReports
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Reporting and Analysis Framework - Web Application
sc start HyS9RaFramework
waitfor NONEXISTINGSIGNAL /T 5
ECHO ALL DONE!
waitfor NONEXISTINGSIGNAL /T 10
ECHO -----Oracle EPM System has been started.

epmStop.bat
@ECHO OFF
ECHO -----EPM 11.1.2.1 STOPPING / Batch EPM full stop script by Antun Kulkov, 2011
ECHO -----See more at http://silw.blogspot.com
ECHO -------Hyperion Web Analysis - Web Application
sc stop HyS9WebAnalysis
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Reporting and Analysis Framework
sc stop HyS9RaFrameworkAgent
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Financial Reporting - Web Application
sc stop HyS9FRReports
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Reporting and Analysis Framework - Web Application
sc stop HyS9RaFramework
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Planning - WebHyS9Planning Application
sc stop HyS9Planning
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion CALC Manager - Web Application
sc stop HyS9CALC
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion EPMA Web Tier - Web Application
sc stop HyS9EPMAWebTier
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion EPMA Data Synchronizer - Web Application
sc stop HyS9EPMADataSynchronizer
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion EPM Architect - Process Manager
sc stop EPMA_Server
waitfor NONEXISTINGSIGNAL /T 30
ECHO -------Hyperion Studio Service BPMS
sc stop "Hyperion Studio Service BPMS bpms1"
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Provider Services - Web Application
sc stop HyS9aps
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Integration Services
sc stop "Essbase Integration Server"
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Administration Services - Web Application
sc stop HyS9eas
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Foundation Services - Managed Server
sc stop HyS9FoundationServices
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion RMI Registry
sc stop "Hyperion RMI Registry"
waitfor NONEXISTINGSIGNAL /T 10
ECHO -------Oracle Process Manager (ConfigurationManager)
sc stop "OracleEpmSystem_Administratord_oracle_middleware_user_projects_epmsystem1ConfigurationManager"
waitfor NONEXISTINGSIGNAL /T 10
ECHO -------Oracle Process Manager (ohsInstance)
sc stop "OracleProcessManager_ohsInstance1649849633"
waitfor NONEXISTINGSIGNAL /T 10
ECHO -------Oracle Process Manager (EPM_epmsystem1)
sc stop "opmn_EPM_epmsystem1"
waitfor NONEXISTINGSIGNAL /T 10
ECHO -------SQL Server Stopping
sc stop "MSSQLSERVER"
waitfor NONEXISTINGSIGNAL /T 5
ECHO ALL DONE!
waitfor NONEXISTINGSIGNAL /T 10
ECHO -----Oracle EPM System has been stopped.

Понятно, что данные скрипты приведены только для примера и требуют уточнений в части сервисов RDBMS и номера сервиса OHS. Кроме того, можно более гибко управлять запуском даже с удаленных машин, используя все возможности команды sc. Верные имена служб можно найти в реестре в ветке:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\LEGACY_{ServiceName}\0000\Service

21 мая 2011

17,7 секунд - быстро, но долго

Перемещено из блога Oracle Hyperion Planning: заметки администратора с разрешения автора - Романа Удальцова

Запуск бизнес-правил из командной строки с использованием Hyperion CmdLineLauncher – это удобно в ситуации, когда необходимо многократно запускать вручную кучу последовательностей, содержащих в себе большое число бизнес-правил. Один раз автоматизировал, и сиди себе запускай батничек.

Но обнаружилась интересная особенность. При запуске из командной строки любое бизнес-правило выполняется на некоторую константу дольше, чем при запуске его же из нативной последовательности Essbase. Покажу на примере...

У меня запускается ряд последовательностей, содержащих в себе в общей сложности 547 бизнес-правил. Очень многие из них, судя по hbrlaunch.log, выполняются за доли секунды.

Статистика автоматизированного запуска из командной строки выглядит следующим образом (число бизнес-правил / время выполнения):


Самое интересное происходит в левой части графика:


Видно, что ни одно бизнес-правило не выполнилось быстрей, чем за 17,7 секунд.

Простая арифметика показывает, что на моем примере это целых... 17,7 х 547 = 9681,9 сек. = 2 часа 41 минута 21,9 секунды, потраченные непонятно на что! Распараллеливание запусков бизнес-правил несколько уменьшает это время (примерно до полутора часов), но от этого не легче.

Всё это пока просто наблюдение, если докопаюсь до причины – расскажу.
Есть предположение, что это причиной задержки может служить запуск Java для каждого из процессов, но почему так долго?

UPD
Завёл по этому поводу SR, за 3 дня переписки ничего толкового не посоветовали.
Их резюме – «I'm afraid that we have no other reports of this timing difference nor any documentation that would explain why it might occur. If you believe that this is a significant issue I could test it and then raise it with Development as a bug, although I'm not sure they would accept it as such.»

UPD2
Финальный ответ от Oracle.
Мое предположение подтвердилось. Ну и надо учесть время подключения к EAS:
«I have been able to get an explanation as to why the rules will take longer to run when launched via the cmdlnlauncher: CmdLnLauncher has to connect to remote EAS server in order to launch the rule. For Planning, the rule engine runs within the same JVM and that's why it can launch the rule faster compared to CmdLnlauncher.»

CmdLineLauncher - Параллельное выполнение бизнес-правил

Перемещено из блога Oracle Hyperion Planning: заметки администратора с разрешения автора - Романа Удальцова

Возникла задача ускорить выполнение немаленькой (под 500 шагов) последовательности бизнес-правил. При внимательном рассмотрении выяснилось, что часть из них может выполняться параллельно, чем я и воспользовался с помощью стандартной утилиты Hyperion CmdLineLauncher (лежит в \Hyperion\products\Essbase\eas\console\bin\).

Результатом творческого поиска стала следующая конструкция:

/logs/*.log – логи последнего запуска, старые складываются в logs.rar
/prompts/*.prompts – временные файлы значений переменных
/sys/ – служебные файлы и скрипты, см. подробности далее
Описание последовательности.txt – специально подготовленный текстовый файл
Запуск бизнес-правил.bat – запуск выполнения последовательности

Процесс начинается с подготовки файла Описание последовательности.txt. По сути, это csv-файл следующего вида:

Application;Rule;DBName;Year;Scenario;Version;Entity;Parallel[0/1]
Прил1;Бизнес-правило 1;Plan1;FY11;Budget;Version 1;ЦФО 1;1
Прил1;Бизнес-правило 1;Plan1;FY11;Budget;Version 1;ЦФО 2;0
Прил1;Бизнес-правило 2;Plan1;FY11;Budget;Version 1;-;0

Некоторые пояснения:
– Полное название бизнес-правила включает в себя префикс в виде наименования приложения, оно было выделено в отдельный столбец просто для удобства подготовки файла, позже 1 и 2 столбцы склеиваются
– В столбцах перечисляются все возможные измерения, элементы которых могут встречаться во входных параметрах бизнес-правил
– В случае отсутствия значения (например, Прил1.Бизнес-правило 2 не требует Entity) ставится символ -
– Первая строка форматируется произвольно, т.к. она исключается из обработки
– Parallel можно читать следующим образом: Следующий шаг выполняется [1 – параллельно / 0 – последовательно] с текущим

Таким образом, в приведенном выше примере Прил1.Бизнес-правило 1 будет запущено на параллельное выполнение для ЦФО 1 и ЦФО 2, после чего выполнится Прил1.Бизнес-правило 2 (последовательно).

Далее "Описание последовательности.txt" скармливается скрипту "Запуск бизнес-правил.bat" (запуск из cmd вида "Запуск бизнес-правил.bat" "Описание последовательности.txt" или просто drag-n-drop):

@echo off
chcp 1251 >nul

:: Определение пути к папке HBRLauncher
set HBRPath=%~dp0
set HBRPath=%HBRPath:~0,-1%

:: Определение общих параметров
call "%HBRPath%\sys\Глобальные переменные.cmd" %HBRPath%

:: Архивация старых логов
%HBRPath%\sys\rar.exe m -ep1 -idp %HBRPath%\logs\logs.rar %HBRPath%\logs\*.log >nul

:: Удаление старых временных файлов значений переменных
if exist %HBRPath%\*.prompts del %HBRPath%\*.prompts

:: i:App – j:Rule – k:DBName – l:Year – m:Scenario – n:Version – o:Entity – p:Parallel[0/1] – q:Timeout

for /f "usebackq skip=1 eol=# tokens=1-9 delims=;" %%i in (%1) do (
echo [%%i][%%k][%%l][%%m][%%n][%%j][%%o]
if '%%p'=='1' start "" /d"%HBRPath%\sys\" /min %HBRPath%\sys\RunHBR.bat "%%i" "%%j" "%%k" "%%l" "%%m" "%%n" "%%o"
if '%%p'=='0' start "" /d"%HBRPath%\sys\" /min /w %HBRPath%\sys\RunHBR.bat "%%i" "%%j" "%%k" "%%l" "%%m" "%%n" "%%o"
timeout %%q >nul
)
Основные шаги понятны из комментариев, вот несколько уточнений:
– Строки входного файла можно комментировать символом, указанным в eol, в данном случае #
– Разделители меняются в delims, например, можно заменить ; на или любой другой на ваш вкус
– Между запусками установлен таймаут 4 секунды, если timeout у вас не работает (он входит в Windows Resource Kit), можно использовать конструкцию вида ping -n 5 127.0.0.1>nul (необходимое число секунд + 1)
– skip указывает на число игнорируемых верхних строк

Здесь используется довольно простой скрипт для назначения общих переменных \sys\Глобальные переменные.cmd:

:: Входные переменные: %HBRPath%
@echo off

:: Essbase Administration Server
set EAS=EASServerName

:: Логин
set User=admin

:: Активное приложение
set App=Essbase/EssbaseServerName/AppName/

:: Зашифрованный пароль – файл формируется отдельно (см. \Essbase\eas\console\bin\PasswordEncryption.bat)
set PwdFile=%HBRPath%\sys\%User%.password

Как видно из Запуск бизнес-правил.bat, он построчно обрабатывает входной текстовый файл и в зависимости от параметра Parallel запускает \sys\RunHBR.bat в указанными в строке входного файла параметрами в параллель (1) с промежутками в 4 секунды, либо перед запуском следующего бизнес-правила ожидает завершения текущего (0).

А вот сам \sys\RunHBR.bat, запускающий CmdLineLauncher:

:: 1:App - 2:Rule - 3:DBName - 4:Year - 5:Scenario - 6:Version - 7:Entity

:: Запись входных параметров бизнес-правила (с удалением кавычек)
set Rule=%~1.%~2
set DBName=%~3
set Year=%~4
set Scenario="%~5"
set Version="%~6"
set Entity="%~7"

:: Лог-файл
set Log="%HBRPath%\logs\%date:~6,4%%date:~3,2%%date:~0,2%.%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%.%~2.%~7.log"

:: Начало выполнения
echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%.%time:~9,2%] – Начало выполнения бизнес-правила "%Rule%" (%~7) 1>>%Log%
echo. 1>>%Log%

:: Путь к временному файлу значений входных переменных
set Prompts="%HBRPath%\prompts\%date:~6,4%%date:~3,2%%date:~0,2%.%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%.%~2.%~7.prompts"

:: Формирование файла значений переменных
echo %Rule% >>%Prompts%
echo ExecDB::%App%%DBName% >>%Prompts%

if not [%Year%]==[-] echo YearPrompt::"%Year%" >>%Prompts%
if not [%Entity%]==["-"] echo EntityPrompt::"%Entity%" >>%Prompts%
if not [%Version%]==["-"] echo VersionPrompt::"%Version%" >>%Prompts%
if not [%Scenario%]==["-"] echo ScenarioPrompt::"%Scenario%" >>%Prompts%

:: Запуск бизнес-правила
call %HBRPath%\sys\CmdLineLauncher -p:"%PwdFile%" -S%EAS% -U%User% -r"%Rule%" -f%Prompts% 1>>%Log% 2>&1

:: Удаление файла значений переменных
del %Prompts%

echo. 1>>%Log%
echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%.%time:~9,2%] – Окончание выполнения бизнес-правила "%Rule%" (%~7) 1>>%Log%

exit

07 мая 2011

Batch Sequence via MaxL

Занимаюсь старинной версией Hyperion Planning 3.5/Essbase 7.1
Приложение HBRules (для создания и управления бизнес-правилами; современный аналог - CalcManager) имеет ряд неприятных ограничений. В этот раз меня разозлил момент, связанный с тем, что невозможно создавать длинные последовательности (sequences). А именно такая задача и стояла, озаглавленная как «Полный пересчет модели».
Итак, один большой сиквенс сделать невозможно. Разбить на несколько – неудобно, потому что пересчеты возможно запускать только по ночам. Да, еще хочется иметь лог для оценки времени (для поиска узких мест и дальнейшей их оптимизации) и статуса завершения расчетов.

Итак, пришел к такому варианту:

1. Переводим (Export) нужные правила в Essbase, чтобы иметь возможность запускать их через MaxL. Минус очевиден: мы теряем связь правила, которое будет портировано в Essbase, и оригинального правила в HBRules, которое может измениться. Лучшее, что я придумал – создать таблицу соответствий имен правил HBRules – Essbase. При изменении правила в HBRules необходимо экспортировать его в Essbase-правило с тем же именем.

2. Готовим список правил Essbase, которые нужно запускать. Располагаем их в необходимом порядке запуска:
FC-1-01
FC-1-02
FC-2-01
Список сохраним в ascii-файлик RulesList.txt.

3. Пишем batch-скрипт, который будет генерить(!) MaxL-скрипт для полного расчета:
@echo off
echo =======================================================
echo Batch AutoCalc Essbase App Script by Antun Kulkov, 2011
echo See more at http://silw.blogspot.com
setlocal
rem ------ Settings -------
set year=%date:~6%
set month=%date:~3,2%
set day=%date:~0,2%
set hour=%time:~0,2%
if '%hour:~0,1%'==' ' set hour=0%time:~1,1%
set minute=%time:~3,2%
set tdate=%year%-%month%-%day%-%hour%%minute%
set STARTPATH=D:\Hyperion\AutoCalc
set ESSMSH=%ARBORPATH%\bin\essmsh.exe
set SERVER=essbase_server_name_or_ip
set USER=ess_admin
set PASSWORD=ess_admin_password
set APPNAME=app_name
set FILE_MAXL=%STARTPATH%\%APPNAME%_script.maxl
set FILE_LOG=%STARTPATH%\logs\AutoCalc_%APPNAME%_%tdate%.log
rem ------ End settings -------
echo Start: %tdate%

echo spool on to '%FILE_LOG%'; > %FILE_MAXL%
echo login '%USER%' '%PASSWORD%' on '%SERVER%'; >> %FILE_MAXL%
echo alter application '%APPNAME%' enable startup; >> %FILE_MAXL%
for /f %%i in (%STARTPATH%\RulesList.txt) do (
echo execute calculation '%APPNAME%'.'Plan1'.'%%i'; >> %FILE_MAXL%
)
echo logout; >> %FILE_MAXL%

echo MaxL script has been generated and run:
echo %FILE_MAXL%
echo See details of calc execution in:
echo %FILE_LOG%
%ESSMSH% %STARTPATH%\%APPNAME%_script.maxl
echo =======================================================
где STARTPATH – директория запуска данного скрипта,
SERVER, USER, PASSWORD – задают сервер Essbase и его пользователя с администраторскими правами,
APPNAME – имя приложения (скажу, что работал с одним кубом Plan1, поэтому прописал его жестко в скрипте). Не забываем брать в кавычки значения переменных, которые содержат пробелы!

Принцип работы:
В папке с этим batch-скриптом генрим MaxL-скрипт (APPNAME_script.maxl), получая имена правил из файла RulesList.txt. И выполняем этот MaxL-скрипт, на всякий случай запуская приложение в Essbase. Лог выполнения MaxL-скрипта пишется в APPNAME_AutoCalc_{дата-время}.log. Все прозрачно!

Замечание: Для правил, использующих переменные с вводом данных (например, предела ставки начисления ЕСН), необходимо установить необходимые значения как дефолтные!

4. Добавляем наш batch-скрипт в расписание, если нужно.

Enjoy!

UPD: Альтернативный (несколько более сложный, но более функциональный) вариант описан у Романа Удальцова здесь

11 марта 2011

Изменение режима обслуживания приложения Planning через batch-файл

Очень интересное и простое решение, которое можно использовать, например на время бэкапа или обновления метаданных (через ODI/batch).
В первом случае [бэкап] обычно используют MaxL скрипт, который принудительно прерывает операции в Essbase и производит выгрузку данных. При этом пользователь обычно может войти в приложение, но получит ошибку при открытии формы, поскольку Essbase находится в этот момент в режиме обслуживания. Не очень красиво, конечно. Да, и пользователь начнет писать гневные письма.
Во втором случае [обновления справочников/измерений в приложении Planning] желательно пользователей до завершения деплоя вообще не пускать в приложение.
Таким образом, очень удобно поставить в расписание перед бэкапом, обновлением и т.п. задачу перевода приложения в режим обслуживания с доступом только администраторам, а по окончании этих работ - обратно дать доступ пользователям.

Метод изменения режима обслуживания приложения Planning через batch-файл описан по этой ссылке.

19 февраля 2011

EPM 11.1.2 на Windows 7

Сошлись желание провести такой заманчивый тест и поднять дома окружение для проведения некоторых работ халтурку на дом взять: написать правила, построить отчеты.
Для работы нам пригодятся:
1. ПК с установленной Windows 7. В моем случае это русская 64-битная Профессиональная редакция (CPU: Intel Core 2 Quad Q8200 RAM: 4Gb DDR2 1066MHz).
2. Установленный AdminPack для Windows 7 для использования IIS (для EPMA) и отслеживания служб и прочих "серверных" рюшечек. Взять здесь.
3. Установленная СУБД. Достаточно редакции Express. Я выбрал MS SQL Server 2008 R2 Express 64bit.
4. Статья Тима Тоу Windows 7 / Essbase 11.1.1.3 Installation Tutorial
5. Дистрибутивы EPM System 11.1.2. Я взял те же, что и в этой статье.

Итак, по статье Тима:
- устанавливаем loopback сетевой адаптер.
- копируем из установленной на машине JRE папки (у меня c:\Java\jre6) все содержимое в папку [instaltoolpath]\jre\win32\1.6.0 . Если таковых нету - создаем их смело!
- и правим installTool.cmd по причине различий CMD_Shell серверных и десктопных ОСей, принудительно прописывая команду старта jar-инсталлера
[instaltoolpath]\jre\win32\1.6.0\bin\java.exe -Xmx1024M -Djava.library.path=%TMP% -DRELEASE_VERSION=11.1.2.0 -Djava.util.logging.config.class=oracle.core.ojdl.logging.LoggingConfiguration -Doracle.core.ojdl.logging.config.file=\installTool-logging.xml -DDATE_TIME=%DATE_TIME% -jar \installTool.jar %*
Запускаем файл installTool от имени Администратора и устанавливаем все по накатанной.

UPD: Если инсталлер запустился, то любые ошибки установки связаны либо с неверной (не в ту директорию, не от той версии архив) или неполной распаковкой дистрибутивов, либо с работой файервола/антивируса. У меня Comodo CIS после некоторого времени, не получая моего разрешения на действие компоненты установки, блокировал выполнение установки какого-то компонента. Это вызывало ошибки.

Конфигурируем аналогично описанному здесь через EPM Configurator, который запускаем от имени Администратора.

После завершения конфигурирования идем в реестр HKLM\SOFTWARE\Hyperion Solutions и устанавливаем значения -Xms128m / -Xmx512m везде, где найдем, и перезапускаем сервисы для лучшей их производительности на ограниченном объеме RAM.
Для грубой оценки верхнего предела (Xmx) можно считать так: объем оперативной памяти / (кол-во сервисов EPM + SQL + Oracle HTTP Server + 5). Здесь нужно пробовать каждый компонент, например Shared Services и EPMA любят побольше. Я же не запускаю BI сервисы (FinReporting, WebAnalysis и их фреймворк). Также можно не загружать CalcManager (для тех, кто как и я по старинке работают с business rules), Essbase Studio. А если у вас только classic Planning приложения, то и весь комплекс EPMA.
Для удобства использования:
- В сервисах (службах) для всех компонент EPM (начинаются со слова Hyperion) и Oracle Proccess manager выставляем свойства запуска "Вручную". Запускать можно через ярлыки в Пуске.
- Аналогичную операцию проводим для сервера БД. Но для его запуска настраиваем пару bat-файлов для запуска/остановки.
Пример запуска SQL Server:
@ECHO OFF
ECHO -------SQL Server Starting
net start "MSSQLSERVER"
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------SQL Server Browser Starting
net start "SQLBrowser"
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------SQL Server Agent Starting
net start "SQLSERVERAGENT"
waitfor NONEXISTINGSIGNAL /T 5
Пример остановки SQL Server:
@ECHO OFF
ECHO -------SQL Server Agent Stopping
net stop "SQLSERVERAGENT"
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------SQL Server Browser Stopping
net stop "SQLBrowser"
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------SQL Server Stopping
net stop "MSSQLSERVER"
waitfor NONEXISTINGSIGNAL /T 5
Кладем файлы, например в %hyperion_home%, а ярлычки кидаем на рабочий стол или в Пуск к EPM.
В моем случае не появились ярлыки на запуск EPM System. Кроме того, запуск сервисов через них занимает больше 10 минут. Напишем свой bat. Отрабатывает быстрее.
startEPM.bat
ECHO -------EPM 11.1.2 STARTING / Batch EPM full start script by Antun Kulkov, 2011
@ECHO OFF
ECHO -------Oracle Process Manager (ohsInstance)
net start "Oracle Process Manager (ohsInstance3193331783)"
waitfor NONEXISTINGSIGNAL /T 10
ECHO -------Oracle Process Manager (EPM_epmsystem1)
net start "opmn_EPM_epmsystem1"
waitfor NONEXISTINGSIGNAL /T 10
ECHO -------Oracle Process Manager (ConfigurationManager)
net start "Oraclec_oracle_middle~1_epmsys~1c_oracle_middleware_user_projects_epmsystem1ConfigurationManager"
waitfor NONEXISTINGSIGNAL /T 10
ECHO -------Hyperion RMI Registry
net start "Hyperion RMI Registry"
waitfor NONEXISTINGSIGNAL /T 10
ECHO -------Hyperion Foundation Services - Managed Server
net start HyS9FoundationServices
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Administration Services - Web Application
net start HyS9eas
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Integration Services
net start "Hyperion Integration Services"
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Provider Services - Web Application
net start HyS9aps
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Studio Service BPMS
net start "Hyperion Studio Service BPMS bpms1"
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion EPM Architect - Process Manager
net start HyS9BPMA_ProcessManager
waitfor NONEXISTINGSIGNAL /T 30
ECHO -------Hyperion EPMA Data Synchronizer - Web Application
net start HyS9EPMADataSynchronizer
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion EPMA Web Tier - Web Application
net start HyS9EPMAWebTier
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion CALC Manager - Web Application
net start HyS9CALC
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Planning - WebHyS9Planning Application
net start HyS9Planning
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Web Analysis - Web Application
net start HyS9WebAnalysis
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Reporting and Analysis Framework
net start HyS9RaFrameworkAgent
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Financial Reporting - Print Service
net start FRPrintService
waitfor NONEXISTINGSIGNAL /T 30
ECHO -------Hyperion Financial Reporting - Web Application
net start HyS9FRReports
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Reporting and Analysis Framework - Web Application
net start HyS9RaFramework
waitfor NONEXISTINGSIGNAL /T 5
ECHO ALL DONE!
waitfor NONEXISTINGSIGNAL /T 10
stopEPM.bat
ECHO -------EPM 11.1.2 STOPPING / Batch EPM full stop script by Antun Kulkov, 2011
@ECHO OFF
ECHO -------Hyperion Reporting and Analysis Framework - Web Application
net stop HyS9RaFramework
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Financial Reporting - Web Application
net stop HyS9FRReports
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Financial Reporting - Print Service
net stop FRPrintService
waitfor NONEXISTINGSIGNAL /T 30
ECHO -------Hyperion Reporting and Analysis Framework
net stop HyS9RaFrameworkAgent
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Web Analysis - Web Application
net stop HyS9WebAnalysis
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Planning - WebHyS9Planning Application
net stop HyS9Planning
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion CALC Manager - Web Application
net stop HyS9CALC
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion EPMA Web Tier - Web Application
net stop HyS9EPMAWebTier
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion EPMA Data Synchronizer - Web Application
net stop HyS9EPMADataSynchronizer
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion EPM Architect - Process Manager
net stop HyS9BPMA_ProcessManager
waitfor NONEXISTINGSIGNAL /T 30
ECHO -------Hyperion Studio Service BPMS
net stop "Hyperion Studio Service BPMS bpms1"
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Integration Services
net stop "Hyperion Integration Services"
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Provider Services - Web Application
net stop HyS9aps
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Administration Services - Web Application
net stop HyS9eas
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion Foundation Services - Managed Server
net stop HyS9FoundationServices
waitfor NONEXISTINGSIGNAL /T 5
ECHO -------Hyperion RMI Registry
net stop "Hyperion RMI Registry"
waitfor NONEXISTINGSIGNAL /T 10
ECHO -------Oracle Process Manager (ConfigurationManager)
net stop "Oraclec_oracle_middle~1_epmsys~1c_oracle_middleware_user_projects_epmsystem1ConfigurationManager"
waitfor NONEXISTINGSIGNAL /T 10
ECHO -------Oracle Process Manager (EPM_epmsystem1)
net stop "opmn_EPM_epmsystem1"
waitfor NONEXISTINGSIGNAL /T 10
ECHO -------Oracle Process Manager (ohsInstance)
net stop "Oracle Process Manager (ohsInstance3193331783)"
waitfor NONEXISTINGSIGNAL /T 10
ECHO ALL DONE!
waitfor NONEXISTINGSIGNAL /T 10

UPD: Вариант использования SC вместо NET (start|stop) хорошо описан здесь у Романа Удальцова

Порядок запуска после установки становится таким:
- Запускаем SQL Server - из нашего первого батничка;
- Запускаем Foundation Services (Oracle WebLogic 10) - есть ярлычок в Пуске, но в нашем случае нет необходимости;
- Запускаем EPM System - из второго нашего батничка.
Порядок остановки обратен.


Enjoy!

18 февраля 2011

Бэкап компонент EPM 11.1.2

Следуя рекомендациям Oracle, настроим бэкап следующего:
- Директории с конфигурациями продуктов EPM
%Hyperion_Home%\user_projects\epmsystem1\config
- Директорию WebLogic Domain
%Hyperion_Home%\user_projects\domains\EPMSystem
- Директорию контента LCM
%Hyperion_Home%\user_projects\epmsystem1\import_export
- Веток реестра с параметрами EPM
- Директории с настройками и данными приложений

Последний пункт обычно автоматизируют отдельно, о чем написано:
- Здесь про данные из баз приложений Essbase.
- Здесь про формы Planning.
- Некоторые дополнения напишу позже.
Поэтому в скрипте ниже эти моменты пропустим.

Итак, с целью максимальной автоматизации делаем следующее:
- Создаем папочку под бэкапы EPM. У меня это d:\BACKUP\EPM. Структура такова:
- Ложим туда такой bat-файл:

rem Batch 7zipped backup script by Antun Kulkov, 2011
@echo off
set year=%date:~6%
set month=%date:~3,2%
set day=%date:~0,2%
set hour=%time:~0,2%
if "%hour:~0,1%"==" " set hour=0%time:~1,1%
set minute=%time:~3,2%
set tdate=%year%-%month%-%day%-%hour%%minute%
set DOMAIN_HOME=C:\Hyperion\user_projects
set BACKUP_HOME=d:\BACKUP\EPM
set ZIP_HOME="c:\Program Files\7-Zip"
@echo on
rem Config Backup
%ZIP_HOME%\7za.exe a -t7z %BACKUP_HOME%\config\config-%tdate%.7z %DOMAIN_HOME%\epmsystem1\config -m0=BCJ -m1=LZMA:d=21 -mx=9 -ms -mmt > %BACKUP_HOME%\config\config-%tdate%.log

rem WebLogic Domain Dir Backup
rem call "%DOMAIN_HOME%\domains\EPMSystem\bin\stopWebLogic.cmd" %*
%ZIP_HOME%\7za.exe a -t7z %BACKUP_HOME%\weblogic_domain\wldomain-%tdate%.7z %DOMAIN_HOME%\domains\EPMSystem -m0=BCJ -m1=LZMA:d=21 -mx=9 -ms -mmt > %BACKUP_HOME%\weblogic_domain\wldomain-%tdate%.log
rem call "%DOMAIN_HOME%\domains\EPMSystem\bin\startWebLogic.cmd" %*

rem Lifecycle Management content Backup
%ZIP_HOME%\7za.exe a -t7z %BACKUP_HOME%\LCM_impexp\lcm-%tdate%.7z %DOMAIN_HOME%\epmsystem1\import_export -m0=BCJ -m1=LZMA:d=21 -mx=9 -ms -mmt > %BACKUP_HOME%\LCM_impexp\lcm-%tdate%.log

rem Registry Backup
set rkey_hklm="HKEY_LOCAL_MACHINE"
set rkey_osenv="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
DEL %BACKUP_HOME%\registry\*.reg
REG EXPORT %rkey_hklm% %BACKUP_HOME%\registry\HKLMreg-%tdate%.reg
REG EXPORT %rkey_osenv% %BACKUP_HOME%\registry\OSEnv-%tdate%.reg
%ZIP_HOME%\7za.exe a -t7z %BACKUP_HOME%\registry\reg-%tdate%.7z %BACKUP_HOME%\registry\*.reg -m0=BCJ -m1=LZMA:d=21 -mx=9 -ms -mmt > %BACKUP_HOME%\registry\reg-%tdate%.log
DEL %BACKUP_HOME%\registry\*.reg

rem Finished!

Все достаточно прозрачно:
- Сначала задаем нужные переменные для дат/времени и директорий DOMAIN_HOME (она = %Hyperion_Home%\user_projects\), BACKUP_HOME (собственно куда класть бэкапы) и ZIP_HOME (папка с архиватором; у меня 7-zip).
- Затем бэкапим то, что я описал в самом начале статьи.
- Отдельно про WebLogic Domain. Рекомендуют останавливать, но можно и так)) Поэтому я закомментил его остановку и старт. Вообще рекомендуют полную остановку EPM, но у меня разброс филиалов в 7 часовых поясов, что не позволяет выводить систему из рабочего состояния.
- Отдельно про реестр. Переменная rkey_hklm – это ветка реестра HKLM, где, в том числе, лежат параметры EPM. Здесь можно выбрать и конкретную ветку Hyperion Solutions, но я решил бэкапить все. А rkey_osenv – ветка с переменными окружения Windows. Порядок работы такой: выгружаем из реестра в два файла, бэкапим в архив и прибираемся, удаляя файлы выгрузок.

Ну, и добавляем наш волшебный файлик в Task Scheduler по расписанию. Enjoy!

09 июля 2009

Скрипты по правам

Если вдруг кому интересно, скрипт раздачи прав на доступ пользователя или группы ко всем формам папки(и подпапок).

declare
l_folder_name varchar2(100) := 'folder_name';
l_user_name varchar2(100) := 'user_or_group_name';
l_user_id number;
l_access_level number := 3; -- 1 - read access;
-- 3 - write access
begin
select object_id into l_user_id from hsp_object where object_name = l_user_name;
for i in (select object_id
from (select *
from hsp_object
start with object_name = l_folder_name
connect by prior object_id = parent_id)
where object_type = 7) loop -- 7 - forms
begin
insert into hsp_access_control (object_id, user_id, access_mode, flags) values (i.object_id, l_user_id, l_access_level, 0);
exception when dup_val_on_index then null;
end;
end loop;
exception when no_data_found then
raise_application_error(-20000, 'User or group '''||l_user_name||''' not found.');
end;