如何通过PuTTY运行脚本自动化Oracle DR,解决dgmgrl命令找不到报错
问题根因
通过PuTTY的
-m参数指定脚本远程执行时,属于非交互式shell会话,默认不会加载Oracle用户的个人环境配置文件(.bash_profile、.bashrc、.profile等),因此ORACLE_HOME、ORACLE_SID、LD_LIBRARY_PATH等Oracle运行必须的环境变量未初始化,系统PATH中没有包含Oracle二进制文件的存储路径,就会出现dgmgrl: command not found的报错。而手动登录属于交互式会话,会自动加载所有环境配置,所以执行命令正常。
另外你当前写的dgmgrl.sh里的@echo off是Windows批处理语法,Linux的bash无法识别,需要先删除避免额外报错。
解决方案
- 方案1:脚本开头显式加载环境变量(最推荐,生产环境无安全风险)
修改远程执行的dgmgrl.sh脚本,开头先加载Oracle用户的环境配置,或者直接声明Oracle相关环境变量即可,示例如下:# 二选一:优先加载用户的环境配置文件,根据实际生效的配置调整路径 source ~/.bash_profile # 或 source ~/.bashrc # 也可以直接显式声明变量,替换为你服务器实际的Oracle安装路径 # export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 # export PATH=$ORACLE_HOME/bin:$PATH # export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH # 后续写你要执行的dgmgrl、sqlplus命令即可 dgmgrl / "show configuration;" - 方案2:命令写绝对路径
直接指定dgmgrl、sqlplus的完整绝对路径执行,替换为你服务器实际的Oracle二进制路径即可:/u01/app/oracle/product/19.0.0/dbhome_1/bin/dgmgrl /u01/app/oracle/product/19.0.0/dbhome_1/bin/sqlplus /nolog - 方案3:修改SSH服务配置(不推荐,存在安全风险)
编辑远程Oracle服务器的/etc/ssh/sshd_config文件,将PermitUserEnvironment参数改为yes,重启sshd服务后非交互式会话也会自动加载用户环境变量,该操作会提升服务器安全风险,生产环境不建议使用。
内容的提问来源于stack exchange,提问作者aadi sharma
相关产品推荐
相关产品推荐

