Advertisement
Guest User

Untitled

a guest
Nov 9th, 2016
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.56 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. #------------------
  4. # variables
  5. #------------------
  6.  
  7. def_dirname=/tmp
  8. def_filename=full_export.dmp
  9. ora_dirname=temporarydirectoryforexport
  10. overwrite_dumpfile=n
  11. tmpfile=JustATemporaryFile
  12.  
  13. #------------------
  14. # functions
  15. #------------------
  16.  
  17. function readDBConn() {
  18. ok=false
  19. while ! $ok; do
  20. # read username and password
  21. read -p "Please enter a username with privileges to export the database [leave empty to use '/ as sysdba']: " dbuser
  22. if [ -z "${dbuser}" ]; then
  23. conn_string="/ as sysdba"
  24. # the extra_sql is needed for cases when we connect with sysdba but the instance is not open
  25. extra_sql="select 1 from dba_data_files where rownum=1;"
  26. else
  27. read -s -p "Please enter ${dbuser}'s password: " dbpwd
  28. conn_string=${dbuser}/${dbpwd}
  29. extra_sql=""
  30. echo
  31. fi
  32. # try to connect to Oracle
  33. $ORACLE_HOME/bin/sqlplus -s /nolog <<- EOF > /dev/null 2>&1
  34. set feedback off pages 0
  35. whenever sqlerror exit 1
  36. conn ${conn_string}
  37. ${extra_sql}
  38. exit
  39. EOF
  40. if [ $? -ne 0 ]; then
  41. # can't connect, try again
  42. echo "Cannot connect to Oracle"
  43. echo
  44. else
  45. # connected
  46. ok=true
  47. fi
  48. done
  49. }
  50.  
  51. function readInput() {
  52. # read input from user
  53. read -p "Please enter Oracle Home to use for export [leave empty to use '${ORACLE_HOME}']: " ORA_HOME
  54. export ORACLE_HOME=${ORA_HOME:=${ORACLE_HOME}}
  55. read -p "Please enter database SID [leave empty to use '${ORACLE_SID}']: " ORA_SID
  56. export ORACLE_SID=${ORA_SID:=${ORACLE_SID}}
  57. readDBConn
  58. read -p "Please enter directory for the dump file [leave empty to use '${def_dirname}']: " dirname
  59. dirname=${dirname:=${def_dirname}}
  60. read -p "Please enter dump file name [leave empty to use '${def_filename}']: " filename
  61. filename=${filename:=${def_filename}}
  62. # append .dmp if there isn't
  63. filename=${filename/%\.dmp/}.dmp
  64. # generate log file name with the same name as the dump file but .log
  65. logfilename=${filename/%\.dmp/\.log}
  66. }
  67.  
  68. function confirm() {
  69. # list all input and ask for confirmation
  70. echo
  71. echo "Export will use the following:"
  72. echo "------------------------------"
  73. echo "Oracle home: ${ORACLE_HOME}"
  74. echo "Oracle SID: ${ORACLE_SID}"
  75. echo "Export will be done by: ${dbuser:=sys as sysdba}"
  76. echo "Export file: ${dirname}/${filename}"
  77. echo "Log file: ${dirname}/${logfilename}"
  78. echo
  79. read -p "Is this ok? [y for yes, anything else to abort]: " v_confirm
  80. if [ "${v_confirm}" != "y" ]; then
  81. echo "Export aborted!"
  82. exit
  83. fi
  84. echo
  85. }
  86.  
  87. function checkDir() {
  88. # check if the directory exists and if we can write to it
  89. if [ -d ${dirname} ]; then
  90. # directory exists
  91. touch ${dirname}/${tmpfile} > /dev/null 2>&1
  92. if [ $? -eq 0 ]; then
  93. # can write to the firectory
  94. rm ${dirname}/${tmpfile}
  95. else
  96. # cannot write to the directory
  97. echo "Cannot create a file in '${dirname}'"
  98. exit 1
  99. fi
  100. else
  101. # direcroty does not exist
  102. read -p "Directory '${dirname}' does not exist, create it? [y for yes, anything else to abort]: " v_confirm
  103. if [ "${v_confirm}" != "y" ]; then
  104. echo "Export aborted!"
  105. exit
  106. else
  107. # create the directory
  108. mkdir -p ${dirname} > /dev/null 2>&1
  109. if [ $? -ne 0 ]; then
  110. echo "Cannot create directory '${dirname}'"
  111. exit 1
  112. fi
  113. fi
  114. fi
  115. }
  116.  
  117. function checkFile() {
  118. # check if the file exists
  119. if [ -f ${dirname}/${filename} ]; then
  120. # file exists
  121. read -p "File '${dirname}/${filename}' already exist, overwrite? [y for yes, anything else to abort]: " v_confirm
  122. if [ "${v_confirm}" != "y" ]; then
  123. echo "Export aborted!"
  124. exit
  125. else
  126. overwrite_dumpfile=y
  127. fi
  128. fi
  129. }
  130.  
  131. function createOracleDir() {
  132. # creating directory in Oracle for the export
  133. $ORACLE_HOME/bin/sqlplus -s /nolog <<- EOF > /dev/null 2>&1
  134. set feedback off
  135. whenever sqlerror exit 1
  136. conn ${conn_string}
  137. create directory ${ora_dirname} as '${dirname}';
  138. exit
  139. EOF
  140. if [ $? -ne 0 ]; then
  141. echo "Cannot create Oracle directory"
  142. exit 1
  143. fi
  144. }
  145.  
  146. function runExport() {
  147. # generate the overwrite clause for data pump
  148. overwrite_clause=""
  149. [[ "${overwrite_dumpfile}" == "y" ]] && overwrite_clause="reuse_dumpfiles=Y"
  150.  
  151. # run the export and save the exit code
  152. echo
  153. echo -n "Exporting the database... "
  154. $ORACLE_HOME/bin/expdp \"${conn_string}\" full=y directory=${ora_dirname} dumpfile=${filename} logfile=${logfilename} ${overwrite_clause} > /dev/null 2>&1
  155. export_rc=$?
  156. echo "Done"
  157. }
  158.  
  159. function dropOracleDir() {
  160. # delete the directory in Oracle
  161. $ORACLE_HOME/bin/sqlplus -s /nolog <<- EOF > /dev/null 2>&1
  162. set feedback off
  163. whenever sqlerror exit 1
  164. conn ${conn_string}
  165. drop directory ${ora_dirname};
  166. exit
  167. EOF
  168. if [ $? -ne 0 ]; then
  169. echo "Cannot drop Oracle directory"
  170. exit 1
  171. fi
  172. }
  173.  
  174. #------------------
  175. # main
  176. #------------------
  177.  
  178. echo
  179. echo "Welcome to the export assistant"
  180. echo "==============================="
  181. echo
  182.  
  183. readInput
  184. confirm
  185. checkDir
  186. checkFile
  187. createOracleDir
  188. runExport
  189. dropOracleDir
  190.  
  191. echo
  192. if [ ${export_rc} -ne 0 ]; then
  193. echo "Export failed!"
  194. exit 1
  195. else
  196. echo "Export completed successfully!"
  197. fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement