半自动化运维之动态添加数据文件(二) (r5笔记第56天)
时间:2022-05-04
本文章向大家介绍半自动化运维之动态添加数据文件(二) (r5笔记第56天),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
接着上一篇的内容:半自动化运维之动态添加数据文件(一) (r5笔记第55天)
我们可以通过监控表空间的情况,然后映射匹配文件系统中的挂载点情况,通过随机函数在各个分区中进行筛选,基本保证数据文件的创建能够分散到各个分区中。 接下来我们需要根据计算得到的挂载点,匹配创建数据文件的语句,比如数据文件为pool_data_45.dbf 这个时候我们就需要把数据文件自增,显示为pool_data_46.dbf. 为了统一管理我们可以定义一些基本的统一规则,这样在处理的时候就很方便了。 实现代码如下: 一个表空间对应的数据文件可能有很多,我们需要根据createion_time来得到最新的数据文件
conn_str=n1/n1
print "
conn $conn_str
set feedback off
set pages 0
select name from v$datafile where ts#=(select ts# from v$tablespace where name=upper('$new_TS_name')) order by creation_time;
" |sqlplus -s /nolog |tail -1 > last_dbf_ts.lst
然后解析数据文件的格式,把之前得到的挂载点信息和现有的做一个替换。
old_mount=`awk -F"/" '{print $2}' last_dbf_ts.lst`
new_mount=`cat tmp_FS_mount|sed -n "${tmp_random}p"|awk '{print $3}' |awk -F"/" '{print $2}'`
#echo $new_mount
#echo $old_mount
对于数据文件的修改,可以参考下面的代码,基本就是解析出文件名,然后对文件id+1,继续替换。
#/oravl03/oradata/GLBABP1/pool_data_45.dbf
tmp_dbf_path1=`sed "s/${old_mount}/${new_mount}/" last_dbf_ts.lst`
#pool_data_45
tmp_dbf_name1=`sed "s/${old_mount}/${new_mount}/" last_dbf_ts.lst|awk -F. '{print $1}' | awk -F"/" '{print $NF}'`
#45
tmp_dbf_id1=`sed "s/${old_mount}/${new_mount}/" last_dbf_ts.lst|awk -F. '{print $1}' | awk -F"/" '{print $NF}'|awk -F_ '{print $NF}'`
#46
tmp_dbf_id2=`expr $tmp_dbf_id1 + 1`
#pool_data_46
tmp_dbf_name2=`echo $tmp_dbf_name1 |sed "s/${tmp_dbf_id1}/${tmp_dbf_id2}/"`
tmp_dbf_path2=`echo $tmp_dbf_path1|sed "s/${tmp_dbf_name1}/${tmp_dbf_name2}/"`
替换完成之后,新的文件路径和文件名就生成了,先打印出来看看,如果需要设置为后台执行,也没有问题,直接嵌入sqlplus即可。
echo "alter tablespace $new_TS_name add datafile '$tmp_dbf_path2' size ${new_file_size}k;"
执行的情况如下,可以看到得到的挂载点是在满足条件的情况下,根据随机函数得到的,数据文件的id也进行了自增。
> ksh add_dbf.sh pool_data
alter tablespace pool_data add datafile '/oravl07/oradata/XXXX/pool_data_47.dbf' size 2000000k;
> ksh add_dbf.sh pool_datav
alter tablespace pool_data add datafile '/oravl07/oradata/XXXX/pool_data_47.dbf' size 2000000k;
>ksh add_dbf.sh pool_data
alter tablespace pool_data add datafile '/oravl03/oradata/XXXX/pool_data_47.dbf' size 2000000k;
> ksh add_dbf.sh pool_data
alter tablespace pool_data add datafile '/oravl06/oradata/XXXX/pool_data_47.dbf' size 2000000k;
> ksh add_dbf.sh pool_data
alter tablespace pool_data add datafile '/oravl07/oradata/XXXX/pool_data_47.dbf' size 2000000k;
>ksh add_dbf.sh pool_data
alter tablespace pool_data add datafile '/oravl05/oradata/XXXX/pool_data_47.dbf' size 2000000k;
对于表空间监控外的脚本,进行整理如下,这样就可以是一个独立的脚本,能够根据输入的表空间名进行分析和映射,还有一些基本的验证。 如果空间不足,或者表空间有误都会抛出警告信息。
#kB
new_file_size=2000000
#TS name
new_TS_name=$1
conn_str=aim_dba/aim_dba
print "
conn $conn_str
set feedback off
set pages 0
select file_name from dba_data_files where tablespace_name=upper('$new_TS_name');
" |sqlplus -s /nolog |awk -F"/" '{print "/"$2}'|sort|uniq|awk '{print "df -k |grep -i ""$1 """}' > df_k_chk_tmp.ksh
if [ ! -s df_k_chk_tmp.ksh ]
then
echo 'WARNING! there is someting wrong with TS name,please check again'
ksh df_k_chk_tmp.ksh
exit
fi
function get_random
{
min=$1;
max=$2
num=$(date +%s+%N);
((retnum=num%max+min));
echo $retnum;
}
function get_db_file_mount
{
ksh $1 | awk -v file_size=$new_file_size 'NR>=1{ if($(NF-2)-file_size>0) print $(NF-2),$(NF-1),$NF}' |sort
}
get_db_file_mount df_k_chk_tmp.ksh $new_file_size > tmp_FS_mount
if [ ! -s tmp_FS_mount ]
then
echo 'WARNING! there is no enough space to add datafiles,file size needed:' ${new_file_size}k
ksh df_k_chk_tmp.ksh
exit
fi
tmp_FS_mount_cnt=`cat tmp_FS_mount|wc -l`
#echo $tmp_FS_mount_cnt
tmp_random=`get_random 1 ${tmp_FS_mount_cnt}`
#echo $tmp_random
conn_str=aim_dba/aim_dba
print "
conn $conn_str
set feedback off
set pages 0
select name from v$datafile where ts#=(select ts# from v$tablespace where name=upper('$new_TS_name')) order by creation_time;
" |sqlplus -s /nolog |tail -1 > last_dbf_ts.lst
old_mount=`awk -F"/" '{print $2}' last_dbf_ts.lst`
new_mount=`cat tmp_FS_mount|sed -n "${tmp_random}p"|awk '{print $3}' |awk -F"/" '{print $2}'`
#echo $new_mount
#echo $old_mount
#/oravl03/oradata/GLBABP1/pool_data_45.dbf
tmp_dbf_path1=`sed "s/${old_mount}/${new_mount}/" last_dbf_ts.lst`
#pool_data_45
tmp_dbf_name1=`sed "s/${old_mount}/${new_mount}/" last_dbf_ts.lst|awk -F. '{print $1}' | awk -F"/" '{print $NF}'`
#45
tmp_dbf_id1=`sed "s/${old_mount}/${new_mount}/" last_dbf_ts.lst|awk -F. '{print $1}' | awk -F"/" '{print $NF}'|awk -F_ '{print $NF}'`
#46
tmp_dbf_id2=`expr $tmp_dbf_id1 + 1`
#pool_data_46
tmp_dbf_name2=`echo $tmp_dbf_name1 |sed "s/${tmp_dbf_id1}/${tmp_dbf_id2}/"`
tmp_dbf_path2=`echo $tmp_dbf_path1|sed "s/${tmp_dbf_name1}/${tmp_dbf_name2}/"`
echo "alter tablespace $new_TS_name add datafile '$tmp_dbf_path2' size ${new_file_size}k;"
- 从零基础学三分查找
- Codeforces Beta Round #1 A,B,C
- 线性分类器-中篇
- isupper()函数
- HDU 5882 Balanced Game
- 超级玛丽游戏
- POJ 3673 Cow Multiplication
- HDU 5144 NPY and shot(物理运动学+三分查找)
- 深度|Python股票数据分析
- HDU 2438 Turn the corner(三分查找)
- UVAlive 3708 Graveyard(最优化问题)
- HDU 1754 I Hate It(线段树之单点更新,区间最值)
- Selenium2+python自动化19-单选和复选框
- Uva 11300 Spreading the Wealth(递推,中位数)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Milvus 实战 | 基于 Milvus 的 CORD-19 论文检索引擎
- Laravel 8 新特性和功能优化速览
- Linux 搭建 我的世界(MC) 基岩版服务器
- 虚函数、析构函数、静态函数、多态
- 一日一技:pylint除了检查代码风格,还能做这件事情
- Manjaoro ifconfig问题
- 面对成百上千台服务器产生的日志,试试这款轻量级日志搬运神器!
- 内网渗透 | 内网中的信息收集
- 通过命令下载执行恶意代码的几种姿势
- CS如何配置通过CDN上线
- Height transition
- 【DB笔试面试861】在Oracle中,有哪些常见组件?
- 【DB笔试面试862】在Oracle中,如何安装DBMS_NETWORK_ACL_ADMIN包?
- 【DB宝19】在Docker中使用MySQL高可用之MHA
- 【DB笔试面试863】在Oracle中,如何让Oracle DB、监听和oem开机启动?