ADSM-L

Re: Automating SQL/Exchange Connect Agents (LONG APPEND)

1998-06-18 07:46:21
Subject: Re: Automating SQL/Exchange Connect Agents (LONG APPEND)
From: Del Hoobler <hoobler AT US.IBM DOT COM>
Date: Thu, 18 Jun 1998 07:46:21 -0400
WARNING: LONG APPEND FOLLOWS

Christo,

Here are the attachments that Phil Chissell sent.
I detached them and placed them in-line.
Special thanks to Phil for his willingness to share!

*********
SQL Agent
*********
=========================================================
=========================================================
File: SQL_backup.bat
--------------------
@echo off
@echo off
rem Batch file to backup SQL databases
rem Author: Phil Chissell
rem Date: 02/12/1997

set drive=D:
set adsm_dir=ADSM_V3
set adsm_sql=AGENTSQL
set adsm_cmds=NP_CMDS
set log_file=DSMSCHED.LOG
set backuplog=%drive%\%adsm_dir%\%adsm_sql%\%log_file%
set get_dbs=%drive%\%adsm_dir%\%adsm_cmds%\sql_get_dbs.pl
set old_dbs=%drive%\%adsm_dir%\%adsm_cmds%\sql_list_old_dbs.pl
set tempfile_in=tmp_sql_lst.in
set tempfile_out=tmp_sql_lst.out
set old_dbs_in=tmp_old_sql.in
set old_dbs_out=tmp_old_sql.out
set window=7

:SQLBackup
echo Starting the SQL database backups on %computername% now >> %backuplog%

CD /d %drive%\%adsm_dir%\%adsm_sql%

rem Get the list of SQL databases

sqldsmc /sqlsecure /sqlquerydb > %tempfile_in%

rem Use the following perl script to munge the data into the appropriate format

perl %get_dbs% %tempfile_in% %tempfile_out%

for /f %%i in (%tempfile_out%) do sqldsmc /sqlsecure /backupfull:%%i
/truncafter /logfile:%backuplog%

:ADSMCleanup
rem Clean up old databases

echo Removing old databases from the ADSM Server >> %backuplog%

rem Get the list of old (more than 7 days) SQL databases
rem on the ADSM Server via the perl script below

sqldsmc /adsmquerydb > %old_dbs_in%

perl %old_dbs% %window% %old_dbs_in% %old_dbs_out%

for /f %%i in (%old_dbs_out%) do sqldsmc /adsmdelete:%%i /logfile:%backuplog%

:exit
echo Backup script has finished >> %backuplog%

exit
=========================================================
=========================================================
File: sql_get_dbs.pl
--------------------
#!perl.exe
#!perl.exe
#
# sql_get_dbs.pl
#
# This script munges  a list of SQL databases into the appropriate format

open (OUT,">$ARGV[1]") || die "Could not create \$ARGV[1] \n";
open (IN, "$ARGV[0]");
while (<IN>) {
if (/^---*/) { $Flag=1; }
if ( $Flag == 1 && /^[a-zA-Z0-9]/ ) {
        ($db,$junk) = split(/\s/);
        print OUT "$db\n";
        }
}
close IN;
close OUT;
exit 0;
=========================================================
=========================================================
File: sql_list_old_dbs.pl
-------------------------
#!perl.exe
#!perl.exe
#
# sql_list_old_dbs.pl
#
# This script generates a list of databases which are greater than
# 6 days old and writes them to a temporary file

# allow window to be specified as a parameter

if ($ARGV[0]) { $w=$ARGV[0]; } else { $w=7; }

$start=0;

open (OUT,">$ARGV[2]") || die "ERROR: can't open \$ARGv[2] \n";
open (IN,"$ARGV[1]");

# evaluate 7 days ago date string

@days=(31,28,31,30,31,30,31,31,30,31,30,31);
(@now)=localtime(time);

# check numbers for 0 padding and millenium

if ( $now[5] =~ /^9[89]$/ ) { $now[5]=~s/^/19/; }
elsif ($now[5] =~ /^[0..9][0..7]$/) { $now[5]=~s/^/20/; }

# note above should be valid for 100 yrs or until the year is 4 digits

if (length($now[4]+=1)==1) { $now[4]=~s/^/0/; }
if (length($now[3])==1) { $now[3]=~s/^/0/; }

#decide if year is a leap year
# if a year is exactly divisible by 4 and NOT exactly divisible by 100 but is
divisible by 400

if (($now[5]%4==0 && $now[5]%100!=0)||($now[5]%100==0 && $now[5]%400==0))
    { $days[1]=29; }

# now derive 7 days ago marker

if ($now[4] == '01' && $now[3] < '07') {
 $ago7=($now[5]-1).'12'.sprintf("%02.2d",31-$w+$now[3]);
 }
elsif ($now[3] < '08') {
 $ago7=$now[5].sprintf("%02d%02d",$now[4]-1,$days[$now[4]-2]-$w+$now[3]);
 }
else { $ago7=$now[5].$now[4].sprintf("%02d",$now[3]-$w); }

# process each line of adsm report and write old logs to OUT

while (<IN>) {
if (/^-----/) { $start = 1; next; }
if ($start && /^[a-zA-Z]/) {
 chop;
 (@fields)=split(/[ ]+/);
 ($m,$d,$y)=split('/',$fields[4]);
 $testnum=$y.$m.$d;
 if($testnum<$ago7) {
  $cut=join('',$fields[1],',',$fields[6],"\n");
  push(@array,$cut); }
 }
}
print OUT @array;
close OUT;
close IN;

