http://www.in2hyperion.com/websites/in2hyperionblog/post/2013/09/23/Debunk-The-Myth-Always-Fix-On-Dense-Members.aspx
Блог посвящен большей частью информационным системам класса BPM/CPM. В основном - продуктам линейки Oracle (Hyperion) EPM System. Здесь описываются важнейшие моменты, интересные how-to, hints, tips & tricks.
Показаны сообщения с ярлыком example. Показать все сообщения
Показаны сообщения с ярлыком example. Показать все сообщения
26 сентября 2013
08 июля 2013
Ускорение выгрузки данных из Essbase
Интересные сценарии выгрузки данных из Essbase с помощью MDX или Report Scripts http://camerons-blog-for-essbase-hackers.blogspot.ru/2013/07/what-makes-essbase-data-extraction-fast.html
Метки:
ASO,
BSO,
EAS,
Essbase,
Essbase 11,
example,
FAQ,
integration,
link,
MAXL,
MDX,
Optimization,
RS,
script,
study
20 июня 2013
Новые способы интеграции Essbase
Женя Расюк подготовил пару содержательных сообщений по теме:
Метки:
Essbase 11,
example,
FAQ,
integration,
link,
XML
17 мая 2013
How-to Setup Essbase Clustering on Unix
На CEAL появилась инструкция по установке и настройке кластера Essbase 11.1.2.2 на Unix.
Матрица в оф.доках описывает возможные виды и ограничения отказоустойчивых или с распределением загрузки кластеров Essbase.
Оригинальный пост
Матрица в оф.доках описывает возможные виды и ограничения отказоустойчивых или с распределением загрузки кластеров Essbase.
Оригинальный пост
Метки:
Essbase 11,
Exalytics,
example,
FAQ,
Installation,
link,
Oracle HTTP Server,
script,
services starting and stopping,
study,
Unix
15 мая 2013
Мелкие хинты по кастомизации интерфейса EPM 11.1.2.x
Мелкие хинты по кастомизации интерфейса EPM (11.1.2.0-11.1.2.2):
14 мая 2013
13 мая 2013
Установка Oracle EPM 11.1.2.2 на Linux сервер в графическом режиме через SSH соединение c Windows клиента
Честно скажу, несколько раз ставил EPM на Linux. Интересно, но долго.
В этой статье расписано как можно установить EPM на Линуксовый сервер с отрисовкой X-ов на win-клиенте.
В этой статье расписано как можно установить EPM на Линуксовый сервер с отрисовкой X-ов на win-клиенте.
05 мая 2013
Восстановление БД Essbase в резервном ДЦ, не оставливая primary БД
Леонид Борчук описал в своем блоге пример восстановления БД Essbase в резервном ДЦ без остановки primary БД.
Метки:
Essbase,
Essbase 11,
example,
FAQ,
link,
MAXL,
script,
Shared Services
14 января 2013
24 декабря 2012
Удаление проблемных приложений HFM, управляемых EPMA
При попытке удаления приложения HFM, управляемого EPMA, возникает сообщение The Application cannot be deleted, the state of the application is MigratePending. Оно возникает в случаях, когда приложение было создано дублированием (duplicate) в EPMA, но попытка развернуть (deploy) не была завершена.
Что делать:
Что делать:
- Остановить службы EPMA и сделать бэкап БД EPMA
- В таблице DS_Application в БД EPMA найти и запомнить значение i_Application_ID (например, 57)
- В таблице OR_Object по полю C_OBJECT_ID найти строку с «1_(i_Application_ID)» (например, 1_57)
- Скопировать содержимое поля X_OBJECT_DATA в текстовый файл (это бэкап)
- Удалить часть содержимого между тэагми PendingDeployment…./PendingDeployment, включая сами тэги
- Изменить статус на 2 (если приложение было хотя бы раз задеплилось успешно) или на 1 (если ни разу)
- Записать данные в таблице
- Запустить службы EPMA
09 ноября 2012
19 октября 2012
Essbase on RAM Disk
Ни раз задавался вопросом, как можно улучшить производительность Essbase. В том числе, с его использованием на RAM Disk. Идея проста - создать виртуальный диск в памяти достаточного объема, благо планочки нынче не дороги, и закинуть на этот диск файлы кубов Essbase.
Один из наших соратников - Макс Кудряшов - поделился тестами такой реализации на промышленной базе:
Один из наших соратников - Макс Кудряшов - поделился тестами такой реализации на промышленной базе:
Cравнили производительность RAM-диска и обычной дисковой полки. Результаты очень положительные: пересчет модели упал с 4.5 - 6 часов (в зависимости от нагрузки) до 2 часов ровно (причем буквально с точностью до пары секунд каждый раз). Даже учитывая, что практически весь пересчет идет в один поток, количество потребляемых IOPS доходило до 10K (но в основном 2-5K). Так что совсем не удивительно, что обычная полка не справляется - она в пике выдавала только под 400.
Есть конечно расчеты, которые слабо зависят от диска (в основном с использованием CREATENONMISSINGBLK ON), но агрегации и копирования данных просто летают.

