#!/bin/bash
#Oracle DB Info for NEXT
HOST="1.2.3.4"
PORT="5678"
SERVICE="MYDB"
DB_USER=$(whoami)
DB_PASS=$(base64 -d ~/.passwd)
DB_SCHEMA="my_db"
#Section for all of our functions.
function SQLConnection(){
sqlplus "$DB_USER"/"$DB_PASS"@"$HOST":"$PORT"/"$SERVICE"
}
function Connected(){
SQLConnection <<EOF
select sys_context('USERENV','SERVER_HOST') from dual;
EOF
}
function GetJMS(){
SQLConnection <<EOF
set echo on timing on lines 200 pages 100
select pd.destination from ${DB_SCHEMA}.pd_notification pd where pd.org_id = '$ORGID';
EOF
}
TODAY=$(date +"%A %B %d, %Y")
read -r -p $'\n\nWhat is the ORG ID? ' ORGID
read -r -p $'\n\nWhat is the REMOTE QUEUE MANAGER NAME? ' RQM
read -r -p $'\n\nWhat is the IP address of the REMOTE QUEUE MANAGER? ' CONN
read -r -p $'\n\nWhat is the PORT of the REMOTE QUEUE MANAGER? ' PORT
echo -en "* $(whoami)\n* $TODAY\n* MQ Setup $ORGID\n\nDEFINE +\n\tCHANNEL('$RQM.LQML') +\n\tCHLTYPE(SDR) +\n\tCONNAME('$CONN($PORT)') +\n\tXMITQ('BUF.2.$ORGID.XMQ')\n\tCHAUTH(TLS_RSA_WITH_AES_256_CBC_SHA256)\n\nDEFINE +\n\tCHANNEL('LQML.$RQM') +\n\tCHLTYPE(RCVR) +\n\tTRPTYPE(TCP)\n\nDEFINE +\n\tQLOCAL('$RQM') +\n\tTRIGDATA('LQML.$RQM') +\n\tINITQ('SYSTEM.CHANNEL.INITQ') +\n\tTRIGGER USAGE(XMITQ)\n\n" > ~/mqsetup.mqsc
CONNECTED=$(Connected | awk 'NR==16')
echo -en "\n\nHello From: $CONNECTED\n\n"
for JMSDESTINATION in $(GetJMS | awk 'NR>=16&&NR<=24{print $1}')
do
read -r -p $'\n\nWhich REMOTE QUEUE NAME matches with this ${JMSDESTINATION}?' RNAME
QDESC=$(echo "$JMSDESTINATION" | tr '.' ' ' | tr '[[:upper:]]' '[[:lower:]]')
echo -en "\n\nDEFINE +\n\tQR($JMSDESTINATION) +\n\t\tREPLACE DESCR('$ORGID $QDESC Queue') +\n\t\tREPLACE MAXDEPTH(5000) +\n\t\tXMITQ('BUF.2.$ORGID.XMQ') +\n\t\tRNAME('$RNAME') +\n\t\tRQMNAME('$RQM')" >> ~/mqsetup.mqsc
done
Вот скрипт, который я построил, надеясь автоматизировать настройку очередей IBM MQ и каналов. Моя проблема заключается в том, что вне этого скрипта я могу установить SQL-сессию без проблемы непосредственно из оболочки, если я ввожу переменные, увиденные в скрипте. Я могу вызвать функции, и все возвращается так же, как я надеюсь. Когда я запускаю то же самое из скрипта, я получаю ошибки тайм-аута ... «Hello From» пуст, который говорит мне, что нет соединения с БД.Не удалось установить сеанс Oracle SQL из сценария BASH
Я полностью в тупике относительно того, почему все это прекрасно работает вне сценария, но внутри него не хватает времени.
Я ценю глаза и помощь!
Соединительная часть работает нормально; что вы видите, если вы просто вызываете Connected? Где вы видите ошибки таймаута? (Даже при подключении, ваш шаблон awk ничего не показывает для меня, так что вы можете сделать некоторую отладку вокруг этого?) –
Вам не нужно скрывать знак $ в этой строке: выберите pd.destination from $ {DB_SCHEMA} .pd_notification pd где pd.org_id = '$ ORGID'; – BobC
@AlexPoole Да, предполагая, что я непосредственно загрузил переменные и функции в оболочку, я могу вызвать функцию «Подключено», и я получаю немедленный вывод заголовков SQLPlus, имя узла db-сервера и все оставшиеся кредиты. Я использую AWK, чтобы обрезать это только до имени хоста. Когда я запускаю скрипт и он загружает все в свой сеанс, скрипт зависает, как его пытается установить соединение с db, но он терпит неудачу, потому что заявление echo, которое я вставляю в качестве проверки, не удается, напечатав «Hello From:» (пустое место, где hostname будет). – misteralexander