В моем случае Oracle EPM 11 развернут на четырех серверах, условно назовем их server1..server4, в такой конфигурации:
- server1: Essbase Server
- server2: MS SQL Server
- server3: Foundation, Provider services, Planning, Administration services
- server4: Workspace, Reporting and Analysis, Financial Management
На каждом из четырех серверов создана следующая единая структура хранения файлов, необходимых для резервного копирования:
backup-cold\ – папка, содержащая сделанные вручную так называемые «холодные» (полные) резервные копии
backup-current\ – папка, содержащая актуальную резервную копию
backup-history\ – папка, содержащая прошлые резервные копии (не старше недели)
backup-temp\ – временная папка, существующая только в процессе создания резервной копии
logs\ – папка, содержащая логи резервного копирования
scripts\ – папка, содержащая служебные скрипты (rar.exe, postie.exe) и скрипты, непосредственно выполняющие резервное копирование
start-backup.bat – скрипт запуска резервного копирования
Общая схема выполнения резервного копирования
На каждом из серверов средствами стандартного Windows Task Scheduler каждую ночь запускается скрипт start-backup.bat, выполняющий следующие действия:
1. Перенос старых логов в архив logs\log-history.rar
2. Запуск скрипта scripts\backup-serverX.cmd (backup-serverN.msh для server):
2.1. Очистка папки backup-history от резервных копий старше недели
2.2. Перенос актуальной резервной копии из папки backup-current в папку backup-history
2.3. Создание новой резервной копии во временной папке backup-temp
2.4. Архивация резервной копии и перемещение её в папку backup-current
3. Сохранение логов выполнения резервного копирования в папку logs
Ближе к утру производится автоматическая запись содержимого папок backup-current на магнитную ленту.
Файлы start-backup.bat выглядят следующим образом:
@echo off
set BackupPath=...
set DateStamp=%date:~6,4%%date:~3,2%%date:~0,2%
%BackupPath%\scripts\rar.exe m -ep1 -idp %BackupPath%\logs\log-history.rar %BackupPath%\logs\*.log
%BackupPath%\scripts\backup-serverX.cmd %BackupPath% %DateStamp% >> %Backup-Path%\logs\%DateStamp%.batch.log
Для сервера server1, на котором развернут Essbase, исполняемый скрипт написан на MaxL, поэтому последняя команда выглядит так:
%EssbaseClientPath%\bin\startMaxL.cmd %BackupPath%\scripts\backup-server1.msh %AppName% %BackupPath% %EssbaseServerPath% >> %BackupPath%\logs\%date:~6,4%%date:~3,2%%date:~0,2%.batch.log
Из служебных скриптов ещё используется такой, для отправки уведомлений по почте:
send-email.cmd
chcp 1251
%BackupPath%\scripts\postie.exe -host:smtp -from:essbase@company.ru -to:admin@company.ru -s:%1 -msg:%2 -charset:"windows-1251"
Postie – утилита рассылки почты из командной строки, аналог BLAT.
И ещё пригодится приложение forfiles из Windows 2000 Resource Kit Tools для определения возраста файлов.
Дальше поехали, собственно, исполняемые скрипты. Сначала скрипт на server1 с Essbase, который выполняет стандартный archive to file и копирует всякие нужные файлы:
backup-server1.msh
spool stderr on to $2\\logs\\.essmsh.err ;
shell @chcp 1251 ;
shell echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Начало работы скрипта ;
shell echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Очистка архива... ;
shell forfiles /p $2\\backup-history /d -8 /c '"cmd /c del @file"' ;
shell echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Перенос последнего бекапа в архив... ;
shell move /y $2\\backup-current\\*.rar $2\\backup-history ;
shell echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Создание временных директорий... ;
shell md $2\\backup-temp\\bin ;
shell md $2\\backup-temp\\app\\$1\\Plan1 ;
shell md $2\\backup-temp\\app\\$1\\Plan2 ;
shell md $2\\backup-temp\\app\\$1\\Plan3 ;
shell echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Копирование служебных файлов... ;
shell copy $3\\bin\\essbase.sec $2\\backup-temp\\bin ;
shell copy $3\\bin\\essbase.bak* $2\\backup-temp\\bin ;
shell copy $3\\bin\\essbase*.cfg $2\\backup-temp\\bin ;
shell copy $3\\app\\$1\\$1.* $2\\backup-temp\\app\\$1 ;
shell echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Копирование файлов приложений... ;
shell copy $3\\app\\$1\\Plan1\\*.otl $2\\backup-temp\\app\\$1\\Plan1 ;
shell copy $3\\app\\$1\\Plan1\\*.csc $2\\backup-temp\\app\\$1\\Plan1 ;
shell copy $3\\app\\$1\\Plan2\\*.otl $2\\backup-temp\\app\\$1\\Plan2 ;
shell copy $3\\app\\$1\\Plan2\\*.csc $2\\backup-temp\\app\\$1\\Plan2 ;
shell copy $3\\app\\$1\\Plan3\\*.otl $2\\backup-temp\\app\\$1\\Plan3 ;
shell copy $3\\app\\$1\\Plan3\\*.csc $2\\backup-temp\\app\\$1\\Plan3 ;
login usr pwd on server1;
shell echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Выгрузка базы Plan1... ;
alter database $1.Plan1 force archive to file "$2\\backup-temp\\app\\$1\\Plan1.arc" ;
iferror "Error" ;
shell echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Выгрузка базы Plan2... ;
alter database $1.Plan2 force archive to file "$2\\backup-temp\\app\\$1\\Plan2.arc" ;
iferror "Error" ;
shell echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Выгрузка базы Plan3... ;
alter database $1.Plan3 force archive to file "$2\\backup-temp\\app\\$1\\Plan3.arc" ;
iferror "Error" ;
goto "Ok" ;
define label "Error" ;
shell $2\\scripts\\send-email.cmd '"Ошибка архивации Essbase App DB" "В процессе архивации возникла ошибка. Подробности – в логе \\\\server1\\C$\\BACKUP\\logs\\.essmsh.err"' ;
define label "Ok" ;
shell echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Сжатие резервной копии... ;
shell $2\\scripts\\rar.exe m -r -ep1 -idp $2\\backup-current\\%date:~6,4%%date:~3,2%%date:~0,2%.server1.rar $2\\backup-temp\\ ;
logout ;
shell rd $2\\backup-temp ;
shell echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Готово! ;
spool off;
exit;
Теперь server2 с MS SQL. Здесь два файла, один из которых – sql-скрипт для экспорта баз.
backup-server2.cmd
@echo off
chcp 1251
:: %1 BackupPath
:: %2 DateStamp
set SqlcmdPath=C:\Program Files\Microsoft SQL Server\90\Tools\Binn
echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Начало работы скрипта
echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Очистка архива...
forfiles /p %1\backup-history /d -8 /c "cmd /c del @file"
echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Перенос последнего бекапа в архив...
move /y %1\backup-current\*.rar %1\backup-history && echo.
md %1\backup-temp
echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Создание резервных копий БД...
"%SqlcmdPath%\sqlcmd.exe" -S server2 -U usr -P pwd -i %1\scripts\backup-server2.sql -o %1\logs\%2.mssql.log
echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Сжатие резервных копий...
%1\scripts\rar.exe m -r -ep1 -idp %1\backup-current\%2.server2.rar %1\backup-temp\
rd %1\backup-temp
echo. && echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Готово!
backup-server2.sql
BACKUP DATABASE [HS] TO DISK = N'C:\BACKUP\backup-temp\HS.bak' WITH NOFORMAT, NOINIT, NAME = N'HS_FullDatabaseBackup', SKIP, NOREWIND, NOUNLOAD
GO
BACKUP DATABASE [HS_HSS] TO DISK = N'C:\BACKUP\backup-temp\HS_HSS.bak' WITH NOFORMAT, NOINIT, NAME = N'HS_HSS_FullDatabaseBackup', SKIP, NOREWIND, NOUNLOAD
GO
BACKUP DATABASE [ODI_MASTER] TO DISK = N'C:\BACKUP\backup-temp\ODI_MASTER.bak' WITH NOFORMAT, NOINIT, NAME = N'ODI_MASTER_FullDatabaseBackup', SKIP, NOREWIND, NOUNLOAD
GO
BACKUP DATABASE [ODI_WORK] TO DISK = N'C:\BACKUP\backup-temp\ODI_WORK.bak' WITH NOFORMAT, NOINIT, NAME = N'ODI_WORK_FullDatabaseBackup', SKIP, NOREWIND, NOUNLOAD
GO
BACKUP DATABASE [APP] TO DISK = N'C:\BACKUP\backup-temp\APP.bak' WITH NOFORMAT, NOINIT, NAME = N'APP_FullDatabaseBackup', SKIP, NOREWIND, NOUNLOAD
GO
Далее server3:
backup-server3.cmd
@echo off
chcp 1251
:: %1 BackupPath
:: %2 DateStamp
set HssPath=C:\Hyperion\products\Foundation\server
set LcmPath=C:\Hyperion\common\utilities\LCM\9.5.0.0
set PlanningPath=C:\Hyperion\products\Planning
echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Начало работы скрипта && echo.
echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Очистка архива...
forfiles /p %1\backup-history /d -8 /c "cmd /c del @file"
echo. && echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Перенос последнего бекапа в архив... && echo.
move /y %1\backup-current\*.rar %1\backup-history
md %1\backup-temp\hss
md %1\backup-temp\lcm
md %1\backup-temp\planning\lib\
md %1\backup-temp\planning\config\
echo. && echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Резервное копирование OpenLDAP... && echo.
call %HssPath%\scripts\backup.bat %1\backup-temp\hss
echo. && echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Резервное копирование метаданных Planning APP... && echo.
call %LcmPath%\bin\Utility.bat %1\scripts\lcm\planning-app.xml
echo. && echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Резервное копирование метаданных Shared Services... && echo.
call %LcmPath%\bin\Utility.bat %1\scripts\lcm\shared-services.xml
echo. && echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Резервное копирование файлов .properties... && echo.
xcopy %PlanningPath%\lib\*.properties %1\backup-temp\planning\lib\ /Y /C /I /E
xcopy %PlanningPath%\config\*.properties %1\backup-temp\planning\config\ /Y /C /I /E
echo. && echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Сжатие резервных копий...
%1\scripts\rar.exe m -r -ep1 -idp %1\backup-current\%2.server3.rar %1\backup-temp\
echo. && echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Копирование логов LCM Backup Utility... && echo.
copy %LcmPath%\logs\*%date:~6,4%_%date:~3,2%_%date:~0,2%*_0.log %1\logs\
rd %1\backup-temp
echo. && echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Готово!
Здесь надо остановиться поподробней. Метаданные Shared Services и приложения Planning выгружаются из Lifecycle Management через xml-описания экспорта, подробней о подготовке которых можно прочитать в Shared Services Lifecycle Management Guide.
Если вкратце, то делаются они так:
1. Открываем LCM
2. В дереве слева выбираем нужный компонент
3. В окне справа отмечаем необходимые для экспорта артефакты и жмём Define Migration
4. Оставляем во всех фильтрах *
5. Задаём полный путь к файлу экспорта (или только название файла, который будет размещен в папку \Hyperion\common\import_export\username@directory )
6. Жмём Save Migration Definition
Ну и наконец последний server4.
backup-server4.cmd
@echo off
chcp 1251
:: %1 BackupPath
:: %2 DateStamp
set HyperionPath=C:\Hyperion
echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Начало работы скрипта && echo.
echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Очистка архива...
forfiles /p %1\backup-history /d -8 /c "cmd /c del @file"
echo. && echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Перенос последнего бекапа в архив... && echo.
move /y %1\backup-current\*.rar %1\backup-history
:: md %1\backup-temp\logs\
md %1\backup-temp\common\workspacert\9.5.0.0\wsearch\
md %1\backup-temp\products\Foundation\workspace\data\
md %1\backup-temp\deployments\WebLogic9\servers\Workspace\data\
md %1\backup-temp\deployments\WebLogic9\servers\Workspace\logs\
md %1\backup-temp\deployments\WebLogic9\servers\WebAnalysis\data\
md %1\backup-temp\deployments\WebLogic9\servers\WebAnalysis\logs\
md %1\backup-temp\deployments\WebLogic9\servers\FinancialReporting\data\
md %1\backup-temp\deployments\WebLogic9\servers\FinancialReporting\logs\
echo. && echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Начало резервного копирования... && echo.
:: xcopy %HyperionPath%\logs\* %1\backup-temp\logs\ /Y /C /I /E
xcopy %HyperionPath%\common\workspacert\9.5.0.0\wsearch\* %1\backup-temp\common\workspacert\9.5.0.0\wsearch\ /Y /C /I /E
xcopy %HyperionPath%\products\Foundation\workspace\data\* %1\backup-temp\products\Foundation\workspace\data\ /Y /C /I /E
xcopy %HyperionPath%\deployments\WebLogic9\servers\Workspace\data\* %1\backup-temp\deployments\WebLogic9\servers\Workspace\data\ /Y /C /I /E
xcopy %HyperionPath%\deployments\WebLogic9\servers\Workspace\logs\* %1\backup-temp\deployments\WebLogic9\servers\Workspace\logs\ /Y /C /I /E
xcopy %HyperionPath%\deployments\WebLogic9\servers\WebAnalysis\data\* %1\backup-temp\deployments\WebLogic9\servers\WebAnalysis\data\ /Y /C /I /E
xcopy %HyperionPath%\deployments\WebLogic9\servers\WebAnalysis\logs\* %1\backup-temp\deployments\WebLogic9\servers\WebAnalysis\logs\ /Y /C /I /E
xcopy %HyperionPath%\deployments\WebLogic9\servers\FinancialReporting\data\* %1\backup-temp\deployments\WebLogic9\servers\FinancialReporting\data\ /Y /C /I /E
xcopy %HyperionPath%\deployments\WebLogic9\servers\FinancialReporting\logs\* %1\backup-temp\deployments\WebLogic9\servers\FinancialReporting\logs\ /Y /C /I /E
echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Сжатие резервной копии...
%1\scripts\rar.exe m -r -ep1 -idp %1\backup-current\%2.server4.rar %1\backup-temp\
rd %1\backup-temp
echo. && echo [%date:~0,2%.%date:~3,2%.%date:~6,4% %time:~0,2%:%time:~3,2%:%time:~6,2%] - Готово!
Вот и всё. Подробности смотрите в Backup and Recovery Guide.
Напоследок замечу, что для консистентности компонентов вся эта красота должна выполняться одновременно на всех серверах.
А о восстановлении из резервной копии вы узнаете в следующих сериях...
Следите за обновлениями!
Добрый День.
ОтветитьУдалитьПробую делать backup по Вашей статье. У меня при вызове startMaxL.cmd вылетает ошибка:
Error initializing localization module.
Не подскажите в чем дело?
Добрый день, я не занимался этим уже более двух лет) Лучшего, чем поискать решения здесь – http://goo.gl/aszma – я сейчас посоветовать не могу.
ОтветитьУдалить