Приложен график (в центре провал - было не оптимально написано правило).
Софт для создания RAM Disk - Primo Ramdisk
Параметры куба Essbase: BSO, Buffered I/O Access Mode, RLE Data Compression
Объем данных в кубе - 70 ГБ, индексный файл - 3ГБ
Метки:
BSO,
EPM 11,
Essbase,
Essbase 11,
example,
Optimization,
RAM Disk
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
Метки:
CMD,
example,
FAQ,
Hyperion,
link,
Optimization,
script,
services starting and stopping
04 июля 2012
KScope 2012 - презентации
В Сети начали появляться в свободном доступе презентации c Oracle Development Tools User Group Conference (ODTUG) Kscope Conference 2012. Их главное достоинство в том, что за 5-10 минут изучения презентации можно получить опыт, накопленный коллегами по цеху годами: http://www.in2hyperion.com/websites/in2hyperionblog/post/2012/07/02/KScope-2012-Wrap-Up.aspx
UPD 2012-07-26: http://www.emergenow.com/KSCOPE-Twelve-Presentations (John A. Booth; 2 презентации по Essbase)
UPD 2012-08-29: Еще несколько презентаций:
Метки:
example,
FAQ,
Optimization,
oracle,
Oracle Events
23 апреля 2012
Настройка сервера и клиента для работы со SmartView
В ходе
эксплуатации системы во время работы, SmartView (над Planning/Essbase)
может "обрадовать" пользователя сообщениями вроде:
- The request timed out. Contact your administrator to increase netRetrycount and netRetryInterval
- Request grid size is more than allowed limit
Чтобы избежать первой проблемы, связанной с сетевыми параметрами, необходимо
корректно настроить как серверную, так и клиентскую стороны системы:
- Прописываем сетевые параметры на сервере в essbase.cfg (или через EAS Console):
- В соответствии с рекомендацией Oracle "The Combined Parameters of NETDELAY and NETRETRYCOUNT" [ID 877432.1] произведение параметров NETDELAY и NETRETRYCOUNT не должно превышать 10 минут. На этот лимит и будем всё настраивать. Пример расчета:
1000 for NETDELAY
600 for NETRETRYCOUNT
1000 x 600 = 600000
Divide by 1000 = 600
Divide by 60 = 10 minutes
- Перезапускаем сервер Essbase (службу OPMN), чтобы изменения вступили в силу.
- Готовим изменения реестра операционных систем на
клиентских станциях (на базе Windows XP; Windows 7), используя параметры:
- KeepAliveTimeout (интервал проверки активности HTTP-соединений) и ServerInfoTimeout, причем второй нам понадобится, т.к. значение первого превысит 2 минуты; значение второго параметра идентично значению первого
- ReceiveTimeout (ограничение на время возврата данных от сервера)
- В соответствии с рекомендацией Oracle "Smart View Error: The request timed out. Contact your administrator to increase netRetrycount and netRetryInterval" [ID 744559.1] и "FDM Timeout on Import When Using Internet Explorer 7" [ID 1246294.1] получаем файл (*.reg) для внесения изменений в реестр на клиентской станции:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"ReceiveTimeout"=dword:000927c0
"ServerInfoTimeout"=dword:000927c0
"KeepAliveTimeout"=dword:000927c0
где 000927c0 - это 600000 мсек в HEX-представлении
- Этот файл необходимо применить на клиентской станции и перезагрузить ее, чтобы изменения вступили в силу.
Для решения
второй проблемы, связанной с ограничением количества запрашиваемых из SmartView у сервера ячеек данных, необходимо настроить только серверную часть:
- Прописываем параметр на сервере в essbase.cfg (или через EAS Console):
MAX_REQUEST_GRID_SIZE EssbaseAppName 5000000
- В соответствии с рекомендацией Oracle "When Executing MDX Query Network Error Occurs: "[10054] Cannot Send Data" [ID 1071407.1] необходимо также настроить сетевые параметры на сервере. Это мы уже сделали, борясь с первой проблемой :)
- Перезапускаем сервер Essbase (службу OPMN), чтобы изменения вступили в силу.
Метки:
access,
EPM 11,
Essbase 11,
Essbase 9,
example,
FAQ,
Optimization,
Smart View,
tcp/ip,
windows server
16 апреля 2012
Списки пользователей в Excel
Как и обещал, начинаю выкладывать некоторые "секреты" подготовки материалов к аудиту моей теперешней промышленной системы (FDM, HFM, Planning 11.1.2.00).
Для начала аудиторы запросили список существующих и удаленных пользователей системы. Используя вот эту подсказу вендора (структура и описание реляционных БД продуктов EPM), накидал 2! вьюхи в СУБД (MS SQL Server), в которых отразил все необходимые данные. К сожалению, FDM/HFM слабо интегрированы с HSS, поэтому вьюх и оказалось две.
Отчет по доступу к подсистеме бюджетирования на базе Planning/Essbase был получен таким образом из БД HSS:
Отчет по доступу к подсистеме подготовки МСФО отчетности на базе FDM/HFM был получен из БД HSS + HSV_ProductionHFMAppName_SECCACCESS:
Таким образом, подключившись к созданным вьюшкам из Excel, свободно получаем данные для формирования отчетов по безопасности.
Отмечу, что пользователей мы декативируем, а не удаляем, сохраняя таким образом целостность аудита. По полю ACCOUNTSTATUS устанавливаем фильтр: где 1 - активный пользователь; 2 - "мертвая душенка".
Для начала аудиторы запросили список существующих и удаленных пользователей системы. Используя вот эту подсказу вендора (структура и описание реляционных БД продуктов 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 - имя БД HSS, HSV_ProductionHFMAppName_SECCLASSES - имя таблицы с классами безопасности FDM/HFM.
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
Таким образом, подключившись к созданным вьюшкам из Excel, свободно получаем данные для формирования отчетов по безопасности.
Отмечу, что пользователей мы декативируем, а не удаляем, сохраняя таким образом целостность аудита. По полю ACCOUNTSTATUS устанавливаем фильтр: где 1 - активный пользователь; 2 - "мертвая душенка".
06 апреля 2012
MaxL по расписанию
Часто бывает необходимым поставить выполнение MaxL скрпита в расписание. Причем этот скрипт создан в EAS Console и хранится на сервере. Я решил эту задачу созданием batch файла, который ставится в расписание Windows Server:
@echo offВходящим параметром является имя MaxL скрпита без расширения.
rem - Input parameter is a name of MaxL script (only name w/out extension)
setlocalВся информация сохранится в логе, имя файла которого задается переменной EXECLOG.
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
SET EXECLOG=AutoStartMaxL-%1.logПоскольку в консоли вход и подключение производить не нужно, а внешним скриптом - необходимо, добавляем строки входа (login) и завершения работы (logout и exit).
SET RunMaxl=AutoStartMaxL.mxl
SET CurrDir=%CD%
echo Started: %date% @ %time% > %CurrDir%\%EXECLOG%
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Добавляем в расписание (Task Scheduler) задачу на выполнение нашего bat-файла с параметром - именем MaxL скрпита.
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%
Метки:
CMD,
EAS,
Essbase,
Essbase 11,
Essbase 9,
example,
Hyperion,
MAXL,
script,
windows server
26 марта 2012
Скользкие формы Planning
Встала передо мной задача: построить формы в Planning таким образом, чтобы на форме был текущий месяц (Period Dim) и пару месяцев назад. Естественно, каждый раз перестраивать ручками формы лень, а есть ситуации, когда нужно "заглянуть" на 1-2 мес в прошлый год. Вот и получаются у нас "скользящие" формы.
К сожалению, сами формы данных, в отличие от отчетов FinReporting, построить с использование ссылающихся функций (вроде Prior) нельзя. Ответ нашелся на форуме: https://forums.oracle.com/forums/thread.jspa?messageID=9454665 Да, и так понятно, что это единственный вариант - через переменные подстановки в Essbase. Прекрасно, приступим к реализации:
К сожалению, сами формы данных, в отличие от отчетов FinReporting, построить с использование ссылающихся функций (вроде Prior) нельзя. Ответ нашелся на форуме: https://forums.oracle.com/forums/thread.jspa?messageID=9454665 Да, и так понятно, что это единственный вариант - через переменные подстановки в Essbase. Прекрасно, приступим к реализации:
- Определяемся с набором переменных. Для каждого "специфического" периода может быть нужен свой год. Например, в моем случае: в январе текущего понадобятся еще ноябрь и декабрь прошлого года, а в феврале - только декабрь прошлого года и январь нынешнего:
- CurrYearFor - текущий год
- CurrPerFor - текущий период для Прогнозирования
- Prev1PerFormFor - предыдущий период
- Prev1YearFormFor - год для предыдущего периода (Prev1PerFormFor)
- Prev2PerFormFor - пред-пердыдущий период
- Prev2YearFormFor - год для пред-предыдущего периода (Prev2PerFormFor)
- Создаем эти переменные подстановки в кубе приложения 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';
- Настраиваем формы данных на использование этих переменных. Здесь придется отказаться от выбора года и периода в срезе, потому что придется эти измерения "зашивать" в таблицы данных.
- Готовим скрипт (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% - Автоматизируем запуск этого файла, вставляя задачу в Task Scheduler. Сначала я готовил батничек для ручного режима с менюшкой для ответственного пользователя, но пришел к выводу, что могу автоматизировать процесс такого обновления переменных: я знаю, что пользователи полезут в систему к 1-му числу, значит числа 25 могу смело обновлять переменные.
23 января 2012
Оптимизация БД EPMA для EPM 11.1.x
Со временем сильно увеличивается БД EPM Architect, что негативно сказывается на скорости работы этого компонента. А в некоторых случаях, веб-сервер не успевает получить ответ в установленный таймаут, и возникает проблема, когда приложение (наример, Planning) может остаться в подвешенном состоянии.
Ниже представлено решение этой проблемы для EPM 11.1.3+
Ниже представлено решение этой проблемы для EPM 11.1.3+
- Остановить службу EPMA Process Manager
- Сделать полный бэкап БД EPM Architect
- Запустить службу EPMA Process Manager
- Запустить утилиту database_cleanup_utility.exe, которая находится
либо здесь для 11.1.1.x: \Hyperion\products\Foundation\BPMA\AppServer\DimensionServer\ServerEngine\bin\
либо здесь для 11.1.2.x: \Oracle\Middleware\EPMSystem11R1\products\Foundation\BPMA\AppServer\DimensionServer\ServerEngine\bin - Использовать администраторский логин/пароль EPM
- Запустить очистку для записей старше 45-60 дней
- Либо почистить БД EPM Architect скриптом (пример для Oracle DB 10g+):
SELECT TO_CHAR(SYSDATE,'Dy DD-Mon-YYYY HH24:MI:SS') AS "Current Time 1" FROM DUAL;
CREATE TABLE tmp_DS_MaxTransactions NOLOGGING AS
SELECT a.i_application_id, MAX(i_transaction_id) AS i_transaction_id
FROM DS_Transaction_History a
JOIN DS_Application b
ON a.i_library_id = b.i_library_id
AND a.i_application_id = b.i_application_id
JOIN DS_Library c
ON a.i_library_id = c.i_library_id
WHERE c.b_master = 1
AND a.i_application_id IS NOT NULL
AND (b.i_first_deploy_transaction_id IS NOT NULL OR b.b_master = 1)
AND i_transaction_id >= COALESCE(b.i_last_deployed_transaction_id, b.i_first_deploy_transaction_id, 0)
AND e_transaction_action = 'OrderChildren'
GROUP BY a.i_application_id;
COMMIT;
SELECT TO_CHAR(SYSDATE,'Dy DD-Mon-YYYY HH24:MI:SS') AS "Current Time 2" FROM DUAL;
-- Keep newest OrderChildren row for each application. Logging resumes for this table
-- after it is created and populated by this statement.
CREATE TABLE tmp_DS_Transaction_History NOLOGGING AS
SELECT a.* FROM DS_Transaction_History a
JOIN tmp_DS_MaxTransactions b
ON a.i_transaction_id = b.i_transaction_id;
COMMIT;
SELECT TO_CHAR(SYSDATE,'Dy DD-Mon-YYYY HH24:MI:SS') AS "Current Time 3" FROM DUAL;
DROP TABLE tmp_DS_MaxTransactions;
SELECT TO_CHAR(SYSDATE,'Dy DD-Mon-YYYY HH24:MI:SS') AS "Current Time 4" FROM DUAL;
ALTER TABLE tmp_DS_Transaction_History NOLOGGING;
SELECT TO_CHAR(SYSDATE,'Dy DD-Mon-YYYY HH24:MI:SS') AS "Current Time 5" FROM DUAL;
-- Add back all non-OrderChildren rows.
INSERT INTO tmp_DS_Transaction_History
SELECT * FROM DS_Transaction_History
WHERE e_transaction_action != 'OrderChildren';
COMMIT;
SELECT TO_CHAR(SYSDATE,'Dy DD-Mon-YYYY HH24:MI:SS') AS "Current Time 6" FROM DUAL;
DROP TABLE DS_Transaction_History;
SELECT TO_CHAR(SYSDATE,'Dy DD-Mon-YYYY HH24:MI:SS') AS "Current Time 7" FROM DUAL;
RENAME tmp_DS_Transaction_History TO DS_Transaction_History;
SELECT TO_CHAR(SYSDATE,'Dy DD-Mon-YYYY HH24:MI:SS') AS "Current Time 8" FROM DUAL;
ALTER TABLE DS_Transaction_History
ADD CONSTRAINT PK_TranHist PRIMARY KEY (i_transaction_id, i_detail_id);
SELECT TO_CHAR(SYSDATE,'Dy DD-Mon-YYYY HH24:MI:SS') AS "Current Time 9" FROM DUAL;
CREATE INDEX IdxTranHist01 ON DS_Transaction_History(i_library_id, i_dimension_id, i_member_id);
SELECT TO_CHAR(SYSDATE,'Dy DD-Mon-YYYY HH24:MI:SS') AS "Current Time 10" FROM DUAL;
CREATE INDEX IdxTranHist02 ON DS_Transaction_History(i_library_id, d_created);
SELECT TO_CHAR(SYSDATE,'Dy DD-Mon-YYYY HH24:MI:SS') AS "Current Time 11" FROM DUAL;
ALTER TABLE DS_Transaction_History LOGGING;
SELECT TO_CHAR(SYSDATE,'Dy DD-Mon-YYYY HH24:MI:SS') AS "Current Time 12" FROM DUAL;
Метки:
EPM 11,
EPMA,
example,
OEPM,
Optimization,
oracle,
windows server
Подписаться на:
Сообщения (Atom)
