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

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

文章分类

全部博文(25)

文章存档

2015年(3)

2014年(4)

2013年(3)

2012年(9)

2011年(6)

我的朋友

分类: Oracle

2014-01-27 11:17:37


点击(此处)折叠或打开

  1. #!/bin/sh
  2. #******************************************************************
  3. # File: oraclebak.sh
  4. # Creation Date: 2014/1/22 17:57:32
  5. # Last Modified: 2014/1/22 17:57:34
  6. # 脚本功能:oracle备份脚本
  7. # 执行方法:1、第一次执行需要root用户执行,脚本会以询问的方式创建备份目录和相关参数
  8. # 2、脚本会自动写入crontab调度里面定时执行,crontab设置是在第一次执行的时候自动添加的
  9. #******************************************************************
  10. echo $USER
  11. if [ $USER != root ]
  12. then
  13. echo "检测到安装用户不是root用户,请用root用户登录再执行安装文件"
  14. exit 1
  15. fi
  16. echo "开始安装oracle数据库备份工具.........................."
  17. echo "请输入备份程序的安装目录:"
  18. read installdir
  19. mkdir -p $installdir
  20. result=$?
  21. while [ $result -ne 0 ]
  22. do
  23. echo "无法创建目录,请重新输入或退出安装。输入y重新输入,输入n退出安装。"
  24. read redo
  25. if [ $redo != y ]
  26. then
  27. echo "用户退出安装。"
  28. exit 0
  29. fi
  30. echo "请输入备份程序的安装目录:"
  31. read installdir
  32. mkdir $installdir
  33. result=$?
  34. done
  35. echo "安装目录创建完成。"
  36. echo "请输入执行备份用户(一般为oracle用户):"
  37. read execuser
  38. id $execuser
  39. result=$?
  40. while [ $result -ne 0 ]
  41. do
  42. echo "不存在该用户,是否更换其它用户或者退出安装新建用户,输入y更换用户,输入n退出安装"
  43. read redo
  44. if [ $redo != y ]
  45. then
  46. echo "用户退出安装"
  47. exit 0
  48. fi
  49. echo "请输入执行备份的用户(一般为tnmsdb2用户)"
  50. read execuser
  51. id $execuser
  52. result=$?
  53. done

  54. echo "你希望建立备份的数据库数量(一般为1)"
  55. read backnum
  56. if [ $backnum -eq 0 ]
  57. then
  58. echo "无备份数据库,退出安装"
  59. exit 0
  60. fi
  61. scount=0
  62. while [ $scount -lt $backnum ]
  63. do
  64. echo "请输入第"$(($scount+1))"个备份登录登录oracle数据库的用户名和密码,以及本地服务名"
  65. echo "用户名"
  66. read username[$scount]
  67. echo "密码"
  68. read password[$scount]
  69. echo "服务名"
  70. read sname[$scount]
  71. su -l -c"sqlplus /nolog" $execuser<<insert
  72. whenever sqlerror exit sql.sqlcode;
  73. connect ${username[$scount]}/${password[$scount]}@${sname[$scount]}
  74. exit
  75. insert
  76. result=$?
  77. if [ $result -ne 0 ]
  78. then
  79. echo "输入数据库信息无法被连接,是否重新输入?输入y重新输入,输入n退出安装。"
  80. read redo
  81. if [ $redo != y ]
  82. then
  83. echo "用户退出安装"
  84. exit 0
  85. fi
  86. else
  87. scount=$(($scount+1))
  88. fi
  89. done

  90. echo "输入值守时间,值守时间的格式为 mm hh dd MM E 。"
  91. echo "m代表分钟,h代表小时,d代表日期,M代表月份,E代表星期"
  92. echo "不输入则为任意时间"
  93. scount=0
  94. iscontinue=y
  95. while [ $iscontinue == y ]
  96. do
  97. echo "输入第$(($scount+1))个值守时间"
  98. echo "分钟"
  99. read min
  100. echo "小时"
  101. read hour
  102. echo "日期"
  103. read day
  104. if [ ! $day ]
  105. then
  106. day="*"
  107. fi
  108. echo "月份"
  109. read mouth
  110. if [ ! $mouth ]
  111. then
  112. mouth="*"
  113. fi
  114. week="*"
  115. backtime[$scount]="$min $hour $day $mouth $week"

  116. echo -e "${backtime[$scount]}"
  117. echo "是否输入更多值守时间?输入y继续,输入n进入下一步。"
  118. read iscontinue
  119. scount=$(($scount+1))
  120. done
  121. echo "是否要进行远程备份?输入y为进行远程备份,输入n进入下一步"
  122. scount=0
  123. read iscontinue
  124. while [ $iscontinue == y ]
  125. do
  126. echo "请选择远程备份类型,输入s为sftp备份类型,否则为ftp备份类型"
  127. read iss
  128. if [ $iss == s ]
  129. then
  130. rtype[$scount]="sftp"
  131. else
  132. rtype[$scount]="ftp"
  133. fi
  134. echo "请输入远程备份地址,可以为域名,计算机名或者ip地址"
  135. read rurl[$scount]
  136. echo "请输入远程备份登录名"
  137. read rname[$scount]
  138. echo "请输入远程备份登录密码"
  139. read rpass[$scount]
  140. echo "是否输入更多远程备份地址?输入y重新输入,n进入下一步"
  141. read iscontinue
  142. scount=$(($scount+1))
  143. done
  144. # installdir
  145. # execuser
  146. # username password sname
  147. # backtime
  148. # rtype rurl rname rpass

  149. echo "您所作的备份配置如下:"
  150. sresult=$(echo -n "$installdir" | grep '^/')
  151. if [ ! $sresult ]
  152. then
  153. installdir="$PWD/$installdir"
  154. else
  155. installdir=$installdir
  156. fi
  157. echo "本地备份目录为$installdir"
  158. echo "执行备份系统用户为$execuser"
  159. echo "系统备份数据库:"
  160. allcount=${#username[@]}
  161. scount=0
  162. while [ $scount -lt $allcount ]
  163. do
  164. echo "${username[$scount]}/${password[$scount]}@${sname[$scount]}"
  165. scount=$(($scount+1))
  166. done
  167. echo "执行备份的值守时间表,*代表任意"
  168. scount=0
  169. backnum=${#backtime[@]}
  170. while [ $scount -lt $backnum ]
  171. do
  172. echo "${backtime[$scount]}"
  173. scount=$(($scount+1))
  174. done
  175. rnum=${#rtype[@]}

  176. if [ $rnum -ne 0 ]
  177. then
  178. echo "远程备份的服务地址为:"
  179. scount=0
  180. while [ $scount -lt $rnum ]
  181. do
  182. echo "连接方式:${rtype[$scount]},连接地址:${rurl[$scount]},用户名:${rname[$scount]},密码:${rpass[$scount]}"
  183. scount=$(($scount+1))
  184. done
  185. fi
  186. echo "是否确认安装?输入y继续,输入n退出安装"
  187. read isgoon
  188. if [ $isgoon != y ]
  189. then
  190. exit 0;
  191. fi
  192. echo "正在生产目录结构................................";
  193. mkdir -p $installdir/logs
  194. mkdir -p $installdir/temp
  195. mkdir -p $installdir/zip
  196. chown -Rvf $execuser $installdir
  197. echo "目录结构生成完成................................"
  198. echo "生成备份执行文件................................"
  199. echo "#!/bin/bash">$installdir/runback.sh
  200. echo "source ~/.bash_profile">>$installdir/runback.sh
  201. echo "nowdate=\$(date +%Y-%m-%d_%k.%M.%S)">>$installdir/runback.sh
  202. echo "nowmouth=\$(date +%Y-%m)">>$installdir/runback.sh
  203. echo "echo \"\$nowdate开始备份.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.sh
  204. scount=0
  205. snum=${#username[@]}
  206. while [ $scount -lt $snum ]
  207. do
  208. echo "exp ${username[$scount]}/${password[$scount]}@${sname[$scount]} file=$installdir/temp/${username[$scount]}_${sname[$scount]}\$nowdate.dmp compress=N>>$installdir/logs/\$nowmouth.log 2>&1">>$installdir/runback.sh
  209. scount=$(($scount+1))
  210. done
  211. echo "echo \"\$(date +%Y-%m-%d_%k.%M.%S)完成备份.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.sh
  212. echo "echo \"\$(date +%Y-%m-%d_%k.%M.%S)开始打包.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.sh
  213. echo "gzip $installdir/zip/\$nowdate.zip $installdir/temp/>>$installdir/logs/\$nowmouth.log 2>&1">>$installdir/runback.sh
  214. echo "rm -Rvf $installdir/temp/*>>$installdir/logs/\$nowmouth.log 2>&1">>$installdir/runback.sh
  215. echo "echo \"\$(date +%Y-%m-%d_%k.%M.%S)打包完成.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.sh
  216. scount=0
  217. if [ ${#rtype[@]} -ne 0 ]
  218. then
  219. echo "echo \"\$(date +%Y-%m-%d_%k.%M.%S)进行远程备份.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.sh
  220. snum=${#rtype[@]}
  221. while [ $scount -lt $snum ]
  222. do
  223. echo "lftp -u ${rname[$scount]},${rpass[$scount]} ${rtype[$scount]}://${rurl[$scount]}<>>$installdir/runback.sh
  224. echo "mkdir remotedbback">>$installdir/runback.sh
  225. echo "cd remotedbback">>$installdir/runback.sh
  226. echo "mput $installdir/zip/\$nowdate.zip">>$installdir/runback.sh
  227. echo "exit">>$installdir/runback.sh
  228. echo "remote">>$installdir/runback.sh
  229. scount=$(($scount+1))
  230. done
  231. echo "echo \"\$(date +%Y-%m-%d_%k.%M.%S)完成远程备份.......................................\">>$installdir/logs/\$nowmouth.log">>$installdir/runback.sh
  232. fi
  233. echo "exit 0">>$installdir/runback.sh
  234. chmod 775 $installdir/runback.sh
  235. chown $execuser $installdir/runback.sh
  236. echo "生成备份执行文件完成............................"
  237. echo "开始定制值守时间................................"
  238. scount=0
  239. snum=${#backtime[@]}
  240. while [ $scount -lt $snum ]
  241. do
  242. echo "${backtime[$scount]} $installdir/runback.sh">>$installdir/planlist
  243. scount=$(($scount+1))
  244. done
  245. su -l -c"crontab $installdir/planlist" oracle
  246. echo "完成值守时间定制................................"
  247. exit 0

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