Chinaunix首页 | 论坛 | 博客
  • 博客访问: 137117
  • 博文数量: 25
  • 博客积分: 460
  • 博客等级: 下士
  • 技术积分: 252
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-11 10:48
个人简介

努力学习,谦虚请教,不断提升!

文章分类

全部博文(25)

文章存档

2015年(3)

2014年(4)

2013年(3)

2012年(9)

2011年(6)

我的朋友

分类: DB2/Informix

2012-11-02 18:01:18

脚本可一次导入单张表或者多张表数据
 

点击(此处)折叠或打开

  1. #!/usr/bin/env sh
  2. #
  3. # File: dbload.sh
  4. # Creation Date: 10/09/12
  5. # Last Modified:  2013/6/14 11:02:29
  6. # Purpose:脚本可一次导入单张表或者多张表数据
  7. #
  8. usage()
  9. {
  10. echo "=================使用说明=================== "
  11. echo "Usage: "
  12. echo " `basename $0` -a 目录 [-d] [-n] "
  13. echo " `basename $0` -s 表名 [-d] [-n] "
  14. echo " "
  15. echo "Options: "
  16. echo " -a 目录 导入多张表,必须指定多张表数据目录的绝对路径. "
  17. echo " -s 表名 导入一张表,必须指定该表数据文件的绝对路径. "
  18. echo " -d 数据库名字 默认为tnmsdb2 "
  19. echo " -n 导入行数 默认为10000 "
  20. echo " "
  21. echo "例子: "
  22. echo "导入多张表: "
  23. echo " `basename $0` -a /home/informix/tnmsdb2 "
  24. echo "导入一张表: "
  25. echo " `basename $0` -s /home/informix/circuit "
  26. echo "指定数据库和导入行数: "
  27. echo " `basename $0` -s /home/informix/circuit -d tnmsdb2 -n 1000 "
  28. exit 0
  29. }
  30. #
  31. while getopts "a:s:d:n:" OPTION
  32. do
  33. case $OPTION in
  34. a) Dir="${OPTARG}"
  35. ;;
  36. s) TF="${OPTARG}"
  37. ;;
  38. d) DN="${OPTARG}"
  39. ;;
  40. n) number="${OPTARG}"
  41. ;;
  42. *|\?) usage
  43. ;;
  44. esac
  45. done
  46. #创建存放控制文件目录
  47. if [ ! -d $HOME/ctrfile ];then
  48. echo "Create control file directory."
  49. mkdir $HOME/ctrfile
  50. else
  51. echo "$HOME/ctrfile is exist."
  52. fi
  53. #定义控制文件目录、导入脚本、导入日志名字变量
  54. Ctrpath=$HOME/ctrfile
  55. TNfile=$Ctrpath/TNfile
  56. dbload=$Ctrpath/dbload.sh
  57. dbloadlog=$Ctrpath/dbload.log
  58. #定义默认数据库名字
  59. if [ -z $DN ];then
  60. DN=tnmsdb2
  61. fi
  62. dbname=`onstat -d|grep 'N B'|awk '{print $10}'|grep -l $DN`
  63. if [ -z $dbname ];then
  64. echo $DN is not exist.
  65. exit 0
  66. fi
  67. #定义默认每次导入行数
  68. if [ -z $number ];then
  69. number=10000
  70. fi
  71. #判断输入参数是否正确
  72. if [ $# = 0 ];then
  73. echo "error:`basename $0` parameter is error"
  74. usage
  75. fi
  76. #
  77. if [ ! -d $Dir ];then
  78. echo error:Enter the directory is not exist.
  79. exit 0
  80. fi
  81. #
  82. if [ ! -f $TF ];then
  83. echo error:Enter the tabfile is not exist.
  84. exit 0
  85. fi
  86. #数据导入函数
  87. Impot()
  88. {
  89. chmod +x $dbload
  90. echo "Begin backstage import data......"
  91. nohup $dbload >$dbloadlog &
  92. echo "Please check the log $dbloadlog."
  93. }
  94. #判断参数-a后面参数是否正确
  95. if [ $2 = "$Dir" ];then
  96. ls $Dir >$TNfile
  97. echo "Begin create control file,Please wait......"
  98. while read Tabname
  99. do
  100. #查询表的列数
  101. echo "select ncols num from systables where tabname='$Tabname'"|dbaccess $DN>$Ctrpath/a
  102. num=`awk 'NR==5{print $Tabname}' $Ctrpath/a`
  103. #判断表列数是否为空
  104. if [ ! -z $num ];then
  105. #定义控制文件名字
  106. CF=$Ctrpath/$Tabname.ctr
  107. echo "FILE $Dir/$Tabname DELIMITER '|' $num;" >$CF
  108. echo "INSERT INTO $Tabname;" >>$CF
  109. echo 'echo `date`' Begin dbload $Tabname >>$dbload
  110. echo "dbload -d $DN -c $CF -n $number -l '`date +%Y%m%d`'.log" >>$dbload
  111. echo 'echo `date`' finished dbload $Tabname >>$dbload
  112. fi
  113. done<$TNfile
  114. echo "create control file finished."
  115. if [ -f $Ctrpath/a ];then
  116. #删除临时文件
  117. rm $TNfile $Ctrpath/a
  118. fi
  119. #判断参数-s后面参数是否正确
  120. elif [ $2 = "$TF" ];then
  121. #去除目录取文件名字
  122. TF=`basename $TF`
  123. #定义控制文件名字
  124. CF=$Ctrpath/$TF.ctr
  125. #查询表的列数
  126. echo "select ncols num from systables where tabname='$TF'"|dbaccess $DN>a
  127. num=`awk 'NR==5{print $TF}' $Ctrpath/a`
  128. #判断表列数是否为空
  129. if [ ! -z $num ];then
  130. echo "FILE $2 DELIMITER '|' $num;" >$CF
  131. echo "INSERT INTO $TF;" >>$CF
  132. echo 'echo `date`' Begin dbload $TF >$dbload
  133. echo "dbload -d $DN -c $CF -n $number -l '`date +%Y%m%d`'.log" >>$dbload
  134. echo 'echo `date`' finished dbload $TF >>$dbload
  135. fi
  136. if [ -f $Ctrpath/a ];then
  137. #删除临时文件
  138. rm $Ctrpath/a
  139. fi
  140. else
  141. echo "error:The input parameters is error"
  142. usage
  143. exit 0
  144. fi
  145. #判断是否需要后台执行导入命令,回车默认为y
  146. echo "Import data[y]: y/n"
  147. read execute
  148. if [ -z $execute ];then
  149. execute="y"
  150. fi
  151. if [ $execute = "y" ];then
  152. Impot
  153. else
  154. echo "Please manually run the script."
  155. echo "nohup $dbload >$dbloadlog &"
  156. fi

阅读(4037) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~