среда, 14 мая 2014 г.

Автоматизация: настраиваем бекап Oracle EssBase

Для резервного копирования применяется язык запросов maxl, похожий на SQL, но имеющий множество ограничений.
По-этому автоматизацию будем делать на Cygwin ;)


Подготовим конф-файл со списком приложений для резервного копирования backup_prepare.cfg, с его помощью будем готовить Maxl скрипт. Содержимое конф файла:
application1
application2
#application3 
#откомментированое приложение не бекапится


Код скрипта maxl prepare_max.sh, с его помощью подготавливаем Maxl скрипт, выполняющий бекап :
#!/bin/bash 
if [ "$1" = "" ];then
echo "You should provide config file!"
exit 0
fi
#сначала подготовим скрипт, для извлечения списка кубов
echo "set message level all;" > $temp_dir/prepare_back_conf.tmp
echo "spool on to '$temp_dir\\prepare_max.tmp';" >> $temp_dir/prepare_back_conf.tmp
echo "login $hyperion_login $hyperion_passwd on $hyperion_server;" >> $temp_dir/prepare_back_conf.tmp
grep -v "#" $1 |sed '/^$/d' |while read line ;do
    echo "display database on application $line;" >> $temp_dir/prepare_back_conf.tmp
done
echo "spool off;" >> $temp_dir/prepare_back_conf.tmp
#
# получаем имена кубов
LF=$temp_dir/prepare_max.tmp
$maxl $temp_dir/prepare_back_conf.tmp 
# создаем скрипт для резервного копирования
echo "spool on to 'backup_maxsh_$date_pref.txt';" > backup_conf.cfg
echo "set timestamp on;"  >> backup_conf.cfg
echo "login $hyperion_login $hyperion_passwd on $hyperion_server;" >> backup_conf.cfg
grep -v "#" $1| while read line ;do
    # останавливаем все запросы на приложении
    echo "alter system kill request on application $line;" >> backup_conf.cfg
    # добавляем задержку в 3сек для остановки запросов
    echo 'shell "sleep 3";'  >> backup_conf.cfg
    # останавливаем приложение
    echo "alter system unload application $line;" >> backup_conf.cfg
    cubes=`grep -wi "$line" $temp_dir/prepare_max.tmp | grep -v "MAXL" | awk {'print $2'}`
        for i in $cubes;do
            echo "alter database '$line'.'$i' force archive to file '"$backup_dir"\\"$line"_"$i".arc';" >> backup_conf.cfg
            echo "shell 'ls -la "$backup_dir"\\"$line"_"$i".arc || echo ERROR on "$backup_dir"\\"$line"_"$i".arc' ; " >> backup_conf.cfg
        done
done
echo "spool off;" >> backup_conf.cfg
# End Prepare



Основной скрипт резервного копирования:
#/bin/bash 

date_pref=`date +%y%m%d`
# подготавливаем maxl скрипт резервного копирования
. prepare_max.sh backup_prepare.cfg  2> $temp_dir/backup_err.log
# Запускаем скрипт для бекапа
$maxl `cygpath -w backup_conf.cfg`
# архивируем
7z.exe a -t7z -mx7 -mmt=64 -m0=lzma2 "$archive_dir\\essbase_"$date_pref".7z" -ssw $backup_dir\\*.arc

Если статья была вам полезна - кликните на баннер или кнопку Donate :)
Яндекс.Метрика

Популярные сообщения