You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

以其他用户身份检查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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 23:36:02