时间:2021-07-01 10:21:17 帮助过:335人阅读
这是一个使用脚本更新数据库的一个例子.运行环境是bash shell,shell的第一个参数是go,第二个参数是sql文件的一个列表. 第一个参数实际上没有什么意义,但是它最好还是存在,它存在的目的是:不知道这个shell执行效果的人万一要运行这个脚本,在不添加go参数的时
这是一个使用脚本更新数据库的一个例子.运行环境是bash shell,shell的第一个参数是go,第二个参数是sql文件的一个列表.
第一个参数实际上没有什么意义,但是它最好还是存在,它存在的目的是:不知道这个shell执行效果的人万一要运行这个脚本,在不添加go参数的时候是不会执行的.从而保证数据库的安全.第二个参数是一个文件列表,格式如下:
tablename1,table1_sql.txt tablename2,table2_sql.txt tablename是用来更新的表的名字,table2_sql.txt得文件的内容是一些插入,更新,删除的sql语句。
具体的shell如下:
#! /bin/sh #下面是一个环境设定 TS_SYSTEM_DATE=`date ‘+%m%d%H%M%S’` TS_ZHIXING_DATE=`date ‘+%Y%m%d’` ORA_USR=${userid}/${password}@${instance}
TS_LOG_PATH=${LOG_DIR}/setup if test -d ${TS_LOG_PATH} then TS_RCODE=0 else mkdir -m 777 ${TS_LOG_PATH} fi TS_DBBACKUP_PATH=${DBBACKUP_DIR}/${TS_ZHIXING_DATE}_DBBACKUP if test -d ${TS_DBBACKUP_PATH} then TS_RCODE=0 else mkdir -m 777 -p ${TS_DBBACKUP_PATH} fi
TS_LOGFILE=${TS_LOG_PATH}/SQL_EXEC_${TS_SYSTEM_DATE}.log TS_QIAN=”QIAN” TS_HOU=”HOU” #SQL执行的LOG TS_SQL_JIKKOU=./SQLJIKKOU_${TS_SYSTEM_DATE}.dat
TS_RCODE=0
#下面3个函数是抽取出来的公共函数。重复用到多次,所以从shell主函数中提出来了。 #这个是检查表是否存在 table_exist_check() { #下面的这个语句是得到一个表存在的个数。一般为0,或1,表存在为1,没有表为0 TMPSTR=`echo $(sqlplus -s ${ora_userid}/${ora_password}@${instance} << sql_end select count(tablename) from tab where tablename=upper(‘$1′); exit sql_end)` TABLE_NUM=`echo ${TMPSTR}|awk ‘{print $3}’`
if [[ "${TABLE_NUM}" == "0" ]]; then # echo “表${1}的个数是0个`date`”| tee -a ${TS_LOGFILE} TS_RCODE=1 rm -r ${TS_INPUT_FILE} exit ${TS_RCODE} else echo “” echo “++所处理TABLE,$1存在” return 0 fi }
#表更新前后的数据,分别取出来,然后diff,看是否达到预期效果. table_QIAN_HOU() {
sqlplus -s ${ora_userid}/${ora_password}@${instance} << EOFEOF? >/dev/null set colsep’,’; set echo off; set [...]
原文地址:更新oracle数据库的shell脚本, 感谢原作者分享。