以其他用户身份检查Oracle数据库模式失败问题排查
问题解决:获取Oracle数据库OPEN_MODE报错修正
错误原因
原代码的引号嵌套逻辑错误,su - orasid -c后的双引号与sqlplus "/as sysdba"中的双引号发生冲突,导致Shell解析后sqlplus未接收到正确的连接参数,因此输出了SQL*Plus的用法说明而非查询结果。
修正后的代码方案
方案一(推荐:单引号包裹su命令内容,避免引号冲突)
status=$(su - orasid -c 'sqlplus -s "/as sysdba" <<EOF set heading on set linesize 30 set feedback off select name, open_mode from v$database; exit; EOF') # 用双引号包裹变量输出,保留换行格式 echo "$status"
方案二(转义双引号适配原格式)
status=$(su - orasid -c "sqlplus \"\/as sysdba\" <<EOF set heading on set linesize 30 set feedback off select name, open_mode from v\$database; exit; EOF") echo "$status"
优化说明
- 添加
-s参数让SQL*Plus进入静默模式,屏蔽开头的版本版权信息; set feedback off去掉查询后的1 row selected提示;set linesize 30调整行宽,让输出格式更贴合期望结果;- 用
echo "$status"代替echo $status,确保输出保留原始换行和格式。
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

