通过shell脚本得到数据库的基本信息(一)(r9笔记第89天)

今天写了个脚本,虽然实现的功能不多,但是个人感觉是一个好的开始,架子出来了,后面要补充的细节加进来就逐步完善了。 这个脚本的运行效果如下: OS Version is :[ RHEL_6.3 ] Oracle Version is :[ 11.2.0.3.0] Oracle Instance is :[ dgtest ] dgtest ORACLE_HOME is :[ /U01/app/oracle/product/11.2.0.2/db_1 ] Oracle status is :[ 11g PRIMARY ] Oracle SPFILE is :[ ENABLED ] Oralce DGBroker is :[ DISABLED ] FORCE LOGGING is :[ DISABLED ] HugePage Status is :[ DISABLED ] 这个脚本会对大部分的信息进行一个概览,我想在这些内容的基础上添加更多的经验所得。 运行这个脚本,好与不好一目了然,当然现在的功能还是有距离,慢慢改进吧。 值得说道的是“Oracle status”的地方,会判断主备库,区分了10g,11g的不同特点。 当然后面的大篇幅脚本是关于HugePage的,这个地方想补充出建议的值来,所以暂且这样。 脚本内容如下:

. /home/oracle/.bash_profile
# Get OS Version
echo  'OS     Version  is :[' `cat /etc/issue|sed  -e 's/Red Hat  Enterprise Linux Server release/RHEL/g' -e 's/Red Hat Enterprise Linux  AS release/RHEL/g' -e 's/ /_/g' -e 's/_(Tikanga)//g' -e  's/_(Santiago)//g' -e 's/_release//g' -e 's/_(Final)//g' -e  's/Nahant_Update_//g'|head -1` ]

# Get Oracle Version
echo 'Oracle Version  is :[ '`sqlplus -v|sed '/^$/d'|awk '{print $3}'`]

# Get Oracle Instance List
echo 'Oracle Instance is :[ '`ps -ef|grep smon|grep -v grep|awk  '{gsub("ora_smon_","",$8)}{print $8}'|grep -v awk` ]

for tmp_db in `ps -ef|grep smon|grep -v grep|awk  '{gsub("ora_smon_","",$8)}{print $8}'|grep -v awk` 
do
echo $tmp_db

#Get Oracle Home
echo 'ORACLE_HOME     is :[' $ORACLE_HOME ' ]'

# Get database role
su -l oracle <<EOS
export ORACLE_SID=${tmp_db}

 $ORACLE_HOME/bin/sqlplus -s / as sysdba <<EOF
 set pages 0
 set feedback off
 select 'Oracle  status  is :[ '||decode(substr(version,1,2),11,
 (select decode(database_role,'PHYSICAL STANDBY',(decode(open_mode,'READ  ONLY WITH APPLY','11g ADG','11g DG NEED_CHECK')),'PRIMARY','11g  PRIMARY') from v\\\$database),
 10,
 (select decode(database_role,'PHYSICAL  STANDBY',(decode(open_mode,'MOUNTED','10g DG NORMAL','10g DG  NEED_CHECK')),'PRIMARY','10g PRIMARY') from v\\\$database)
 )||' ]' DG_MODE 
 from v\\\$instance;
 select decode(value,null,'Oralce SPFILE   is :[ DISABLED ]','Oracle  SPFILE   is :[ ENABLED ]') from v\\\$parameter where name='spfile';
 select decode(upper(value),'FALSE','Oralce DGBroker is :[ DISABLED  ]','Oracle DGBroker is :[ ENABLED ]') from v\\\$parameter where  name='dg_broker_start';
 select decode(force_logging,'NO','FORCE LOGGING   is :[ DISABLED ]','FORCE LOGGING   is :[ ENABLED ]') from v\\\$database;
EOF
EOS
done

# Check HugePage enabled 
# Check for the kernel version
KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`
# Find out the HugePage size
HPG_SZ=`grep Hugepagesize /proc/meminfo | awk {'print $2'}`
# Start from 1 pages to be on the safe side and guarantee 1 free HugePage
NUM_PG=1
# Cumulative number of pages required to handle the running shared memory segments
for SEG_BYTES in `ipcs -m | awk {'print $5'} | grep "[0-9][0-9]*"`
do
   MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q`
   if [ $MIN_PG -gt 0 ]; then
      NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q`
   fi
done
case $KERN in
   '2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`;
          grep vm.hugetlb_pool /etc/sysctl.conf|awk  '{print  $0==""?"HugePage Status :[ DISABLED ]":"HugePage Status is :[ ENABLED  ]"}';;
   '2.6') grep vm.nr_hugepages /etc/sysctl.conf|xargs echo $1|awk   '{print $0==""?"HugePage Status is :[ DISABLED ]":"HugePage Status is :[  ENABLED ]"}';; 
    *) echo "Unrecognized kernel version $KERN. Exiting." ;;
esac

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2016-08-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏coding

hexo搭建个人博客

搭建个人博客有很多种方式,最老牌的当属wordpress,功能丰富,但过于笨重。我想要的只是最简单的显示文章以及搜索功能,当然,样式要简洁漂亮,而且必须支持ma...

70770
来自专栏乐沙弥的世界

Oracle Net Services - Tracing and Logging at a Glance

    Oracle Net trace 用于跟踪或调试oracle连接故障,连接异常断开或者连接超时等情形,通过产生详细的跟踪信息来进行分析和诊断Oracle...

7330
来自专栏linux驱动个人学习

基于input子系统的sensor驱动调试(二)

继上一篇:https://cloud.tencent.com/developer/article/1054078 一、驱动流程解析: 1、模块加载: 1 st...

64970
来自专栏逆向与安全

360 so动态脱壳

目前so加壳有很多家,我己知的有 爱加密,梆梆,360, 娜迦等 各有所长。今天把学习360的脱壳笔记记录下来与小菜共同学习,没有其它目的,大神请绕道!

37500
来自专栏杨建荣的学习笔记

探究AWR 第二篇(r3笔记第93天)

在探究awr第一篇中介绍了awr的一些基本操作 http://blog.itpub.net/23718752/viewspace-1123134/ 在这一篇中,...

32270
来自专栏杨建荣的学习笔记

11g备库无法开启ADG的原因分析 (r7笔记第62天)

今天碰到一个有些奇怪的问题,但是奇怪的现象背后都是有本质的因果。 下午在做一个环境的检查时,发现备库是在mount阶段,这可是一个11gR2的库,没有ADG实在...

39640
来自专栏蓝天

__lll_mutex_lock_wait的错误原因

运行下面的代码,即可重现上面的__lll_mutex_lock_wait()问题:

30740
来自专栏芋道源码1024

分布式作业系统 Elastic-Job-Lite 源码分析 —— 作业事件追踪

另外,Elastic-Job-Cloud 作业事件追踪 和 Elastic-Job-Lite 基本类似,不单独开一篇文章,记录在该文章里。如果你对 Elasti...

10830
来自专栏数据和云

推陈出新:12C 推进 SCN 新方法实践

在数据库异常恢复中,经常需要修改数据库的 SCN 值,在 12C 之前,我们常用的方法有如下几个: oradebug poke 直接修改内存中的值; event...

419100
来自专栏linux驱动个人学习

dump_stack 分析使用

dump_stack是用来回溯内核运行的信息的,打印内核信息堆栈段; dump_stack原型: void dump_stack(void); 1、使用这个功能...

35450

扫码关注云+社区

领取腾讯云代金券