У меня есть два Linux-сервера A(локальный) и B(удаленный), между которыми установлен SSH-ключ. Я пытаюсь сделать следующее в моем сценарии оболочки (файл .sh)

  1. Сделайте EXPDP на локальном сервере А, сгенерируйте файл .dmp.
  2. Передача этого файла с локального сервера A на удаленный сервер B через SSH
  3. Затем переместите этот файл в другую папку на самом удаленном сервере B.
  4. Выполните IMPDP с локального сервера A на удаленном сервере B, чтобы загрузить файл дампа (который уже был там через шаги 2 и 3) в базу данных удаленного сервера B.

Что работает: перемещение файла dmp из одной папки в другую на удаленном сервере B с локального сервера A.

ssh user@remoteServerB /bin/bash <<EOF
mv /path1/file /path2/file
EOF

Что не работает - вызов impdp для запуска на удаленном сервере B с локального сервера A

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 в файл .sh на удаленном сервере B и запустить как следует с локального сервера A, но безуспешно.

ssh user@remoteServerB /path/load_dmp.sh

Я получаю impdp: command not found

Пожалуйста, дайте мне знать, если вы найдете какой-либо выход, я много пробовал, но не могу взломать это.

1 ответ1

0

Вы не предоставили сообщение об ошибке своей первой неудачной команде, но я предполагаю, что это то же самое.

Команда 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .