Essbase Maxl hacks

Несколько слов о приемах программирования, которые приближают использование Maxl к «полноценному» языку программирования (скрипту). Конечно, можно использовать mod_perl или mod_phyton, и это оправдано в ряде случаев, но умение делать необычные вещи с помощью базового функционала делают проект проще (дешевле) в обслуживании.

Итак , что же в Maxl языке добавляет гибкости в работе :

  1. Использование переменных системного окружения в качестве нативных переменных Maxl.
  2. Использование переменных Maxl для параметризации calc скрипта в выражении “execute calculation
  3. Встраивание в код одного Maxl скрипта, файл с кодом другого Maxl.
  4. Вызов внешних программ.
  5. Использование конструкции IfError .


Например,

  1. я всегда создаю Bash скрипт по разбору и публикации параметров, что бы без проблем их использовать в Maxl

  1. Смесь Maxl + Bash создает универсальный скрипт резервного копирования

    msh $vWorkDir/ess/_login.mxl ;

    iferror ‘ExitError’;

    set vDbFolder = $ARBORPATH/app/$vCurrApp/$vDb ;

    shell mkdir $vBackupFolder ;
    /* Unload Level 0 data */
    alter database $vCurrBackAppDB enable cache_pinning;
    alter application $vCurrApp enable startup ;
    alter application $vCurrApp enable commands ;
    alter application $vCurrApp enable updates ;
    alter application $vCurrApp enable connects ;
    alter application $vCurrApp enable security ;

    alter system load application $vCurrApp ;
    alter application $vCurrApp load database $vDb ;

    export database $vCurrBackAppDB level0 data to data_file “$vBackupFolder/$vDb.level0.txt” ;

    /* ShutDown Applications */
    alter application $vCurrApp disable startup ;
    alter application $vCurrApp disable commands ;
    alter application $vCurrApp disable updates ;
    alter application $vCurrApp disable connects ;
    alter application $vCurrApp disable security ;

    alter database $vCurrBackAppDB unlock all objects ;
    alter system logout session on application $vDb force ;

    alter application $vCurrApp unload database $vDb ;
    alter system unload application $vCurrApp ;
    drop lock on system all ;

    /* copy applications binary files */
    shell cp $vDbFolder/\*.otl $vBackupFolder/ ;
    shell cp $vDbFolder/\*.rul $vBackupFolder/ ;
    shell cp $vDbFolder/\*.txt $vBackupFolder/ ;
    shell cp $vDbFolder/\*.csc $vBackupFolder/ ;
    shell cp $vDbFolder/\*.db $vBackupFolder/ ;
    shell cp $vDbFolder/\*.ind $vBackupFolder/ ;
    shell cp $vDbFolder/\*.pag $vBackupFolder/ ;
    shell cp $vDbFolder/\*.esm $vBackupFolder/ ;
    shell cp $vDbFolder/\*.tct $vBackupFolder/ ;

    shell mkdir $vBackupFolder/scripts ;
    shell cp $vWorkDir/\* $vBackupFolder/scripts/ ;

    shell mkdir $vBackupFolder/scripts/ess ;
    shell cp $vWorkDir/ess/\* $vBackupFolder/scripts/ess ;

    /* Deleted tempory files */
    shell rm -f $vDbFolder/\*.otn ;
    shell rm -f $vDbFolder/\*.inn ;
    shell rm -f $vDbFolder/\*.esn ;
    shell rm -f $vDbFolder/\*.pan ;
    shell rm -f $vDbFolder/\*.tcu ;
    shell rm -f $vDbFolder/\*.esn ;
    shell rm -f $vDbFolder/\*.pan ;
    shell rm -f $vDbFolder/\*.inn ;
    shell rm -f $vDbFolder/\*.tcu ;
    shell rm -f $vDbFolder/\*.otn ;

    define label ‘ExitError’;

    /* Start applications */

    alter database $vCurrBackAppDB enable cache_pinning;
    alter application $vCurrApp enable startup;
    alter application $vCurrApp enable commands;
    alter application $vCurrApp enable updates;
    alter application $vCurrApp enable connects;
    alter application $vCurrApp enable security;

    alter system load application $vCurrApp ;
    alter application $vCurrApp load database $vDb ;

    alter database $vCurrBackAppDB force restructure ;

    /* Create Archives */

    shell tar –remove-files -cz -f $vBackupFolder.tar.gz $vRelativeBackupFolder ;
    shell rm -r $vBackupFolder ;
    shell scp $vBackupFolder.tar.gz oracle@hypdb:~/backup & ;