Показать сообщение отдельно
Старый 15.06.2009, 10:25   #14
Merlin Cori
Новичок
 
Пол:Мужской
Регистрация: 04.01.2007
Сообщений: 9
Репутация: 10
По умолчанию Re: Батник для бэкапа

Ckpyt,
ну не знаю, чего ты там наваял на полторы тысячи строк, но почти все подобные задачи решаются перловым скриптом на полторы сотни строк, 2/3 которых печать в лог-файл

Вот конкретный рабочий скрипт, который выполняет все нужные действия. Стопит оракловую базу, стопит сервисы, архивирует RAR все нужное содержимое, а потом все обратно стартут. Вешаешь все или на шедулер по команде at или ставишь nncron. Все что надо, изредка посматривать в логи. Те папки которые нужно архивировать указываютсяв файле backup.lst


Код:
#!/Perl/bin/perl
#
# Скрипт создания offline архивной копии базы Oracle Informatica
#
# Author: Merlin Cori	
#
# merlin.cori@gmail.com
#
#    Ключи запуска:
# - отсутствуют
#


use Mail::Sender;
use Cwd;
use Time::localtime;
use Win32API::File 0.08 qw( :ALL );
#
#--------------------------------Переменные --------------------

$archdir = "d:\\backup\\"; # Рабочий каталог
$arch_file = "archive_"; # Файл backupa
$ext=".rar";
$logfile = "oracle_backup.log"; # Лог файл 
$command = "c:\\arc\\rar a -rr10p -k -m1 -mt4 -r -v3900m";   # командная строка запуска программы архивации
$startbat="startdb.bat";
$stopbat="stopdb.bat";
$dir_list=" \@backup.lst";
$mail_to = "merlin.cori@gmail.com";
$test_run=0;
#---------------------------------------------------------------------

print("\t- = - Informatica Oracle base backup script - = -\n\t\tVersion 0.3a build 15.06.2009\n\n");

    $workdir = "c:\\oracle"; # Рабочий каталог
($day, $month, $year, $hour, $min, $sec)=now();

$file_name=$arch_file.$day."_".$month."_".$year;



open (LOGFILE_HANDLE,">>$logfile") or die ("Cannot open log file $logfile");
print LOGFILE_HANDLE "Started ";
print LOGFILE_HANDLE "$day.$month.$year $hour:$min:$sec";
print LOGFILE_HANDLE "\n";


($day, $month, $year, $hour, $min, $sec)=now();
print LOGFILE_HANDLE "$day.$month.$year - $hour:$min:$sec  Stopping services\n";
print LOGFILE_HANDLE "Stopping Informatica PCISBW\n";
system("net stop \"Informatica PCISBW\"");

($day, $month, $year, $hour, $min, $sec)=now();
print LOGFILE_HANDLE "Stopping Informatica Server\n";
system("net stop Informatica");

($day, $month, $year, $hour, $min, $sec)=now();
print LOGFILE_HANDLE "Stopping Informatica Repository Server\n";
system("net stop \"Informatica Repository Server\"");

($day, $month, $year, $hour, $min, $sec)=now();
print LOGFILE_HANDLE "Stopping Gene6 FTP Server\n";
system("net stop \"Gene6 FTP Server\"");

open(BATFILE_HANDLE,">$stopbat") or die ("Cannot create temp bat file");
print BATFILE_HANDLE "set nls_lang=russian_cis.ru8pc866\n";
print BATFILE_HANDLE "set ORACLE_SID=XXXX\n";
print BATFILE_HANDLE "echo set echo on                  > %0.tmp\n";
print BATFILE_HANDLE "echo connect sys/".$passwd."\@XXXX as sysdba; >> %0.tmp\n";
print BATFILE_HANDLE "echo shutdown immediate;         >> %0.tmp\n";
print BATFILE_HANDLE "echo exit;                       >> %0.tmp\n";
print BATFILE_HANDLE "C:\\oracle\\XXXX\\ora92\\bin\\sqlplus /nolog @%0.tmp\n";
print BATFILE_HANDLE "del %0.tmp\n";
print BATFILE_HANDLE "exit\n";
close BATFILE_HANDLE;



