Что нового

[Автоматизация] IBM DB2 Server 9.7 fp6: автоматическое восстановление из архивной копии БД

Neldezheil

B like Bee
Сообщения
27
Репутация
3
AutoIt: 3.3.6.1
Версия: 1.0

Категория: Администрирование, Автоматизация, Вспомогательные функции, Графика, GDI+, Строки, Данные, База данных, Интеракция, Интернет, Кодирование, Шифрование, Командная строка, Математика, Мышь, Клавиатура, Приколы, Процессы, Сеть, Система, Реестр, Окна и диалоги, Файловая система, Хуки, Элементы GUI, Разное

Описание:
Итак, товарищи, по работе столкнулся со следующей задачей:
имеется 2 сервера БД под управлением ОС семейства MS Windows Server.
Требуется созданную ранее копию БД с основного сервера восстанавливать на резервном сервере с отставанием в сутки. Архивная копия БД создается, сжимается и копируется на целевой сервер отдельным пакетным файлом, выполняемым на основном сервере (если потребуется, могу приложить)
Для этого был разработан данный скрипт, работающий в несколько этапов:

[list type=decimal]
[*]Обнаружение файла архивной копии БД в указанном каталоге.
[*]Разархивирование найденной архивной копии БД.
[*]Восстановление указанной копии БД.
[*]Удаление временных файлов после выполнения скрипта.
[/list]


Обращаю Ваше внимание на то, что для восстановления БД из копии IBM DB2 требует указывать таймштамп копии.

После компиляции скрипта запуск необходимо осуществлять в следующем виде:
Код:
restore.exe <путь к 7z.exe архиватора 7-Zip> <путь к db2cmd.exe> <путь к рабочему каталогу с архивной копией БД> <алиас БД> <Логин на БД> <пароль на БД>
Пример:
Код:
restore.exe "c:\Program Files\7-Zip\7z.exe" c:\ibm\sqllib\bin\db2cmd.exe c:\Copy\ ROS db2admin db2admin
Код:
Код:
#include <array.au3>
#include <file.au3>
Global $PackedPath, $UnpackedPath, $TimeStamp, $ArchFileList, $UnpackedName, $Restore, $CmdFile
DirRemove($CmdLine[3]&'unpacked',1)
DirCreate($CmdLine[3]&'unpacked')
$ArchFileList=_FileListToArray($CmdLine[3],'*.7z',1)
If $ArchFileList[0]=1 Then
	$PackedPath=$CmdLine[3]&$ArchFileList[1]
	ShellExecuteWait($CmdLine[1],' e '& $PackedPath & ' -o'&$CmdLine[3]&'unpacked\','','',@SW_HIDE)
	$Zip=ProcessExists("7z.exe")
	ProcessClose($Zip)
	FileDelete($CmdLine[3]&$ArchFileList[1])
EndIf
$UnpackedName=_FileListToArray($CmdLine[3]&'unpacked','*.001',1)
$TimeStamp=StringSplit($UnpackedName[1],'.')
$Restore='db2 RESTORE DATABASE ROS FROM '&$CmdLine[3]&'unpacked\ TAKEN AT '&$TimeStamp[6]&' WITH 2 BUFFERS BUFFER 1024 PARALLELISM 1 WITHOUT PROMPTING'
FileCopy(@ScriptFullPath,@ScriptDir&'\restore.cmd',1)
$CmdFile=FileOpen(@ScriptDir&'\restore.cmd',2)
FileWriteLine($CmdFile,'db2 CONNECT TO '&$CmdLine[4]&' user '&$CmdLine[5]&' USING '&$CmdLine[6])
FileWriteLine($CmdFile,'db2 QUIESCE DATABASE IMMEDIATE FORCE CONNECTIONS')
FileWriteLine($CmdFile,'db2 CONNECT RESET')
FileWriteLine($CmdFile,$Restore)
FileWriteLine($CmdFile,'db2 CONNECT TO '&$CmdLine[4]&' user '&$CmdLine[5]&' USING '&$CmdLine[6])
FileWriteLine($CmdFile,'db2 UNQUIESCE DATABASE')
FileWriteLine($CmdFile,'db2 CONNECT RESET')
FileWriteLine($CmdFile,'exit')
FileClose($CmdFile)
ShellExecuteWait($CmdLine[2],@ScriptDir&'\restore.cmd','','',@SW_HIDE)
Exit

Автор(ы):Neldezheil
 
Верх