我有两个 Linux 服务器 A(本地)和 B(远程),它们之间设置了 SSH 密钥。我尝试在我的 shell 脚本(.sh 文件)中执行以下操作
- 在本地服务器A上执行EXPDP,生成.dmp文件。
- 通过 SSH 将该文件从本地服务器 A 传输到远程服务器 B
- 然后将该文件移动到远程服务器 B 上的另一个文件夹。
- 从本地服务器 A 在远程服务器 B 上执行 IMPDP,以将转储文件(在步骤 2 和 3 中已经存在)加载到远程服务器 B 的数据库中。
有效的方法:将 dmp 文件从本地服务器 A 的一个文件夹移动到远程服务器 B 上的另一个文件夹。
ssh user@remoteServerB /bin/bash <<EOF
mv /path1/file /path2/file
EOF
什么不起作用-- 从本地服务器 A 调用 impdp 在远程服务器 B 上运行
ssh user@remoteServerB /bin/bash <<EOF1
impdp userid=${DBUSERNAME}/${DBPASSWORD}@${ORACLE_SID} tables=${TBL_LIST} directory=dir_name dumpfile=dbdump_${PRCSSDT}.dmp logfile=data_pump_dir:dblog_${PRCSSDT}.log table_exists_action=replace
EOF1
我也尝试将 impdp 命令放入远程服务器 B 上的 .sh 文件中,并从本地服务器 A 运行如下操作,但没有成功。
ssh user@remoteServerB /path/load_dmp.sh
我得到的错误是 impdp: command not found
如果您找到任何解决方法,请告诉我,我尝试了很多方法但无法解决这个问题。
答案1
您没有提供第一个失败命令的错误消息,但我认为它是相同的。
表示command not found
该命令不在您的标准中PATH
。因此,请以交互方式登录并找出命令的位置,然后使用完整路径调用它。
您可能还需要其他环境变量。要么找出需要哪些环境变量,要么使用bash
选项调用-login
。该选项会导致bash
读取登录时读取的文件,这应该会设置您期望的环境,包括PATH
。
无关注释:
而不是
ssh user@remoteServerB /bin/bash <<EOF
mv /path1/file /path2/file
EOF
您可以使用
ssh user@remoteServerB mv /path1/file /path2/file