kamdbctl.oracle 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. #!/bin/sh
  2. #
  3. # Script for adding and dropping Kamailio Oracle tables
  4. #
  5. # History:
  6. ##In you not have 'AS SYSDBA' access to database connect, comment next string
  7. ##and Oracle administrator must create DBROOTUSER
  8. ##(see scripts/oracle/admin/_create_as_sys.tmpl)
  9. DBSYSUSER="sys"
  10. # path to the database schemas
  11. DATA_DIR="/usr/local/share/kamailio"
  12. if [ -d "$DATA_DIR/oracle" ] ; then
  13. DB_SCHEMA="$DATA_DIR/oracle"
  14. else
  15. DB_SCHEMA="./oracle"
  16. fi
  17. ##### ----------------------------------------------- #####
  18. ### load ORACLE SQL base
  19. #
  20. if [ -f "$MYLIBDIR/kamdbfunc.oracle" ]; then
  21. . "$MYLIBDIR/kamdbfunc.oracle"
  22. else
  23. echo "Cannot load ORACLE core functions '$MYLIBDIR/kamdbfunc.oracle' - exiting ..."
  24. exit -1
  25. fi
  26. if [ -z "$SQLPLUS" ] ; then
  27. SQLPLUS=`which sqlplus 2>/dev/null`
  28. if [ -z "$SQLPLUS" ]; then
  29. merr "'sqlplus' tool not found: set SQLPLUS variable to correct tool path"
  30. exit 1
  31. fi
  32. export SQLPLUS
  33. fi
  34. if [ -z "$KAMAILIO_ORASEL" ] ; then
  35. KAMAILIO_ORASEL=`which kamailio_orasel 2>/dev/null`
  36. if [ -n "$SQLPLUS" ]; then
  37. export KAMAILIO_ORASEL
  38. fi
  39. fi
  40. #################################################################
  41. ORALOG=/tmp/opensrdbctl.log
  42. if [ -z "$SED" ]; then
  43. SED="sed"
  44. fi
  45. SED_ROOTUSER="$SED -e s/%DBROOTUSER%/$DBROOTUSER/g"
  46. SED_USERS="$SED_ROOTUSER;s/%DBROUSER%/$DBROUSER/g;s/%DBRWUSER%/$DBRWUSER/g"
  47. #################################################################
  48. # config vars
  49. #################################################################
  50. # 'db'-privileges (scheme) Oracle user
  51. if [ -z "$DBROOTUSER" ]; then
  52. merr "scheme owner (pivileged user) 'DBROOTUSER' must be defined."
  53. exit 1
  54. fi
  55. #################################################################
  56. oracle_root_cmd()
  57. {
  58. prompt_oracle_pw root
  59. SUFF=""
  60. if [ -n "$1" ]; then
  61. SUFF="@$1"
  62. fi
  63. ORACLE_ROOT_CMD="$SQLPLUS -S -L -R 3 $DBROOTUSER/${DBROOTPW}$SUFF"
  64. export ORACLE_ROOT_CMD
  65. }
  66. kamailio_drop() # pars: <database name>
  67. {
  68. if [ $# -ne 1 ] ; then
  69. merr "kamailio_drop function takes one params"
  70. exit 1
  71. fi
  72. oracle_root_cmd $1
  73. echo "DROP USER $DBROUSER CASCADE;
  74. DROP USER $DBRWUSER CASCADE;" | $ORACLE_ROOT_CMD >$ORALOG
  75. if [ $? -ne 0 ] || check_oracle_log ; then
  76. mwarn "Could not drop $DBRWUSER or $DBROUSER users, try to continue.."
  77. else
  78. minfo "Database user deleted"
  79. fi
  80. $SED_ROOTUSER $DB_SCHEMA/inc/_dropsch.tmpl | $ORACLE_ROOT_CMD >$ORALOG
  81. if [ $? -ne 0 ] || check_oracle_log ; then
  82. merr "Dropping scheme for '$DBROOTUSER' in database '$1' failed!"
  83. exit 1
  84. fi
  85. if [ -n "$DBSYSUSER" ]; then
  86. get_answer "ask" "Remove user '$DBROOTUSER' (complete remove scheme)? (y/n): "
  87. if [ "$ANSWER" = "y" ]; then
  88. prompt_oracle_pw sys
  89. SUFF=""
  90. if [ -n "$1" ]; then
  91. SUFF="@$1"
  92. fi
  93. SYSCMD="$SQLPLUS -S -L -R 3 $DBSYSUSER/${DBSYSPW}$SUFF AS SYSDBA"
  94. echo "DROP USER $DBROOTUSER CASCADE;" | $SYSCMD >$ORALOG
  95. if [ $? -ne 0 ] || check_oracle_log ; then
  96. merr "Dropping scheme in database '$1' failed!"
  97. exit 1
  98. fi
  99. fi
  100. fi
  101. minfo "Scheme '$DBROOTUSER' in database '$1' dropped"
  102. } #kamailio_drop
  103. kamailio_create() # pars: <database name>
  104. {
  105. if [ $# -ne 1 ] ; then
  106. merr "kamailio_create function takes one param"
  107. exit 1
  108. fi
  109. minfo "creating scheme for '$DBROOTUSER' in database '$1' ..."
  110. if [ -n "$DBSYSUSER" ]; then
  111. get_answer "ask" "Create user '$DBROOTUSER' (is new scheme)? (y/n): "
  112. if [ "$ANSWER" = "y" ]; then
  113. prompt_oracle_pw sys
  114. prompt_oracle_pw root
  115. SUFF=""
  116. if [ -n "$1" ]; then
  117. SUFF="@$1"
  118. fi
  119. SYSCMD="$SQLPLUS -S -L -R 3 $DBSYSUSER/${DBSYSPW}$SUFF AS SYSDBA"
  120. echo "create user $DBROOTUSER identified by $DBROOTPW
  121. default tablespace DATA temporary tablespace TEMP
  122. profile DEFAULT;" | $SYSCMD >$ORALOG
  123. if [ $? -ne 0 ] || check_oracle_log ; then
  124. mwarn "Create privileged user in database failed, perhaps they allready exist? Try to continue.."
  125. fi
  126. $SED_ROOTUSER $DB_SCHEMA/inc/_grantroot.tmpl | $SYSCMD >$ORALOG
  127. if [ $? -ne 0 ] || check_oracle_log ; then
  128. merr "Creating scheme in database '$1' failed!"
  129. exit 1
  130. fi
  131. fi
  132. fi
  133. oracle_root_cmd $1
  134. $SED_ROOTUSER $DB_SCHEMA/inc/_createsch.tmpl | $ORACLE_ROOT_CMD >$ORALOG
  135. if [ $? -ne 0 ] || check_oracle_log ; then
  136. merr "Creating scheme for '$DBROOTUSER' in database '$1' failed!"
  137. exit 1
  138. fi
  139. cat $DB_SCHEMA/inc/_create_compat.sql | $ORACLE_ROOT_CMD >$ORALOG
  140. if [ $? -ne 0 ] || check_oracle_log ; then
  141. merr "Creating compatibility functions for '$DBROOTUSER' in database '$1' failed!"
  142. exit 1
  143. fi
  144. prompt_oracle_pw rw
  145. prompt_oracle_pw ro
  146. echo "create user $DBROUSER identified by $DBROPW
  147. default tablespace DATA temporary tablespace TEMP profile DEFAULT;
  148. grant connect to $DBROUSER;
  149. create user $DBRWUSER identified by $DBRWPW
  150. default tablespace DATA temporary tablespace TEMP profile DEFAULT;
  151. grant connect to $DBRWUSER;" | $ORACLE_ROOT_CMD >$ORALOG
  152. if [ $? -ne 0 ] || check_oracle_log ; then
  153. mwarn "Create user in database scheme failed, perhaps they allready exist? Try to continue.."
  154. fi
  155. $SED_USERS $DB_SCHEMA/inc/_grantfunc.tmpl | $ORACLE_ROOT_CMD >$ORALOG
  156. if [ $? -ne 0 ] || check_oracle_log ; then
  157. merr "Make compatibility functions for users failed!"
  158. exit 1
  159. fi
  160. for TABLE in $STANDARD_MODULES; do
  161. mdbg "Creating core table: $TABLE"
  162. cat $DB_SCHEMA/$TABLE-create.sql | $ORACLE_ROOT_CMD >$ORALOG
  163. if [ $? -ne 0 ] || check_oracle_log ; then
  164. merr "Creating core tables failed!"
  165. exit 1
  166. fi
  167. done
  168. if [ -e $DB_SCHEMA/extensions-create.sql ]; then
  169. minfo "Creating custom extensions tables"
  170. cat $DB_SCHEMA/extensions-create.sql | $ORACLE_ROOT_CMD >$ORALOG
  171. if [ $? -ne 0 ] || check_oracle_log ; then
  172. merr "Creating custom extensions tables failed!"
  173. exit 1
  174. fi
  175. fi
  176. minfo "Core Kamailio tables succesfully created."
  177. get_answer $INSTALL_PRESENCE_TABLES "Install presence related tables? (y/n): "
  178. if [ "$ANSWER" = "y" ]; then
  179. presence_create $1
  180. fi
  181. get_answer $INSTALL_EXTRA_TABLES "Install tables for $EXTRA_MODULES? (y/n): "
  182. if [ "$ANSWER" = "y" ]; then
  183. extra_create $1
  184. fi
  185. } # kamailio_create
  186. presence_create() # pars: <database name>
  187. {
  188. if [ $# -ne 1 ] ; then
  189. merr "presence_create function takes one param"
  190. exit 1
  191. fi
  192. minfo "creating presence tables..."
  193. oracle_root_cmd $1
  194. cat $DB_SCHEMA/presence-create.sql | $ORACLE_ROOT_CMD >$ORALOG
  195. if [ $? -ne 0 ] || check_oracle_log ; then
  196. merr "Failed to create presence tables!"
  197. exit 1
  198. fi
  199. cat $DB_SCHEMA/rls-create.sql | $ORACLE_ROOT_CMD >$ORALOG
  200. if [ $? -ne 0 ] || check_oracle_log ; then
  201. merr "Failed to create rls-presence tables!"
  202. exit 1
  203. fi
  204. minfo "Presence tables succesfully created."
  205. }
  206. extra_create() # pars: <database name>
  207. {
  208. if [ $# -ne 1 ] ; then
  209. merr "extra_create function takes one param"
  210. exit 1
  211. fi
  212. minfo "creating extra tables..."
  213. oracle_root_cmd $1
  214. for TABLE in $EXTRA_MODULES; do
  215. mdbg "Creating extra table: $TABLE"
  216. cat $DB_SCHEMA/$TABLE-create.sql | $ORACLE_ROOT_CMD >$ORALOG
  217. if [ $? -ne 0 ] || check_oracle_log ; then
  218. merr "Creating extra tables failed!"
  219. exit 1
  220. fi
  221. done
  222. minfo "Extra tables succesfully created."
  223. }
  224. oracle_dump()
  225. {
  226. if [ $# -ne 2 ] ; then
  227. merr "oracle_dump function takes two params"
  228. exit 1
  229. fi
  230. prompt_oracle_pw rw
  231. if [ -n "$1" ]; then
  232. SUFF="@$1"
  233. fi
  234. if [ -n "$KAMAILIO_ORASEL" ]; then
  235. $KAMAILIO_ORASEL ${DBROUSER}/${DBROPW}$SUFF -BLNe \
  236. "select * from table(dump_tables('$DBROOTUSER'));" >$2
  237. else
  238. echo "set feed 0 lin 8000 pages 0
  239. select * from table(dump_tables('$DBROOTUSER'));" | \
  240. $SQLPLUS -S -L -R 3 ${DBROUSER}/${DBROPW}$SUFF >$2
  241. fi
  242. return $?
  243. }
  244. oracle_restore()
  245. {
  246. if [ $# -ne 2 ] ; then
  247. merr "oracle_restore function takes two params"
  248. exit 1
  249. fi
  250. prompt_oracle_pw rw
  251. SUFF=""
  252. if [ -n "$1" ]; then
  253. SUFF="@$1"
  254. fi
  255. cat "$2" | $SQLPLUS -S -L -R 3 ${DBRWUSER}/${DBRWPW}$SUFF >$ORALOG
  256. if [ $? -ne 0 ] || check_oracle_log ; then
  257. return 1
  258. fi
  259. return 0
  260. }