oracle分区表如何每月自动增加分区

oracle分区表如何每月自动增加分区,第1张

在oracle中如果涉及到自动的任务一般采用job的方法。

1 自己写一个存储过程。这个存储过程的目的就是给分区表增加一个分区。

2 新建一个Job,设定每个月某个时刻调用你写的存储过程

这样就能达到你每月自动增加分区的需求。

我们有一批日志数据存储在hdfs上,按天创建目录,如2018-07-31的日志hdfs路径为:/data/logs/gateway/20180731。

现在要用hive分析数据,同时要保证这些数据目录不能改变,就需要hive用外表的方式与这些数据进行关联。

示例:

但是,看下文件列表

一共108个待添加的目录,这样一个个添加太累人,有没有批量添加的方法呢?

Hive有个MSCK命令,可以扫描数据分区目录,修复元信息,目录与元信息不一致时,能自动更新。

但是,数据目录必须是Hive习惯路径格式:

同时,建表时指定LOCATION为分区目录的父目录:

这时,用命令

即可自动把所有的数据按dt分区,添加到gateway_analysis中。

由于我们的目录格式不符合,只能用ADD PARTITION的方式了。

为减少工作量,写了个shell脚本,自动添加 /data/logs/gateway 目录下所有的分区目录到gateway_analysis表中:

代码如下:

#!/bin/bash

#Author: MOS

#Script name: funPart.sh

#Date &Time: 2012-10-10/12:20:53

#Version: 1.0.1

#Description:

# Disk_Mod(){

#使用if匹配模式,使用for循环判断是否存在,如果有,则取其绝对路径,跳出循环,如果不匹配或文件不存在,跳出函数,返回66

if [[ -n $1 &&$1 =~ "/dev/sd[a-z]" ]]

then local Darray=(ls /dev/sd[a-z])

for i in ${Darray[*]}do

[[ "$i" == "$1" ]] &&Sd=$i && break

done

else

return 66

fi

#当匹配成功,进入选择,告诉用户,是否继续,输错的话进入无限循环,当用户选择Y,则清空目标分区,且跳出while循环

while :do

read -p "Warning!!!This operation will clean $Sd data. Next=y,Quit=n [y|n]: " Choice

case $Choice in

y)

dd if=/dev/zero of=$Sd bs=512 count=1 &>/dev/null &&break || return 67 n)

exit 88

*)

echo "Invalid choice,please choice again."

esac

done

#使用echo传递给fdisk进行分区,如果此命令失败,则跳转出去,错误值68,需要注意的是,有时候这个返回值很诡异,笔者之前成功与否都是返回的1,后来重启之后,就好了,如果慎重的话,可以对创建的分区,进行判断,不过就需要使用其他工具截取相关字段了,虽有些小麻烦,但无大碍 echo -e "n\np\n1\n\n+100M\nn\np\n2\n\n+1024M\nw\n"|fdisk /dev/sdb &> /dev/null || return 68 #格式化之前,让内核重新读取磁盘分区表,值得注意的是,有的系统版本,使用partprobe无效,譬如笔者的环境是rhel5.8,而rhel6.0以后,这个命令就很危险了,而使用partx -a /dev/sdb则效果更好...此项需慎重,如果格式化失败,则告知把失败的分区定义成变量,且跳出函数,并带出错误值69

partprobe Part=fdisk -l /dev/$Sd|tail -2|cut -d" " -f1`

for M in ${Part[*]}do

! mke2fs -j $M &>/dev/null &&ErrorPart=$M && return 69

done

return 0

}

#下面代码,调用函数,接收函数返回值,根据返回值进行判断哪里出错。

Disk_Mod $1

Res=$?

[ $Res -eq 0 ] &&exit 0

[ $Res -eq 66 ] &&echo "Error! Invalid input."

[ $Res -eq 67 ] &&echo "Error! Command ->dd <- Faild."

[ $Res -eq 68 ] &&echo "Error! Command ->fdisk <- Faild."

[ $Res -eq 69 ] &&echo "Error! Command ->mke2fs <- Faild."

如果有什么不懂的话可以去看看《Linux就该这么学》这本书,非常适合新手学习Linux。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11621117.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存