#!/bin/bash# 获取所有命名空间
NAMESPACES=$(kubectl get ns | grep qfusion-| grep -v qfusion-cloudshell | awk '{print $1}')# 遍历所有命名空间fornamespacein $NAMESPACES;do# 获取命名空间下所有名称中包含 'oracle' 的 Pod
pods=$(kubectl get pods -n "$namespace"| grep '^oracle-' | awk '{print $1}')# 遍历所有 Oracle Podfor pod in $pods;doecho
cluster=${pod%-*}
cluster=${cluster::-1}
echo "处理命名空间 $namespace 下的实例 $pod"# 获取数据库版本和SID
DATABASE_VERSION=$(kubectl get pod -n $namespace $pod -o jsonpath='{.spec.containers[0].env[?(@.name=="DATABASE_VERSION")].value}')
ORACLE_SID=$(kubectl get pod -n $namespace $pod -o jsonpath='{.spec.containers[0].env[?(@.name=="ORACLE_SID")].value}')# 获取实例sys密码
secret_name="${cluster}0-root"# 确保这是正确的Secret名称
pwd=$(kubectl get secret -n $namespace $secret_name -o jsonpath='{.data.password}' | base64 --decode)# 获取实例IP信息# 这里假设你有一个名为 <pod>-vip 的服务,你需要根据你的实际服务名称来替换
ipaddr=$(kubectl get lb -n $namespace| grep $cluster | awk '{print $2}')
port=$(kubectl get lb -n $namespace| grep $cluster | awk '{print $3}')# 获取当前时间戳
timestamp=$(date +%Y%m%d_%H%M%S)
output_file="parameters_${pod}_${namespace}_${timestamp}.txt"
echo "将输出保存到文件: $output_file"# 执行 SQL*Plus 命令并重定向输出到文件
su - oracle -c "sqlplus sys/$pwd@$ipaddr:$port/$ORACLE_SID assysdba<<EOF
SET PAGESIZE 999;
SET LINESIZE 999;
SET FEEDBACK OFF;
SET HEADING OFF;
SET TRIMSPOOL ON;
SET LONG 9999;
SET LONGCHUNKSIZE 9999;
SET TRIMSPOOL ON;
SET SERVEROUTPUT ON;
SET TRIM ON;
SET TAB OFF;
SET FEEDBACK OFF;
SET HEADING OFF;
COLUMN NAME FORMAT A30;
COLUMN TYPE FORMAT A20;
COLUMN VALUE FORMAT A100;SELECT name, type,value FROM v\\\$parameter;
EXIT;
EOF" > "$output_file"
echo "输出已保存到 $output_file"
done
done
单个实例参数备份
#!/bin/bashif[-z "$1"]; then
echo "未知参数,用法: $0 [Pod名称] [命名空间]"
exit 1fi
pod=$1
cluster=${pod%-*}if[-z "$2"]; then
namespace="qfusion-admin"elsenamespace=$2
fi
echo "实例 $1 $2 的信息如下:"
database=${cluster%-*}if["$database"=="oracle"]; then
# 查看实例版本和SID
DATABASE_VERSION=$(kubectl get pod -n $namespace $pod -o jsonpath='{.spec.containers[0].env[?(@.name=="DATABASE_VERSION")].value}')
echo "实例版本 $DATABASE_VERSION"
ORACLE_SID=$(kubectl get pod -n $namespace $pod -o jsonpath='{.spec.containers[0].env[?(@.name=="ORACLE_SID")].value}')
echo "实例SID $ORACLE_SID"# 查看实例sys密码
secret_name="${cluster}-root"# 确保这是正确的Secret名称
pwd=$(kubectl get secret -n $namespace $secret_name -o jsonpath='{.data.password}' | base64 --decode)
echo "密码 $pwd"# 查看实例IP信息
ipaddr=$(kubectl get lb -n $namespace| grep $cluster | awk '{print $2}')
port=$(kubectl get lb -n $namespace| grep $cluster | awk '{print $3}')
echo "实例VIP $ipaddr:$port"# 输出连接串
echo "连接串 sqlplus sys/$pwd@$ipaddr:$port/$ORACLE_SID as sysdba"# 执行 SQL*Plus 命令并重定向输出到文件
timestamp=$(date +%Y%m%d_%H%M%S)
output_file="parameters_${pod}_${timestamp}.txt"
echo "将输出保存到文件: $output_file"
su - oracle -c "sqlplus sys/$pwd@$ipaddr:$port/$ORACLE_SID assysdba<<EOF
SET PAGESIZE 999;
SET LINESIZE 999;
SET FEEDBACK OFF;
SET HEADING OFF;
SET TRIMSPOOL ON;
SET LONG 9999;
SET LONGCHUNKSIZE 9999;
SET TRIMSPOOL ON;
SET SERVEROUTPUT ON;
SET TRIM ON;
SET TAB OFF;
SET FEEDBACK OFF;
SET HEADING OFF;
COLUMN NAME FORMAT A30;
COLUMN TYPE FORMAT A20;
COLUMN VALUE FORMAT A100;SELECT name, type,value FROM v\\\$parameter;
show parameter
EXIT;
EOF" > "$output_file"
echo "输出已保存到 $output_file"else
echo "该数据库类型暂不支持"
fi
获取实例信息脚本
#!/bin/bashif[-z "$1"]; then
echo "未知参数,用法: $0 [Pod名称] [命名空间]"
exit 1fi
pod=$1
pod=${pod%-*}if[-z "$2"]; then
namespace="qfusion-admin"elsenamespace=$2fi
database=${pod%-*}if["$database"=="oracle"]; then
# 查看实例SID
ORACLE_SID=$(kubectl get pod -n $namespace $pod-0-o jsonpath='{.spec.containers[0].env[?(@.name=="ORACLE_SID")].value}')
echo "实例SID $ORACLE_SID"# 查看实例sys密码
secret_name="$pod-root"# 确保这是正确的Secret名称
pwd=$(kubectl get secret -n $namespace $secret_name -o jsonpath='{.data.password}' | base64 --decode)
echo "密码 $pwd"# 查看实例IP信息
ipaddr=`kubectl get lb -n $namespace| grep $pod | awk '{print$2}'`
port=`kubectl get lb -n $namespace| grep $pod | awk '{print$3}'`
echo "实例vip $ipaddr:$port"# 输出连接串
echo "sqlplus sys/$pwd@$ipaddr:$port/$ORACLE_SID as sysdba"else
echo "该数据库类型暂不支持"
fi