Not a _working_ example - but, at least a sample to follow in
creating a multi-thread oracle client. It generates a number
of simultaneous oraclient extracts -- then waits on completion
before submitting more.
cmdlets involved: start-process,get-process,get-date
param([STRING]`
$psFROM='',`
$pnDAYS=1,`
$pnOracleCli=100,`
$pnINCR=-1) `
#Must be the first statement in your script
CLEAR-HOST
# history:
# ~ $psFROM date starting point
# ~ $pnDAY number to iterate[default 1]
# ~ $pnINCR whether back (-1) or forward (1)
# ~ $pnOraCli number of clients to allow in tandem
$ldFROM =(GET-DATE);$ldSTOP =(GET-DATE);$ldTO =(GET-DATE);
$lsFROM =GET-DATE;$lsSTOP =GET-DATE;$lsTO =GET-DATE;
$lnDAYS =0;$lnINCR =$pnINCR;$lnOracleCli =$pnOracleCli;
if ($psFROM -ne $empty)
{$ldFROM =GET-DATE "$psFrom" -FORMAT "dd-MMM-yyyy"}
else
{$ldFROM = GET-DATE}
$ldSTOP = (GET-DATE $ldFROM ).AddDays($pnDAYS*$pnINCR)
$ldTO = $ldFROM
$lsFROM = GET-DATE $ldFROM -FORMAT "dd-MMM-yyyy"
$lsTO = GET-DATE $ldFROM -FORMAT "dd-MMM-yyyy"
$lsSTOP = GET-DATE $ldSTOP -FORMAT "dd-MMM-yyyy"
#at this point the dates s/b set now transform into
#how they're used in main part of script (in terms of format and type)
#start of loop
write-host "#-";
WRITE-HOST "# OraCli limit~$pnOracleCli~SO no daywidgets(16) X 5 DAYS = 90..."
$iDAYCOUNT=0;
while($ldFROM -ne $ldSTOP){
WRITE-HOST "# Extracting Data For $lsFROM THRU $lsTO...stopping at $DATESTOP"
START-PROCESS `
-FILEPATH C:\ORANT\BIN\PLUS33.EXE `
-WORKINGDIRECTORY m:\ `
-WINDOWSTYLE MINIMIZED `
-ARGUMENTLIST "$duserid/$dpassword@d @C:\yourQUERY.PDC Chunk1 $lsFROM $lsTO"
START-PROCESS `
-FILEPATH C:\ORANT\BIN\PLUS33.EXE `
-WORKINGDIRECTORY m:\ `
-WINDOWSTYLE MINIMIZED `
-ARGUMENTLIST "$duserid/$dpassword@d @C:\yourQUERY.PDC chunk2 $lsFROM $lsTO"
START-PROCESS `
-FILEPATH C:\ORANT\BIN\PLUS33.EXE `
-WORKINGDIRECTORY m:\ `
-WINDOWSTYLE MINIMIZED `
-ARGUMENTLIST "$duserid/$dpassword@d @C:\yourQUERY.PDC chunk3 $lsFROM $lsTO"
...
$iDAYCOUNT=$iDAYCOUNT+1;
$ldFROM =(get-date $lsFROM).adddays($lnINCR)
$ldTO =(get-date $lsTO).adddays($lnINCR)
$lsFROM =GET-DATE $ldFROM -FORMAT "dd-MMM-yyyy"
$lsTO =GET-DATE $ldTO -FORMAT "dd-MMM-yyyy"
$iDAYCOUNT_MOD_5=$iDAYCOUNT % 5;
if ($iDAYCOUNT_MOD_5 -eq 0){
$iDAYCOUNT=0
$I=0;
$GPE=GET-PROCESS -NAME PLUS33 -ERRORACTION SILENTLYCONTINUE;
FOREACH($P IN $GPE){
IF($P.ID -NE $NULL){$I=$I+1}};
$sqlplus_COUNT=$I;
WRITE-HOST "#-"
WRITE-HOST "# Spawn then wait for Oraclient(s) to finish..."
WRITE-HOST "#-"
$begin=GET-DATE
WRITE-HOST "# $begin"
while ($sqlplus_COUNT -ne 0){
start-sleep -s 10
$I=0;
$GPE=GET-PROCESS `
-NAME PLUS33 `
-ERRORACTION SILENTLYCONTINUE;
FOREACH($P IN $GPE){
IF($P.ID -NE $NULL){
$I=$I+1
}
};
$sqlplus_COUNT=$I;
}
}
}
write-host "#-"
write-host "# done..."
write-host "#-"
$done=get-date
write-host "# $d"