Блог посвящен большей частью информационным системам класса BPM/CPM. В основном - продуктам линейки Oracle (Hyperion) EPM System. Здесь описываются важнейшие моменты, интересные how-to, hints, tips & tricks.
Показаны сообщения с ярлыком MAXL. Показать все сообщения
Показаны сообщения с ярлыком MAXL. Показать все сообщения
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
05 мая 2013
Восстановление БД Essbase в резервном ДЦ, не оставливая primary БД
Леонид Борчук описал в своем блоге пример восстановления БД Essbase в резервном ДЦ без остановки primary БД.
Метки:
Essbase,
Essbase 11,
example,
FAQ,
link,
MAXL,
script,
Shared Services
20 апреля 2013
MaxL Python Module
Essbase.py is a Python module that provides access
to Oracle Essbase multi-dimensional databases using MaxL for Python
programs. It is similar in function and usage to the Oracle Essbase Perl
module Essbase.pm.
The Essbase Python module interfaces with Oracle Essbase using a Python ctypes module wrapper for the primary MaxL dll (essmaxl.dll or essmaxlu.dll). The ctypes module is standard in Python 2.5+. Versions of the wrapper are included for Essbase 6.5, for Essbase 7-11.1.2.1, and for Essbase 11.1.2.2.
The version 7 wrapper is operational with Essbase 9.3.1 and 11.1.2.1.
The version 11.1.2.2 wrapper is for Essbase 11.1.2.2 (and perhaps above).
Product's homepage
The Essbase Python module interfaces with Oracle Essbase using a Python ctypes module wrapper for the primary MaxL dll (essmaxl.dll or essmaxlu.dll). The ctypes module is standard in Python 2.5+. Versions of the wrapper are included for Essbase 6.5, for Essbase 7-11.1.2.1, and for Essbase 11.1.2.2.
The version 7 wrapper is operational with Essbase 9.3.1 and 11.1.2.1.
The version 11.1.2.2 wrapper is for Essbase 11.1.2.2 (and perhaps above).
Product's homepage
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.
Причинами могут быть:
- Какой-то сторонний процесс пытается получить доступ с блокировкой к файлам базы данных (куба) Essbase. Например, антивирус или ПО резервного копирования
- Служба Essbase была остановлена во время извлечения данных или выполнения расчетов. Иными словами, некорректная остановка или "падение" базы данных
- Проблемы с дисковой подсистемой сервера. Например, ошибки в работе RAID-массивов, bad blocks на накопителях информации
- Закончилось место на диске
- Сильная фрагментация диска
- Сильная фрагментация базы данных (куба)
- Использование Direct I/O
- Слишком маленький кэш данных куба
- Подобные ошибки встречались в 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. В идеале - выгрузить данные из куба, очистить его и загрузить данные обратно.
Иногда после выполнения скрипта необходимо выполнить реструктуризацию куба, чтобы indeх файл был перестроен с учетом исправления IBH. В идеале - выгрузить данные из куба, очистить его и загрузить данные обратно.
UPD: Кроме того, имеет смысл иметь опцию в essbase.cfg:
Наш соратник Евгений Расюк добавляет, и я его поддерживаю:
IBHFIXTHRESHOLD AppName Cube 10Эта команда говорит Essbase, что нужно проверять наличие IBH на кубе (это происходит и без указания опции в явном виде) и, в случае превышения порога 10% (пример), базу данных следует корректно остановить. Это сделано, с целью показать, что критическая масса IBH накоплена, и нужно что-то делать. Однако, в EPM 11 за работоспособность Essbase отвечает сервис OPMN, который регулярно пингует службу OLAP-сервера и может заставить запуститься приложение заново.
Наш соратник Евгений Расюк добавляет, и я его поддерживаю:
- Всегда нужно иметь бэкап с выгруженными данными в текст. Это хоть и долго, на гораздо надежнее простого копирования файлов куба - "это видимость бэкапа" - в таком случае все проблемы (например, IBH) будут также занесены в бэкап
- Нужно стараться проектировать модели таким образом, чтобы исключить кастом расчеты на агрегируемых уровнях
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 могу смело обновлять переменные.
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, которые нужно запускать. Располагаем их в необходимом порядке запуска:
3. Пишем batch-скрипт, который будет генерить(!) MaxL-скрипт для полного расчета:
SERVER, USER, PASSWORD – задают сервер Essbase и его пользователя с администраторскими правами,
APPNAME – имя приложения (скажу, что работал с одним кубом Plan1, поэтому прописал его жестко в скрипте). Не забываем брать в кавычки значения переменных, которые содержат пробелы!
Принцип работы:
В папке с этим batch-скриптом генрим MaxL-скрипт (APPNAME_script.maxl), получая имена правил из файла RulesList.txt. И выполняем этот MaxL-скрипт, на всякий случай запуская приложение в Essbase. Лог выполнения MaxL-скрипта пишется в APPNAME_AutoCalc_{дата-время}.log. Все прозрачно!
Замечание: Для правил, использующих переменные с вводом данных (например, предела ставки начисления ЕСН), необходимо установить необходимые значения как дефолтные!
4. Добавляем наш batch-скрипт в расписание, если нужно.
Enjoy!
UPD: Альтернативный (несколько более сложный, но более функциональный) вариант описан у Романа Удальцова здесь
Приложение HBRules (для создания и управления бизнес-правилами; современный аналог - CalcManager) имеет ряд неприятных ограничений. В этот раз меня разозлил момент, связанный с тем, что невозможно создавать длинные последовательности (sequences). А именно такая задача и стояла, озаглавленная как «Полный пересчет модели».
Итак, один большой сиквенс сделать невозможно. Разбить на несколько – неудобно, потому что пересчеты возможно запускать только по ночам. Да, еще хочется иметь лог для оценки времени (для поиска узких мест и дальнейшей их оптимизации) и статуса завершения расчетов.
Итак, пришел к такому варианту:
1. Переводим (Export) нужные правила в Essbase, чтобы иметь возможность запускать их через MaxL. Минус очевиден: мы теряем связь правила, которое будет портировано в Essbase, и оригинального правила в HBRules, которое может измениться. Лучшее, что я придумал – создать таблицу соответствий имен правил HBRules – Essbase. При изменении правила в HBRules необходимо экспортировать его в Essbase-правило с тем же именем.
2. Готовим список правил Essbase, которые нужно запускать. Располагаем их в необходимом порядке запуска:
FC-1-01Список сохраним в ascii-файлик RulesList.txt.
FC-1-02
FC-2-01
3. Пишем batch-скрипт, который будет генерить(!) MaxL-скрипт для полного расчета:
@echo offгде STARTPATH – директория запуска данного скрипта,
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 =======================================================
SERVER, USER, PASSWORD – задают сервер Essbase и его пользователя с администраторскими правами,
APPNAME – имя приложения (скажу, что работал с одним кубом Plan1, поэтому прописал его жестко в скрипте). Не забываем брать в кавычки значения переменных, которые содержат пробелы!
Принцип работы:
В папке с этим batch-скриптом генрим MaxL-скрипт (APPNAME_script.maxl), получая имена правил из файла RulesList.txt. И выполняем этот MaxL-скрипт, на всякий случай запуская приложение в Essbase. Лог выполнения MaxL-скрипта пишется в APPNAME_AutoCalc_{дата-время}.log. Все прозрачно!
Замечание: Для правил, использующих переменные с вводом данных (например, предела ставки начисления ЕСН), необходимо установить необходимые значения как дефолтные!
4. Добавляем наш batch-скрипт в расписание, если нужно.
Enjoy!
UPD: Альтернативный (несколько более сложный, но более функциональный) вариант описан у Романа Удальцова здесь
05 июля 2008
Фрагментация и производительность
Сейчас ощутил на собственной шкуре, насколько сильно фрагментация BSO-куба влияет на производительность.
Расчет, который до зепуска реструктуризации куба выполнялся полтора часа теперь выполняется меньше 9 минут, это просто потрясающе!!
Так что мой вам совет - после больших загрузок данных обязательно делайте
Расчет, который до зепуска реструктуризации куба выполнялся полтора часа теперь выполняется меньше 9 минут, это просто потрясающе!!
Так что мой вам совет - после больших загрузок данных обязательно делайте
alter database appl_name.db_name force restructure;
24 июня 2008
Backup
А как же без того, чтобы потерять данные?:-)
Как и во всех проектах, где я принимал участие, бекапы начинали делаться только тогда, когда один-два раза данные исчезают. Вот и сейчас 5 гигов кануло:-) Но поводов для уныния особо нет - на то она и опытная эксплуатация. Главное, что родился скрипт на MAXL:
P.S. Логично, в принципе, заменить XCOPY на gzip - время работы скрипта не сильно увеличивается, а вот бекапы занимают раз в 20 меньше места.
Как и во всех проектах, где я принимал участие, бекапы начинали делаться только тогда, когда один-два раза данные исчезают. Вот и сейчас 5 гигов кануло:-) Но поводов для уныния особо нет - на то она и опытная эксплуатация. Главное, что родился скрипт на MAXL:
login your_login your_password on your_essbase_host;Особая благодарность Максиму Кудряшову за проделанную работу.
set timestamp on;
alter application $1 disable commands;
alter system kill request on application $1;
alter system logout session on application $1;
alter database $1.Plan1 unlock all objects;
alter database $1.Plan2 unlock all objects;
drop lock on application $1;
alter system kill request on application $1;
alter database $1.Plan1 begin archive to file "tmp1.txt";
alter database $1.Plan2 begin archive to file "tmp2.txt";
shell XCOPY D:\\Hyperion\\AnalyticServices\\app\\$1 E:\\Essbase_Backups\\$1_%date:~0%_%time:~0,2%.%time:~3,2% /e /c /i /h /k /y;
alter database $1.Plan1 end archive;
alter database $1.Plan2 end archive;
alter application $1 enable commands;
logout;
exit;
P.S. Логично, в принципе, заменить XCOPY на gzip - время работы скрипта не сильно увеличивается, а вот бекапы занимают раз в 20 меньше места.
Подписаться на:
Сообщения (Atom)