exit 0;

# end of script
=========================================================

**************
Exchange Agent
**************
=========================================================
File: Exchange_backup.bat
-------------------------
@echo off
@echo off
rem Batch file to backup Exchange
rem Author: Phil Chissell
rem Date: 07/05/1998

set drive=D:
set adsm_dir=ADSM_V3
set adsm_exc=AGENTEXC
set adsm_cmds=NP_CMDS
set log_file=DSMSCHED.LOG
set backuplog=%drive%\%adsm_dir%\%adsm_exc%\%log_file%
set old_dbs=%drive%\%adsm_dir%\%adsm_cmds%\exc_list_old_dbs.pl
set old_dbs_in=tmp_old_exc.in
set old_dbs_out=tmp_old_exc.out
set window=14

rem Run utility to obtain the current day

%drive%\%adsm_dir%\%adsm_cmds%\getday.exe

if errorlevel 7 goto IncrBackup    ;Sat
if errorlevel 6 goto IncrBackup    ;Fri
if errorlevel 5 goto IncrBackup    ;Thu
if errorlevel 4 goto IncrBackup    ;Wed
if errorlevel 3 goto IncrBackup    ;Tue
if errorlevel 2 goto IncrBackup    ;Mon
if errorlevel 1 goto FullBackup    ;Sun

:IncrBackup
echo Starting the Exchange Database backups on %computername% now >> %backuplog%

CD /d %drive%\%adsm_dir%\%adsm_exc%

rem Do an incremental backup of the Directory and Information Store Exchange
Databases

excdsmc /backup:dir,incr /logfile:%backuplog%
excdsmc /backup:is,incr /logfile:%backuplog%
goto exit

:FullBackup
echo Starting the Exchange Database backups on %computername% now >> %backuplog%

CD /d %drive%\%adsm_dir%\%adsm_exc%

rem Do a full backup of the Directory and Information Store Exchange Databases

excdsmc /backup:dir,full /logfile:%backuplog%
excdsmc /backup:is,full /logfile:%backuplog%

:ADSMCleanup
rem Clean up old databases

echo Removing old databases from the ADSM Server >> %backuplog%

rem Get the list of old Exchange databases
rem on the ADSM Server via the perl script below

excdsmc /adsmquerydb > %old_dbs_in%

perl %old_dbs% %window% %old_dbs_in% %old_dbs_out%

for /f %%i in (%old_dbs_out%) do excdsmc /adsmdelete:%%i /logfile:%backuplog%

:exit
echo Backup script has finished >> %backuplog%

exit
=========================================================
=========================================================
File:GETDAY.EXE
---------------
*** NOT INCLUDED IN-LINE
*** NOT INCLUDED IN-LINE

=========================================================
=========================================================
File: exc_list_old_dbs.pl
-------------------------
#!perl.exe
#!perl.exe
#
# exc_list_old_dbs.pl
#
# This script generates a list of exchange databases which are
# greater than $ARGV[0] days old and writes them to a temporary file

# allow window to be specified as a parameter

if ($ARGV[0]) { $w=$ARGV[0]; } else { $w=7; }

$start=0;

open (OUT,">$ARGV[2]") || die "ERROR: can't open \$ARGv[2] \n";
open (IN,"$ARGV[1]");

# evaluate 7 days ago date string

@days=(31,28,31,30,31,30,31,31,30,31,30,31);
(@now)=localtime(time);

# check numbers for 0 padding and millenium

if ( $now[5] =~ /^9[89]$/ ) { $now[5]=~s/^/19/; }
elsif ($now[5] =~ /^[0..9][0..7]$/) { $now[5]=~s/^/20/; }

# note above should be valid for 100 yrs or until the year is 4 digits

if (length($now[4]+=1)==1) { $now[4]=~s/^/0/; }
if (length($now[3])==1) { $now[3]=~s/^/0/; }

#decide if year is a leap year
# if a year is exactly divisible by 4 and NOT exactly divisible by 100 but is
divisible by 400

if (($now[5]%4==0 && $now[5]%100!=0)||($now[5]%100==0 && $now[5]%400==0))
    { $days[1]=29; }

# now derive 7 days ago marker

if ($now[4] == '01' && $now[3] < '07') {
 $ago7=($now[5]-1).'12'.sprintf("%02.2d",31-$w+$now[3]);
 }
elsif ($now[3] < '08') {
 $ago7=$now[5].sprintf("%02d%02d",$now[4]-1,$days[$now[4]-2]-$w+$now[3]);
 }
else { $ago7=$now[5].$now[4].sprintf("%02d",$now[3]-$w); }

# process each line of adsm report and write old logs to OUT

while (<IN>) {
if (/^-----/) { $start = 1; next; }
if ($start && /^[a-zA-Z]/) {
 chop;
 (@fields)=split(/[ ]+/);
 ($m,$d,$y)=split('/',$fields[3]);
 $testnum=$y.$m.$d;
 if($testnum<$ago7) {
  $cut=join('',$fields[0],',',$fields[5],"\n");
  push(@array,$cut); }
 }
}
print OUT @array;
close OUT;
close IN;

exit 0;

# end of script
=========================================================
=========================================================

Thanks,

Del
ADSM Agent Development

=========================================================

>> Hi Phil,
>>
>> This sounds good, but you say you have enclosed the scripts?
>> Did you really or did you accidently forget to enclose them?
>>
>> Thanks
>> Christo
<Prev in Thread] Current Thread [Next in Thread>
  • Re: Automating SQL/Exchange Connect Agents (LONG APPEND), Del Hoobler <=