Tuesday, July 15, 2008

Multithreaded Export and Import

The below script used for doing multithreaded export and import with list of tables specified in tablelist file

$ cat initiate

#!/bin/bash

cleanup()

{

rm -fr dumpdir

mkdir dumpdir

rm -fr expdone

mkdir expdone

rm -fr impdone

mkdir impdone

rm -fr explock

mkdir explock

rm -fr implock

mkdir implock

rm -fr explog

mkdir explog

rm -fr implog

mkdir implog

rm -fr expproglog

mkdir expproglog

rm -fr impproglog

mkdir impproglog

}

createproc()

{

i=1

while [ $i -le $pid ]

do

./export $i > ${PWD}/expproglog/export_$i.log &

echo " Export started with process id $i"

sleep 2

./import $i > ${PWD}/impproglog/import_$i.log &

echo " Import started with process id $i"

sleep 2

i=$((i+1))

done

}

echo "Enter number of export & import process to start.. "

read pid

echo "Doing cleanup of dump and log directories.."

cleanup

sleep 2

echo "Cleanup done.."

createproc

echo " Export and import process started, Check the log for progress"





$cat export

#!/bin/bash

export()

{

tablelist=`cat tablelist`

j=`wc -l tablelist | awk ' { print $1 } '`

exec 3
while [ $j -gt 0 ]

do

read <&3 tableiden

table=`echo $tableiden | awk ' { print $1 } '`

iden=`echo $tableiden | awk ' { print $2 } '`

if [ -e "${PWD}/expdone/expdone.${table}" ] ; then

SKIP=Y

elif [ -e "${PWD}/explock/explock.${table}" ] ; then

SKIP=Y

else

SKIP=N

fi

if [ "$SKIP" = "N" ] ; then

touch ${PWD}/explock/explock.${table}

dateecho "About to start export of table $table.."

exp user1/user1@prod1 file=${PWD}/dumpdir/exp_$table.dmp log=${PWD}/explog/exp_$table.log tables=$table > /dev/null 2>&1

sleep 2

touch ${PWD}/expdone/expdone.${table}

rm -f ${PWD}/explock/explock.${table}

dateecho "completed export of table $table.."

fi

SKIP=N

j=$((j-1))

done

}

function dateecho

{

datevar=`date '+%Y/%m/%d %H:%M:%S'`

echo "$datevar $*"

}

proc=$1

dateecho "Export process started with id $1.."

while [ 1 ]

do

count=`wc -l tablelist | awk ' { print $1 } '`

counttask=`ls -ltr ${PWD}/expdone | grep -v total | wc -l`

if [ $count != $counttask ] ; then

export

else

dateecho "Export process $proc completed successfully.."

exit 1

fi

done





$ cat import

#!/bin/bash

import()

{

tablelist=`cat tablelist`

j=`wc -l tablelist | awk ' { print $1 } '`

exec 3
while [ $j -gt 0 ]

do

read <&3 tableiden

table=`echo $tableiden | awk ' { print $1 } '`

iden=`echo $tableiden | awk ' { print $2 } '`

if [ -e "${PWD}/expdone/expdone.${table}" ] ; then

if [ -e "${PWD}/impdone/impdone.${table}" ] ; then

SKIP=Y

elif [ -e "${PWD}/implock/implock.${table}" ] ; then

SKIP=Y

else

SKIP=N

fi

else

SKIP=Y

fi

if [ "$SKIP" = "N" ] ; then

touch ${PWD}/implock/implock.${table}

dateecho "About to start import of table $table.."

imp user2/user2@prod2 file=${PWD}/dumpdir/exp_$table.dmp log=${PWD}/implog/imp_$table.log full=y > /dev/null 2>&1

sleep 2

touch ${PWD}/impdone/impdone.${table}

rm -f ${PWD}/implock/implock.${table}

dateecho "Completed import of table $table.."

fi

SKIP=N

j=$((j-1))

done

}

function dateecho

{

datevar=`date '+%Y/%m/%d %H:%M:%S'`

echo "$datevar $*"

}

proc=$1

dateecho "Import process started with id $1.."

while [ 1 ]

do

count=`wc -l tablelist | awk ' { print $1 } '`

counttask=`ls -ltr ${PWD}/impdone | grep -v total | wc -l`

if [ $count != $counttask ] ; then

import

else

dateecho "Import process $proc completed successfully.."

exit 1

fi

done

No comments: