标签:
直接给出数据库连接字串和列有表名称的文本文件,即可进行exp/imp
# begin of exptable
#!/bin/ksh
PARALLEL_LIMIT=5
WAIT_TIME=10
PARAMETERS="DIRECT=Y COMPRESS=N ROWS=Y INDEXES=Y STATISTICS=NONE";export PARAMETERS
TARGET_PATH=./done
LOGFILE_PATH=./elogs
USER_ID=$1
TABLELIST_FILE=$2
EXTEND_CODE=$3
exptabledata()
{
echo "\n\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 开始导出数据表"$2" ..."
echo "Command Line: "exp USERID=******** $PARAMETERS TABLES=$2 FILE=$3 LOG=$4
ZIP_FILE=$3.gz
rm -f $3
#exptabledata $USER_ID $TABLE_NAME_UPPER $DMP_FILE $LOG_FILE $TARGET_PATH
exp USERID=$1 $PARAMETERS TABLES=$2 FILE=$3 LOG=$4
#echo `date +"%Y-%m-%d %H:%M:%S"`" -- 压缩数据文件"$3" ..."
#if [ -s $3 ];then gzip -f $3 ; fi
if [ -s $ZIP_FILE ];then
mv -f $ZIP_FILE $5/$ZIP_FILE
else
mv -f $3 $5/$3
fi
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 表"$2"数据导出完成 !!!\n\n"
}
#校验用户名/导出表清单文件是否存在
if [ "NULL$USER_ID" = "NULL" -o "NULL$TABLELIST_FILE" = "NULL" ]
then
echo "\n\n"
echo "Usage: $0 UserID/Paasword[@ServiceName] tables.lst [Extend]"
echo "UserID/Paasword[@ServiceName] -- 数据库链接字串"
echo "tables.lst -- 导出表清单文件"
echo "Extend -- 扩展名"
echo "\n\n"
exit;
fi;
#校验导出表清单文件
if [ ! -r $TABLELIST_FILE ]
then
echo "\n\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 错误 !!!"
echo $TABLELIST_FILE" -- 导出表清单文件读取无效 !!!"
echo "\n\n"
exit
fi
#校验目标目录
if [ -d $TARGET_PATH ]
then
if [ ! -w $TARGET_PATH ]
then
echo "\n\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 错误 !!!"
echo $TARGET_PATH" -- 目标目录写入无权限 !!!"
echo "\n\n"
exit
fi
else
mkdir -p $TARGET_PATH
if [ ! $? ]
then
echo "\n\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 错误 !!!"
echo $TARGET_PATH" -- 目标目录创建失败 !!!"
echo "\n\n"
exit
fi
fi
#校验LOG目录
if [ -d $LOGFILE_PATH ]
then
if [ ! -w $LOGFILE_PATH ]
then
echo "\n\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 错误 !!!"
echo $LOGFILE_PATH" -- LOG目录写入无权限 !!!"
echo "\n\n"
exit
fi
else
mkdir -p $LOGFILE_PATH
if [ ! $? ]
then
echo "\n\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 错误 !!!"
echo $LOGFILE_PATH" -- LOG目录创建失败 !!!"
echo "\n\n"
exit
fi
fi
echo "\n\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 数据导出开始 ..."
echo "目标目录 -- "$TARGET_PATH
echo "表清单文件 -- "$TABLELIST_FILE
echo "\n\n"
#读取表名称进行数据导出
while read LARGE_TABLE
do
# 根据进程数休眠
read PARALLEL_LIMIT < parallel.limit
while [ `ps -ef|grep "exp USERID"|grep -v grep|wc -l` -ge $PARALLEL_LIMIT ]
do
sleep $WAIT_TIME
read PARALLEL_LIMIT < parallel.limit
done
DFILE_NAME=`echo $LARGE_TABLE|awk -F ‘|‘ ‘{print $1;}‘|tr ‘[:upper:]‘ ‘[:lower:]‘`
TABLE_NAME=`echo $LARGE_TABLE|awk -F ‘|‘ ‘{print $2;}‘|tr ‘[:lower:]‘ ‘[:upper:]‘`
if [ "NULL$DFILE_NAME" = "NULL" -a "NULL$TABLE_NAME" = "NULL" ]
then
continue
else
if [ "NULL$TABLE_NAME" = "NULL" ];then TABLE_NAME=`echo $DFILE_NAME|tr ‘[:lower:]‘ ‘[:upper:]‘`;fi
fi
if [ "NULL$EXTEND_CODE" = "NULL" ]
then
DMP_FILE=$DFILE_NAME".dmp"
LOG_FILE=$LOGFILE_PATH/$DFILE_NAME".log"
else
DMP_FILE=$DFILE_NAME"_"$EXTEND_CODE".dmp"
LOG_FILE=$LOGFILE_PATH/$DFILE_NAME"_"$EXTEND_CODE.log
fi
exptabledata $USER_ID $TABLE_NAME $DMP_FILE $LOG_FILE $TARGET_PATH &
done < $TABLELIST_FILE
echo "\n\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 数据导出结束 !!!"
echo "目标目录 -- "$TARGET_PATH
echo "表清单文件 -- "$TABLELIST_FILE
echo "\n\n"
# end of exptable
# begin of imptable
#!/bin/ksh
PARALLEL_LIMIT=10
WAIT_TIME=10
PARAMETERS="BUFFER=104857600 IGNORE=Y COMMIT=Y FULL=Y";export PARAMETERS
LOGFILE_PATH=./ilogs
INDEX_PATH=./index
BACKUP_PATH=./bak
DOING_PATH=./doing
USER_ID=$1
DATAFILE_PATH=$2
imptabledata()
{
echo "\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 开始导入数据文件"$2" ..."
echo "Command Line: imp USERID=********" $PARAMETERS INDEXES=N FILE=$3 LOG=$5
#imptabledata $USER_ID $DMP_FILE $INDEX_FILE $LOG_FILE
#imp USERID=$1 $PARAMETERS INDEXES=Y FILE=$2 INDEXFILE=$3
imp USERID=$1 $PARAMETERS INDEXES=N FILE=$2 LOG=$4
mv -f $2 $5
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 文件"$2"导入完成 !!!\n"
}
#校验用户名/导入表清单文件是否存在
if [ "NULL$USER_ID" = "NULL" ]
then
echo "\n"
echo "Usage: \n$0 UserID/Paasword[@ServiceName]"
echo "UserID/Paasword[@ServiceName] -- 数据库链接字串"
echo "\n"
exit;
fi;
#校验数据文件存储目录
if [ ! \( -d $DATAFILE_PATH -a -r $DATAFILE_PATH \) ]
then
echo "\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 错误 !!!"
echo $DATAFILE_PATH" -- 目标目录无读取权限 !!!"
echo "\n"
exit
fi
#校验LOG目录
if [ -d $LOGFILE_PATH ]
then
if [ ! -w $LOGFILE_PATH ]
then
echo "\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 错误 !!!"
echo $LOGFILE_PATH" -- LOG目录无写入权限 !!!"
echo "\n"
exit
fi
else
mkdir -p $LOGFILE_PATH
if [ ! $? ]
then
echo "\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 错误 !!!"
echo $LOGFILE_PATH" -- LOG目录创建失败 !!!"
echo "\n"
exit
fi
fi
#校验INDEX目录
if [ -d $INDEX_PATH ]
then
if [ ! -w $INDEX_PATH ]
then
echo "\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 错误 !!!"
echo $INDEX_PATH" -- INDEX目录无写入权限 !!!"
echo "\n"
exit
fi
else
mkdir -p $INDEX_PATH
if [ ! $? ]
then
echo "\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 错误 !!!"
echo $INDEX_PATH" -- INDEX目录创建失败 !!!"
echo "\n"
exit
fi
fi
#校验BACKUP目录
if [ -d $BACKUP_PATH ]
then
if [ ! -w $BACKUP_PATH ]
then
echo "\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 错误 !!!"
echo $BACKUP_PATH" -- BACKUP目录无写入权限 !!!"
echo "\n"
exit
fi
else
mkdir -p $BACKUP_PATH
if [ ! $? ]
then
echo "\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 错误 !!!"
echo $BACKUP_PATH" -- BACKUP目录创建失败 !!!"
echo "\n"
exit
fi
fi
#校验DOING目录
if [ -d $DOING_PATH ]
then
if [ ! -w $DOING_PATH ]
then
echo "\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 错误 !!!"
echo $DOING_PATH" -- DOING目录无写入权限 !!!"
echo "\n"
exit
fi
else
mkdir -p $DOING_PATH
if [ ! $? ]
then
echo "\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 错误 !!!"
echo $DOING_PATH" -- DOING目录创建失败 !!!"
echo "\n"
exit
fi
fi
echo "\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 开始导入数据文件目录"$DATAFILE_PATH" ..."
echo "\n"
#读取表名称进行数据导入
if [ ! -x imptables.stop ];then echo "running" > imptables.stop;fi
read IMP_STOP < imptables.stop
while [ $IMP_STOP != "stop" ]
do
ls -p $DATAFILE_PATH|grep ".dmp" > dmpfile.lst
while read DMP_FILE
do
# 根据进程数休眠
read PARALLEL_LIMIT < parallel.limit
while [ `ps -ef|grep "imp USERID"|grep -v "grep"|wc -l` -ge $PARALLEL_LIMIT ] ;
do
sleep $WAIT_TIME
read PARALLEL_LIMIT < parallel.limit
done
TABLE_NAME=${DMP_FILE%.*}
LOG_FILE=$TABLE_NAME".log"
INDEX_FILE=$TABLE_NAME".sql"
if [ "NULL$DMP_FILE" = "NULL" ]
then
continue
fi
mv -f $DATAFILE_PATH/$DMP_FILE $DOING_PATH/$DMP_FILE
if [ -r $DOING_PATH/$DMP_FILE ]
then
imptabledata $USER_ID $DOING_PATH/$DMP_FILE $INDEX_PATH/$INDEX_FILE $LOGFILE_PATH/$LOG_FILE $BACKUP_PATH/$DMP_FILE &
else
echo "\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- 错误 !!!"
echo $DMP_FILE" -- 数据文件读取失败 !!!"
echo "\n"
fi
done < dmpfile.lst
if [ `wc dmpfile.lst|awk ‘{print $1}‘` -eq 0 ];then sleep 120; fi
ls -p $DATAFILE_PATH|grep ".dmp" > dmpfile.lst
read IMP_STOP < imptables.stop
done
echo "\n"
echo `date +"%Y-%m-%d %H:%M:%S"`" -- imptables.stop时数据导入程序退出 !!!"
echo "\n"
# end of imptable
标签:
原文地址:http://www.cnblogs.com/tychyg/p/5067488.html