Many many years ago on the one of the intern I have created a small tool to create reports about backups of Oracle and File System in company using HP Data Protector. Below I put a printscreen of output file :
![]() |
| HP Data Protector Report |
And the final script code to create HP Data Protector reports :
use Date::Calc;
use Spreadsheet::WriteExcel;
use Spreadsheet::WriteExcel::Utility;
sub help_syntax {
print "\nHelp Syntax :\n\n";
print "Backuped FileSystems and Oracle (default) -> perl script_name.pl\n";
print "Backuped FileSystems and Oracle in .xls format -> perl script_name.pl --xls\n";
print "Backuped FileSystems -> perl script_name.pl --FS\n";
print "Backuped FileSystems in format .xls -> perl script_name.pl --FS --xls\n";
print "Backuped Oracle -> perl script_name.pl --Oracle\n";
print "Backuped Oracle in format .xls -> perl script_name.pl --Oracle --xls\n\n";
}
$boolean_only_FS=0;
$boolean_only_Oracle=0;
$boolean_only_xls=0;
if ( scalar(@ARGV) > 2 )
{
print "Numer of arguments is incorrect (max 2)\n";
&help_syntax;
exit;
}
my $workbook;
my $worksheet;
my ($x,$y)=(0,0);
my $glowny_licznik=0;
sub xls_function {
$workbook = Spreadsheet::WriteExcel->new('output.xls');
$worksheet = $workbook->add_worksheet('Backups');
$format = $workbook->add_format();
$format->set_bold();
$format->set_align('center');
$format->set_fg_color('grey');
$format->set_size(12);
$format->set_color('black');
$worksheet->set_column(0,0,20);
$worksheet->set_column(1,1,30);
$worksheet->set_column(2,2,7);
$worksheet->set_column(3,3,40);
$worksheet->set_column(4,4,13);
$worksheet->set_column(5,5,15);
$worksheet->set_column(6,6,18);
$worksheet->write(0,0,"Session",$format);
$worksheet->write(0,1,"Server",$format);
$worksheet->write(0,2,"Type",$format);
$worksheet->write(0,3,"Backuped filesystems",$format);
$worksheet->write(0,4,"Time start",$format);
$worksheet->write(0,5,"Duration",$format);
$worksheet->write(0,6,"Data GB",$format);
}
@lista_argumentow;
foreach (@ARGV) {
push(@lista_argumentow,$_);
}
if ( @lista_argumentow[0] eq "--help" || @lista_argumentow[0] eq "-help" || @lista_argumentow[0] eq "/h" || @lista_argumentow[0] eq "help" )
{
&help_syntax;
exit;
}
elsif ( @lista_argumentow[0] eq "--xls" and @lista_argumentow[1] eq "" )
{
$boolean_only_xls=1;
$boolean_only_FS=1;
$boolean_only_Oracle=1;
&xls_function;
}
elsif ( @lista_argumentow[0] eq "--FS" and @lista_argumentow[1] eq "--xls" )
{
$boolean_only_xls=1;
$boolean_only_FS=1;
&xls_function;
}
elsif ( @lista_argumentow[0] eq "--Oracle" and @lista_argumentow[1] eq "--xls" )
{
$boolean_only_xls=1;
$boolean_only_Oracle=1;
&xls_function;
}
elsif ( @lista_argumentow[0] eq "--FS" and @lista_argumentow[1] eq "" )
{
$boolean_only_FS=1;
}
elsif ( @lista_argumentow[0] eq "--Oracle" and @lista_argumentow[1] eq "" )
{
$boolean_only_Oracle=1;
}
elsif ( scalar(@ARGV) eq 0 )
{
$boolean_only_Oracle=1;
$boolean_only_FS=1;
}
else
{
&help_syntax;
exit;
}
###################################################################################
$omniback_path="D:/HP/OmniBack/bin";
chdir($omniback_path) or die "Cannot open path $omniback_path\n";
if (-e "omnirpt.exe" ) {
print "Found omnirpt.exe\n";
}
else {
print "File omnirpt.exe does not exist. Exit program.\n";
exit;
}
$lista_sesji_command=`omnirpt.exe -report list_sessions -timeframe 24 24`;
open FILE, ">session_list.txt" or die $!; #print list of session for Oracle and FileSystem
print FILE $lista_sesji_command;
close FILE;
print "Created session list in file session_list.txt\n";
if (-e "session_list.txt")
{
open (CHECKBOOK, "output.txt');
$count = 0;
$count_oracle=0;
while ($record = ) {
@tokens = split(/\s+/, $record);
my $boolean = 0;
$count_oracle=0;
$count=$count+1;
foreach my $token (@tokens) {
if ( @tokens[2] ne "Oracle8" and $boolean_only_FS eq 1)
{
if ( $boolean eq 0 )
{
if( @tokens[15] ne "Errors" )
{
if( @tokens[15] ne "" )
{
print "\n----FileSystem----\n";
print "Session : ",@tokens[2],"\n";
print "Time start : ",@tokens[6],"\n";
print "Duration : ",@tokens[8],"\n";
print "Data GB : ",@tokens[9],"GB\n";
print "SessionID : ",@tokens[15],"\n";
$temp_session_ID=@tokens[15];
$session_objects=`omnirpt.exe -report session_objects -session $temp_session_ID`;
$licz=0;
$temp_host;
$temp_host2;
$boolean_session=1;
$flaga_rowne=1;
$flaga_nierowne=1;
@tokens_session_objects = split(/\s+/, $session_objects);
foreach my $token_session (@tokens_session_objects) {
$licz=$licz+1;
$temp_host=@tokens_session_objects[$licz];
if( $token_session =~ m/FileSystem/)
{
$glowny_licznik = $glowny_licznik + 1;
if ( $boolean_session )
{
$temp_host2=$temp_host;
}
####################################################################################
if ( $boolean_session )
{
print PLIK_WYNIKOWY @tokens[2]," "; #Session (once)
if ( $boolean_only_xls )
{
$worksheet->write($glowny_licznik,0,@tokens[2]);
}
}
if ( $boolean_session )
{
print PLIK_WYNIKOWY " ",@tokens_session_objects[$licz]," "; #host
if ( $boolean_only_xls )
{
$worksheet->write($glowny_licznik,1,@tokens_session_objects[$licz]);
}
}
else
{
print PLIK_WYNIKOWY " ",@tokens_session_objects[$licz]," "; #host
if ( $boolean_only_xls )
{
$worksheet->write($glowny_licznik,1,@tokens_session_objects[$licz]);
}
}
if ( @tokens_session_objects[$licz] eq $temp_host2 and $flaga_rowne == 1) #hosts name are the same
{
if ( $boolean_session )
{
print PLIK_WYNIKOWY "FS"," ";
if ( $boolean_only_xls )
{
$worksheet->write($glowny_licznik,2,"FS");
}
}
}
if ( @tokens_session_objects[$licz] ne $temp_host2 and $flaga_nierowne == 1) #different host names
{
if ( $boolean_session )
{
print PLIK_WYNIKOWY "FS"," ";
if ( $boolean_only_xls )
{
$worksheet->write($glowny_licznik,2,"FS");
}
}
}
if ( $boolean_session )
{
print PLIK_WYNIKOWY @tokens_session_objects[$licz+1]," "; #Backuped filesystems
if ( $boolean_only_xls )
{
$worksheet->write($glowny_licznik,3,@tokens_session_objects[$licz+1]);
}
}
else
{
print PLIK_WYNIKOWY @tokens_session_objects[$licz+1],"\n"; #Backuped filesystems
if ( $boolean_only_xls )
{
$worksheet->write($glowny_licznik,3,@tokens_session_objects[$licz+1]);
}
}
if ( @tokens_session_objects[$licz] eq $temp_host2 and $flaga_rowne == 1) #host names are the same
{
if ( $boolean_session )
{
print PLIK_WYNIKOWY @tokens[6]," "; #Time start (once)
print PLIK_WYNIKOWY @tokens[8]," "; #Duration (once)
print PLIK_WYNIKOWY @tokens[9],"GB\n"; #Data GB (once)
$boolean_session=0;
if ( $boolean_only_xls )
{
$worksheet->write($glowny_licznik,4,@tokens[6]);
$worksheet->write($glowny_licznik,5,@tokens[8]);
$worksheet->write($glowny_licznik,6,"@tokens[9] GB");
}
}
$flaga_rowne=0;
$flaga_nierowne=1;
}
if ( @tokens_session_objects[$licz] ne $temp_host2 and $flaga_nierowne == 1) #different host names
{
if ( $boolean_session )
{
print PLIK_WYNIKOWY @tokens[6]," "; #Time start (once)
print PLIK_WYNIKOWY @tokens[8]," "; #Duration (once)
print PLIK_WYNIKOWY @tokens[9],"GB\n"; #Data GB (once)
$boolean_session=0;
if ( $boolean_only_xls )
{
$worksheet->write($glowny_licznik,4,@tokens[6]);
$worksheet->write($glowny_licznik,5,@tokens[8]);
$worksheet->write($glowny_licznik,6,"@tokens[9] GB");
}
}
$flaga_nierowne=0;
$flaga_rowne=1;
}
$temp_host=@tokens_session_objects[$licz];
$temp_host2=@tokens_session_objects[$licz];
}
}
print "\n";
$boolean = 1;
}
}
}
}
elsif ( $boolean_only_Oracle eq 1 ) #in the session found Oracle8
{
$temp_session_oracle=@tokens[16]; #sessionID
$oracle=`omnidb.exe -session $temp_session_oracle`;
@tokens_oracle8 = split(/\s+/, $oracle);
my $boolean_check=1;
foreach my $token_oracle (@tokens_oracle8) {
if( $token_oracle =~ m/.dbf/ and $boolean_check eq 1) #one host - one SID
{
$glowny_licznik = $glowny_licznik + 1;
$znak_mniejszosci=rindex($token_oracle,'<');
$podkreslenie=rindex($token_oracle,'_');
$SID_Bazy=substr($token_oracle,$znak_mniejszosci+1,$podkreslenie-$znak_mniejszosci-1);
$dwukropek=index($token_oracle,':');
$Host=substr($token_oracle,0,$dwukropek);
print "\n----Oracle8----\n";
print "Session : ",@tokens[3],"\n";
print "Time start : ",@tokens[7],"\n";
print "Duration : ",@tokens[9],"\n";
print "Data GB : ",@tokens[10],"GB\n";
print "SessionID : ",@tokens[16],"\n";
print "SID Bazy : ",$SID_Bazy,"\n";
#write to output file
print PLIK_WYNIKOWY @tokens[3]," "; #Session
print PLIK_WYNIKOWY $Host," "; #Host
print PLIK_WYNIKOWY "Oracle"," "; #Oracle
print PLIK_WYNIKOWY $SID_Bazy," "; #Database SID
print PLIK_WYNIKOWY @tokens[7]," "; #Time start
print PLIK_WYNIKOWY @tokens[9]," "; #Duration
print PLIK_WYNIKOWY @tokens[10],"GB\n"; #Data GB
if ( $boolean_only_xls )
{
$worksheet->write($glowny_licznik,0,@tokens[3]);
$worksheet->write($glowny_licznik,1,$Host);
$worksheet->write($glowny_licznik,2,"Oracle");
$worksheet->write($glowny_licznik,3,$SID_Bazy);
$worksheet->write($glowny_licznik,4,@tokens[7]);
$worksheet->write($glowny_licznik,5,@tokens[9]);
$worksheet->write($glowny_licznik,6,"@tokens[10] GB");
}
$boolean_check=0;
}
}
print "\n";
last;
}
}
$boolean = 1;
}
close(CHECKBOOK);
close(PLIK_WYNIKOWY);
}
else {
print "File session_list.txt does not exist";
}
if ( $boolean_only_xls eq 1 ) {
$workbook->close();
}
Reference : [1] Pastebin GarciaPL HP Data Protector [2] Wikipedia HP Data Protector [3] HP Data Protector Resources
HP Data Protector Reports
2013-08-21T21:21:00+01:00
GarciaPL
HP Data Protector|Perl|

