shell 用于从 ORATAB 文件中排除 +ASM、AGENT、-MGMTDB 条目并仅验证 DBSID 的脚本
shell script to exclude entries of +ASM, AGENT, -MGMTDB from ORATAB file and just validate only DBSIDs
我有一个 SQL 脚本,它获取有关 FRA(ORACLE 中的快速恢复区)的详细信息,它需要 运行 仅在数据库中而不是在任何其他 oratab 条目中。所以在下面的例子中,我需要它只在 dbname1 和 dbname2 中执行,并在找到时忽略其余条目。
示例 oratab 文件:
dbname1:/u01/app/oracle/11.2.0.4/db_1:Y
dbname2:/u01/app/oracle/12.2.0.1/db_2:Y
+ASM:/u01/app/grid:N
MGMTDB:/u01/app/grid:N
AGENT:/u01/app/agent_home:N
我写了一个我目前正在使用的功能,但没有按照我的要求正常工作。非常感谢任何更改。
checkORATAB()
{
ORATAB=/etc/oratab
SID=`egrep -i ":Y|:N" $ORATAB | cut -d":" -f1 |grep -v "\#"|grep -v "\*"`
export $SID
if [[ `echo "$ORACLE_SID" | cut -b 1` != '+' ]] && [[ "$ORACLE_SID" != "AGENT" ]] && [[ "$ORACLE_SID" != "GRID" ]] && [[ "$ORACLE_SID" != "-MGMTDB" ]] && [[ "$ORACLE_SID" != "+ASM" ]]; then
for i in $SID; do
runscript;
fi
done
exit;
}
谢谢
这是 awk
或 sed
的工作,尽管 grep
和 cut
的组合也可以工作。
checkORATAB() {
ORATAB=/etc/oratab
for sid in $(awk -F: ' !~ /(+ASM|MGMTDB|AGENT)/ {print }' $ORATAB)
do
export ORACLE_SID=$sid
runscript
done
}
或使用sed
:
checkORATAB() {
ORATAB=/etc/oratab
for sid in $(sed -n '/^\(+ASM\|MGMTDB\|AGENT\)/b;s/:.*//p' $ORATAB)
do
export ORACLE_SID=$sid
runscript
done
}
我有一个 SQL 脚本,它获取有关 FRA(ORACLE 中的快速恢复区)的详细信息,它需要 运行 仅在数据库中而不是在任何其他 oratab 条目中。所以在下面的例子中,我需要它只在 dbname1 和 dbname2 中执行,并在找到时忽略其余条目。
示例 oratab 文件:
dbname1:/u01/app/oracle/11.2.0.4/db_1:Y
dbname2:/u01/app/oracle/12.2.0.1/db_2:Y
+ASM:/u01/app/grid:N
MGMTDB:/u01/app/grid:N
AGENT:/u01/app/agent_home:N
我写了一个我目前正在使用的功能,但没有按照我的要求正常工作。非常感谢任何更改。
checkORATAB()
{
ORATAB=/etc/oratab
SID=`egrep -i ":Y|:N" $ORATAB | cut -d":" -f1 |grep -v "\#"|grep -v "\*"`
export $SID
if [[ `echo "$ORACLE_SID" | cut -b 1` != '+' ]] && [[ "$ORACLE_SID" != "AGENT" ]] && [[ "$ORACLE_SID" != "GRID" ]] && [[ "$ORACLE_SID" != "-MGMTDB" ]] && [[ "$ORACLE_SID" != "+ASM" ]]; then
for i in $SID; do
runscript;
fi
done
exit;
}
谢谢
这是 awk
或 sed
的工作,尽管 grep
和 cut
的组合也可以工作。
checkORATAB() {
ORATAB=/etc/oratab
for sid in $(awk -F: ' !~ /(+ASM|MGMTDB|AGENT)/ {print }' $ORATAB)
do
export ORACLE_SID=$sid
runscript
done
}
或使用sed
:
checkORATAB() {
ORATAB=/etc/oratab
for sid in $(sed -n '/^\(+ASM\|MGMTDB\|AGENT\)/b;s/:.*//p' $ORATAB)
do
export ORACLE_SID=$sid
runscript
done
}