任务背景
由于项目处理的数据量较大,数据使用oracle数据库,数据是需要每个月建一张新表,数据只保留三个月的数据以便查证,其余的数据进行备份。
需要每个月就要创建新的数据库表,创建表空间以及表索引,每次都需要人工创建比较麻烦,所以就写了一个脚本进行自动创建,使用crond命令进行定时执行
首先需要创建一个shell脚本
1、设置系统变量和脚本所需的变量,指定存放的目录不存在则创建
#
#设置系统环境变量
#
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/db_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
#
#指定脚本必需的变量
#1.表空间文件存放路径
#3.数据库hsp用户的密码
#
dir_ts="/u01/app/oracle/oradata/orcl"
hsp_passwd=""
#
#判断变量是否已经设置
#如果有没设置的变量则退出
#
if [ -z ${dir_ts} ] || [ -z ${hsp_passwd} ];then
echo "Required variables missing(缺少必需的变量)"
exit 1
fi
#
#指定日志存放目录,如果目录不存在则创建
#
log_dir=/tmp/create_tbs_log
if [ ! -d ${log_dir} ]; then
mkdir ${log_dir}
fi
2、数据库表明是 receive_202105格式,所以获取当前时间,提前2个月进行创建,所以要判断本月创建是那年那个月的表名
# #获取当前月份,格式为YYYYMM # month=`date +%Y%m` # #从获取到的月份中分离出年份和月份 # year_now=`echo ${month}|cut -c 1-4` month_now=`echo ${month}|cut -c 5-6` # #判断月份 #如果是11月,则将年份增加1,月份改为01 #如果是12月,则将年份增加1,月份改为02 #如果是其它月份,则直接月份增加1 # if [ ${month_now} == 11 ];then month_next="01" year_next=`expr ${year_now} + 1` month="${year_next}${month_next}" elif [ ${month_now} == 12 ];then month_next="02" year_next=`expr ${year_now} + 1` month="${year_next}${month_next}" else let month+=2 fi
3、使用sysdba用户进行创建表空间,并将执行的结果保存早日志文件,创建表空间及表、索引的命令可以找开发同学获取
# #以sysdba用户创建表空间 #将命令执行结果保存到变量create_tablespace # create_tablespace=`sqlplus / as sysdba << EOF create tablespace hsp_${month} datafile ‘${dir_ts}/hsp_${month}.dbf‘ size 100M autoextend on next 100M maxsize unlimited; alter tablespace hsp_${month} add datafile ‘${dir_ts}/hsp_${month}_1.dbf‘ size 100M autoextend on next 100M maxsize unlimited; exit; EOF` # #将变量create_tablespace的值保存到日志文件 #以便出现问题后可以查询 # echo ${create_tablespace} > ${log_dir}/create_tablespace.log # #判断命令执行结果中是否有错误 #如果有错误则异常退出,nagios可据此报警 # err_create_ts=`echo ${create_tablespace} |grep -i error |wc -l` if [ ${err_create_ts} != 0 ];then echo "大网关数据库自动创建表空间时出现错误" exit 1 fi
4、使用用户进行创建表,增加索引,并将执行结果保存,使用 `echo ${file} | grep -i error | wc -l` 命令查看是否执行有错
err_create_tbs=`echo ${create_tables}|grep -i error |wc -l` if [ ${err_create_tbs} != 0 ];then echo "大网关数据库自动创建表时出现错误" exit 1 fi
使用crontab命令创建定时任务
以root用户登录服务器, 把shell脚本auto_create_ table.sh放到/home/oracle目录下
执行命令chmod +x auto_create_ table.sh ,赋予脚本执行权限
再执行chown oracle auto_create_ table.sh
切换到oracle用户,执行命令crontab -e
增加一行
00 01 25 * * /home/oracle/auto_create_ tableV1.sh
保存退出
切换回root用户,执行命令systemctl restart crond