system("stopdb.bat");

($day, $month, $year, $hour, $min, $sec)=now();
print LOGFILE_HANDLE "Stopping OracleXXXXTNSListener\n";
system("net stop OracleXXXXTNSListener");

unlink $stopbat;

($day, $month, $year, $hour, $min, $sec)=now();
print LOGFILE_HANDLE "Stopping OracleServiceXXXX\n";
system("net stop OracleServiceXXXX");

# Архивируем содержимое папки Oracle
$archive=$archdir.$file_name.$dir_list;

system "$command $archive.$dir_list";
$source=$archdir.$file_name.$ext;
$dest=$destdir.$file_name.$ext;

($day, $month, $year, $hour, $min, $sec)=now();

print LOGFILE_HANDLE "$day.$month.$year - $hour:$min:$sec  Starting services\n";

print LOGFILE_HANDLE "Starting OracleServiceXXXX\n";
system("net start OracleServiceXXXX");
print LOGFILE_HANDLE "Starting OracleXXXXTNSListener\n";
system("net start OracleXXXXTNSListener");
print LOGFILE_HANDLE "Run start.bat\n";
open(BATFILE_HANDLE,">$startbat") or die ("Cannot create temp bat file");
print BATFILE_HANDLE "echo set echo on                  > %0.tmp\n";
print BATFILE_HANDLE "echo connect sys/".$passwd."\@XXXX as sysdba; >> %0.tmp\n";
print BATFILE_HANDLE "echo startup force;              >> %0.tmp\n";
print BATFILE_HANDLE "echo exit;                       >> %0.tmp\n";
print BATFILE_HANDLE "C:\\oracle\\XXXX\\ora92\\bin\\sqlplus /nolog @%0.tmp\n";
print BATFILE_HANDLE "del %0.tmp\n";
close BATFILE_HANDLE;

system("startdb.bat");
unlink $startbat;
print LOGFILE_HANDLE "Starting Informatica Repository Server\n";
system("net start \"Informatica Repository Server\"");
print LOGFILE_HANDLE "Starting Informatica Server\n";
system("net start Informatica");
sleep 40;
print LOGFILE_HANDLE "Starting Informatica PCISBW\n";
system("net start \"Informatica PCISBW\"");

print LOGFILE_HANDLE "Starting Gene6 FTP Server\n";
system("net start \"Gene6 FTP Server\"");
}

($day, $month, $year, $hour, $min, $sec)=now();

print LOGFILE_HANDLE "Backup successful\n";
print LOGFILE_HANDLE "Stopped $day.$month.$year - $hour:$min:$sec \n\n";
print LOGFILE_HANDLE "-" x 40;
print LOGFILE_HANDLE "\n\n";

close LOGFILE_HANDLE;

send_message("Completed","Success XXXX",$mail_to);

#------------------------------- Begin send message -------------------------------------
sub send_message
{
  my($message) = @_[0];  
  my($subj) = @_[1];
  my($adress)= @_[2];
  $sender = new Mail::Sender {
                smtp => 'smtp.xxxxxx.ru',
                from => 'backup@xxxxxx.ru',
                on_errors => undef,
        } or die "Can't create the Mail::Sender object: $Mail::Sender::Error\n";
  $sender->OpenMultipart({to => $adress, subject => $subj});
  $sender->Body({encoding => 'Base64', charset => 'windows-1251'});
  $sender->SendEnc($message);
  $sender->Close;
}
#------------------------------- End send message ---------------------------------------
#------------------------------- Begin current date and time ----------------------------------
sub now()
{
$day = localtime->mday();
$month = localtime->mon()+1;
$year=localtime->year() + 1900;

#final_archiving ($day, $month, $year, $archdir);

$hour=localtime->hour();
$min=localtime->min();
$sec=localtime->sec();

return $day, $month, $year, $hour, $min, $sec;
#------------------------------- End current date and time ------------------------------------
}

Последний раз редактировалось Merlin Cori; 15.06.2009 в 10:51..
Merlin Cori вне форума
 
Ответить с цитированием Вверх
Сказали спасибо:
 
Время генерации страницы 0.08418 секунды с 9 запросами