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
|