上一篇写了有关“利用exp自动逻辑导出脚本”的文章,但光有导出,没有导入,岂不麻烦,于是写了自动导入脚本,:)实际上是半自动.
脚本名:vmdbimport.ksh
说明:生成导入时要运行的脚本,但不自动运行.可根据需要对“要运行的导入脚本”进行适当的裁减。
#!/bin/ksh
# ++
if [ $# -ne 2 ]
then
echo "+=========================================================================================="
echo "| Usage: $0 <导出的备份目录> <目录数据库的NetService名>"
echo "+=========================================================================================="
exit 1
fi
# ++
THISDAY=$(date +%Y%m%d)
BASEDIR='/backup/vmdb/db'
ORACLE_HOME='/oracle/product/9ir2'
IMP_RELATE_DIR=${BASEDIR}/$1
TARGET_NETSERVICENAME=$2
TARGET_PASSFILE=$BASEDIR/vmdbimppasswd.map
TARGET_EXECUTER="$BASEDIR/vmdbimpexecuter_$THISDAY.ksh"
echo "++"
echo "info:"
echo "info:"
if [ ! -d $IMP_RELATE_DIR ]
then
echo "warn: import directory $IMP_RELATE_DIR not exist . "
exit 1
fi
if [ ! -f $TARGET_PASSFILE ]
then
echo "warn: import database username/password map file $TARGET_PASSFILE not exist . "
exit 1
fi
echo "info: start time = $(date +'%b %e %T') . "
echo "info: import directory=$IMP_RELATE_DIR files to database $TARGET_NETSERVICENAME ."
echo "info: generator import par file from directory ${IMP_RELATE_DIR} start."
touch $TARGET_EXECUTER
echo '#!/usr/bin/ksh' >> $TARGET_EXECUTER
echo 'echo "start time = $(date) ."' >> $TARGET_EXECUTER
find $IMP_RELATE_DIR -name "*.par" -type f -print | while read oline
do
DIRNAME_OLINE=$(dirname $oline)
BASENAME_OLINE=$(basename $oline)
USERNAME=`echo $BASENAME_OLINE | cut -d. -f1`
PASSWORD=`grep $USERNAME $TARGET_PASSFILE | cut -d: -f2`
TABLENAME=`echo $BASENAME_OLINE | cut -d. -f2`
TARGET_IMPFILE=$DIRNAME_OLINE/$USERNAME.$TABLENAME.imp.par
touch $TARGET_IMPFILE
echo "log=$DIRNAME_OLINE/$USERNAME.$TABLENAME.imp.log" >> $TARGET_IMPFILE
echo "file=$DIRNAME_OLINE/$USERNAME.$TABLENAME.dmp" >> $TARGET_IMPFILE
echo "userid=$USERNAME/$PASSWORD@$TARGET_NETSERVICENAME" >> $TARGET_IMPFILE
echo "buffer=4096" >> $TARGET_IMPFILE
echo "tables=($TABLENAME)" >> $TARGET_IMPFILE
echo "ignore=y" >> $TARGET_IMPFILE
echo "grants=n" >> $TARGET_IMPFILE
echo "commit=y" >> $TARGET_IMPFILE
echo "$ORACLE_HOME/bin/imp parfile=$TARGET_IMPFILE" >> $TARGET_EXECUTER
done
echo 'echo "start time = $(date) ."' >> $TARGET_EXECUTER
chown oracle:dba $TARGET_EXECUTER
chmod ug+x $TARGET_EXECUTER
echo "info: end time = $(date +'%b %e %T') . "
exit 0
文件:vmdbimppasswd.map
注:用户名密码对应文件
manage:manage
test:test
脚本名:vmdbimport.ksh
说明:生成导入时要运行的脚本,但不自动运行.可根据需要对“要运行的导入脚本”进行适当的裁减。
#!/bin/ksh
# ++
if [ $# -ne 2 ]
then
echo "+=========================================================================================="
echo "| Usage: $0 <导出的备份目录> <目录数据库的NetService名>"
echo "+=========================================================================================="
exit 1
fi
# ++
THISDAY=$(date +%Y%m%d)
BASEDIR='/backup/vmdb/db'
ORACLE_HOME='/oracle/product/9ir2'
IMP_RELATE_DIR=${BASEDIR}/$1
TARGET_NETSERVICENAME=$2
TARGET_PASSFILE=$BASEDIR/vmdbimppasswd.map
TARGET_EXECUTER="$BASEDIR/vmdbimpexecuter_$THISDAY.ksh"
echo "++"
echo "info:"
echo "info:"
if [ ! -d $IMP_RELATE_DIR ]
then
echo "warn: import directory $IMP_RELATE_DIR not exist . "
exit 1
fi
if [ ! -f $TARGET_PASSFILE ]
then
echo "warn: import database username/password map file $TARGET_PASSFILE not exist . "
exit 1
fi
echo "info: start time = $(date +'%b %e %T') . "
echo "info: import directory=$IMP_RELATE_DIR files to database $TARGET_NETSERVICENAME ."
echo "info: generator import par file from directory ${IMP_RELATE_DIR} start."
touch $TARGET_EXECUTER
echo '#!/usr/bin/ksh' >> $TARGET_EXECUTER
echo 'echo "start time = $(date) ."' >> $TARGET_EXECUTER
find $IMP_RELATE_DIR -name "*.par" -type f -print | while read oline
do
DIRNAME_OLINE=$(dirname $oline)
BASENAME_OLINE=$(basename $oline)
USERNAME=`echo $BASENAME_OLINE | cut -d. -f1`
PASSWORD=`grep $USERNAME $TARGET_PASSFILE | cut -d: -f2`
TABLENAME=`echo $BASENAME_OLINE | cut -d. -f2`
TARGET_IMPFILE=$DIRNAME_OLINE/$USERNAME.$TABLENAME.imp.par
touch $TARGET_IMPFILE
echo "log=$DIRNAME_OLINE/$USERNAME.$TABLENAME.imp.log" >> $TARGET_IMPFILE
echo "file=$DIRNAME_OLINE/$USERNAME.$TABLENAME.dmp" >> $TARGET_IMPFILE
echo "userid=$USERNAME/$PASSWORD@$TARGET_NETSERVICENAME" >> $TARGET_IMPFILE
echo "buffer=4096" >> $TARGET_IMPFILE
echo "tables=($TABLENAME)" >> $TARGET_IMPFILE
echo "ignore=y" >> $TARGET_IMPFILE
echo "grants=n" >> $TARGET_IMPFILE
echo "commit=y" >> $TARGET_IMPFILE
echo "$ORACLE_HOME/bin/imp parfile=$TARGET_IMPFILE" >> $TARGET_EXECUTER
done
echo 'echo "start time = $(date) ."' >> $TARGET_EXECUTER
chown oracle:dba $TARGET_EXECUTER
chmod ug+x $TARGET_EXECUTER
echo "info: end time = $(date +'%b %e %T') . "
exit 0
文件:vmdbimppasswd.map
注:用户名密码对应文件
manage:manage
test:test