当前位置: 首页 > news >正文

半自动化运维之动态添加数据文件(二) (r5笔记第56天)

接着上一篇的内容:半自动化运维之动态添加数据文件(一) http://blog.itpub.net/23718752/viewspace-1683250/conn_str=n1/n1print "conn $conn_strset feedback offset pages 0select 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.dbftmp_dbf_path1=`sed "s/${old_mount}/${new_mount}/" last_dbf_ts.lst`#pool_data_45tmp_dbf_name1=`sed "s/${old_mount}/${new_mount}/" last_dbf_ts.lst|awk -F. '{print $1}' | awk -F"/" '{print $NF}'`#45tmp_dbf_id1=`sed "s/${old_mount}/${new_mount}/" last_dbf_ts.lst|awk -F. '{print $1}' | awk -F"/" '{print $NF}'|awk -F_ '{print $NF}'`#46tmp_dbf_id2=`expr $tmp_dbf_id1 + 1`#pool_data_46tmp_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_dataalter tablespace pool_data add datafile '/oravl07/oradata/XXXX/pool_data_47.dbf' size 2000000k; > ksh add_dbf.sh pool_datavalter tablespace pool_data add datafile '/oravl07/oradata/XXXX/pool_data_47.dbf' size 2000000k;>ksh add_dbf.sh pool_dataalter tablespace pool_data add datafile '/oravl03/oradata/XXXX/pool_data_47.dbf' size 2000000k;> ksh add_dbf.sh pool_dataalter tablespace pool_data add datafile '/oravl06/oradata/XXXX/pool_data_47.dbf' size 2000000k; > ksh add_dbf.sh pool_dataalter tablespace pool_data add datafile '/oravl07/oradata/XXXX/pool_data_47.dbf' size 2000000k;>ksh add_dbf.sh pool_dataalter tablespace pool_data add datafile '/oravl05/oradata/XXXX/pool_data_47.dbf' size 2000000k;对于表空间监控外的脚本,进行整理如下,这样就可以是一个独立的脚本,能够根据输入的表空间名进行分析和映射,还有一些基本的验证。如果空间不足,或者表空间有误都会抛出警告信息。#kBnew_file_size=2000000#TS namenew_TS_name=$1conn_str=aim_dba/aim_dbaprint "conn $conn_strset feedback offset 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.kshif [ ! -s df_k_chk_tmp.ksh ]thenecho 'WARNING! there is someting wrong with TS name,please check again'ksh df_k_chk_tmp.kshexitfifunction 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_mountif [ ! -s tmp_FS_mount ]thenecho 'WARNING! there is no enough space to add datafiles,file size needed:' ${new_file_size}kksh df_k_chk_tmp.kshexitfitmp_FS_mount_cnt=`cat tmp_FS_mount|wc -l`#echo $tmp_FS_mount_cnttmp_random=`get_random 1 ${tmp_FS_mount_cnt}`#echo $tmp_randomconn_str=aim_dba/aim_dbaprint "conn $conn_strset feedback offset pages 0select 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.lstold_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.dbftmp_dbf_path1=`sed "s/${old_mount}/${new_mount}/" last_dbf_ts.lst`#pool_data_45tmp_dbf_name1=`sed "s/${old_mount}/${new_mount}/" last_dbf_ts.lst|awk -F. '{print $1}' | awk -F"/" '{print $NF}'`#45tmp_dbf_id1=`sed "s/${old_mount}/${new_mount}/" last_dbf_ts.lst|awk -F. '{print $1}' | awk -F"/" '{print $NF}'|awk -F_ '{print $NF}'`#46tmp_dbf_id2=`expr $tmp_dbf_id1 + 1`#pool_data_46tmp_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;"

相关文章:

  • 无法运行的update问题解析(r5笔记第57天)
  • shell中echo的显示格式 (r5笔记第58天)
  • 人的力量和大自然的力量 (r5笔记第59天)
  • 半自动化运维之快速连接到指定环境(一) (r5笔记第61天)
  • 巧用外部表备份历史数据(r5笔记第62天)
  • pl/sql中的forall简单测试(r5笔记第63天)
  • 一次ORA-00600问题的排查和分析(上)(r5笔记第64天)
  • 一次ORA-00600问题的排查和分析(下)(r5笔记第65天)
  • 毕业设计的小故事(r5笔记第67天)
  • 重启数据库的一场闹剧(r5笔记第68天)
  • 关于aio的设置的讨论(r5笔记第69天)
  • 一条sql语句的改进探索(r5笔记第70天)
  • 海量数据迁移之传输表空间(一) (r5笔记第71天)
  • 数据刷新中的并行改进(r5笔记第72天)
  • 一条sql语句的建议调优分析(r5笔记第73天)
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【前端学习】-粗谈选择器
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Akka系列(七):Actor持久化之Akka persistence
  • bearychat的java client
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • const let
  • CSS 三角实现
  • js操作时间(持续更新)
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Vue全家桶实现一个Web App
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • Java总结 - String - 这篇请使劲喷我
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (二)学习JVM —— 垃圾回收机制
  • (二开)Flink 修改源码拓展 SQL 语法
  • (分类)KNN算法- 参数调优
  • (转) ns2/nam与nam实现相关的文件
  • (转)nsfocus-绿盟科技笔试题目
  • (转)一些感悟
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • . NET自动找可写目录
  • .gitignore文件---让git自动忽略指定文件
  • .gitignore文件设置了忽略但不生效
  • .md即markdown文件的基本常用编写语法
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .Net下的签名与混淆
  • .net专家(张羿专栏)
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [Android Pro] Notification的使用
  • [android] 手机卫士黑名单功能(ListView优化)
  • [Apio2012]dispatching 左偏树
  • [bzoj1912]异象石(set)
  • [C#]C# winform实现imagecaption图像生成描述图文描述生成