#!/bin/bash # 作者:bg9fqp # 查询oracle 和 ADG运行情况 # 环境变量,需要按照实际环境修改 export ORACLE_BASE=/u01/app/oracle export ORACLE_SID=orcl export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH # 数据库连接参数 adg_ora="sys/password@17.1.7.7:1521/orcldg as sysdba" new_ora="sys/password@17.1.7.6:1521/orcl as sysdba" # sql 输出内容格式处理 set_sql="set heading off feedback off pagesize 0 linesize 400 verify off echo off" # 老集群执行sql命令 adg_exec_sql_query(){ local sql_query="$1" local result="" result=$(sqlplus -S "$adg_ora" <<EOF $set_sql $sql_query exit; EOF ) echo "$result" } # 新集群执行sql命令 new_exec_sql_query(){ local sql_query="$1" local result="" result=$(sqlplus -S "$new_ora" <<EOF $set_sql $sql_query exit; EOF ) echo "$result" } pt(){ local data=$1 for i in $data do if [ $i == "hh" ];then echo " "; else echo $i |awk '{printf("%s ",$0)}' fi; done echo " " } # 巡检内容 echo "开始检查Oracle 和 ADG 状态" # SWITCH OVER角色和状态的检查 sql_cmd="select name,database_role, switchover_status, 'hh' from v\$database;" adg_status=$(adg_exec_sql_query "$sql_cmd") new_status=$(new_exec_sql_query "$sql_cmd") echo "SWITCH OVER角色和状态的检查" echo "主库状态: " pt "$new_status" echo "备库状态: " pt "$adg_status" # DG环境的保护模式检查 sql_cmd="select database_role, protection_mode, protection_level from v\$database;" adg_status=$(adg_exec_sql_query "$sql_cmd") new_status=$(new_exec_sql_query "$sql_cmd") echo "保护模式检查" echo "主库模式: " pt "$new_status" echo "备库模式: " pt "$adg_status" # 查看DG环境进程的状态 sql_cmd="select thread#, sequence#,process,status,'hh' from v\$managed_standby;" adg_status=$(adg_exec_sql_query "$sql_cmd") new_status=$(new_exec_sql_query "$sql_cmd") echo "查看DG环境进程的状态" echo "主库状态: " pt "$new_status" echo "备库状态: " pt "$adg_status" sql_cmd="select archived_thread#,archived_seq#,applied_thread#,applied_seq# from v\$archive_dest_status where archived_thread# in (1,2);" adg_status=$(adg_exec_sql_query "$sql_cmd") new_status=$(new_exec_sql_query "$sql_cmd") echo "查看日志序列" echo "主库状态: " pt "$new_status" echo "备库状态: " pt "$adg_status"
巡检结果如下图: