Цикл sql для сопоставления данных в bash k sh (AIX) oracle базе данных - PullRequest
0 голосов
/ 16 апреля 2020

Я хочу проверить через оболочку, совпадают ли два вывода из команды sqlplus. Поэтому я l oop до тех пор, пока переменные, перехватывающие этот вывод, не станут равными, а затем завершим l oop, после чего следует следующий набор инструкций.

Ни один из нижеприведенных циклов не работает должным образом.

Я ожидаю, что данные для testSeq и expectedSeq будут выбраны в режиме реального времени, а затем сравнены, чтобы проверить данные, если они равны, выйти и перейти к следующему шагу.

testSeq=`sqlplus -S user/xxxxxxxxx@${primary} << EOF
set heading off feedback off pagesize 0 verify off echo off numwidth 15 
select max(ARCHIVED_SEQ#) from v\\$ARCHIVE_DEST_STATUS;
EOF`

expectedSeq=`sqlplus -S user/xxxxxxxxx@${DR}<< EOF
set heading off feedback off pagesize 0 verify off echo off numwidth 15 
select max(APPLIED_SEQ#) from V\\$ARCHIVE_DEST_STATUS;
EOF`
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

while (true)
    do
    while do;

    testSeq=`sqlplus -S user/xxxxxxxxx@${primary} << EOF
    set heading off feedback off pagesize 0 verify off echo off numwidth 15 
    select max(ARCHIVED_SEQ#) from v\\$ARCHIVE_DEST_STATUS;
    EOF`

    expectedSeq=`sqlplus -S user/xxxxxxxxx@${DR}<< EOF
    set heading off feedback off pagesize 0 verify off echo off numwidth 15 
    select max(APPLIED_SEQ#) from V\\$ARCHIVE_DEST_STATUS;
    EOF`

       if [[ "$testSeq" != "$expectedSeq" ]] 
       then
       echo "$DR sync is in Progress." | mailx -s "$DR Refresh update" xxxxx@mail.com
       else
       sleep 20
    echo "$DR is in sync with ${PRIMARY} and ready to be switched to Snapshot DR" | mailx -s "$DR Refresh update" xxxxx@mail.com
    done

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    while [[ "$testSeq" != "$expectedSeq" ]]; do
    echo "$DR sync is in Progress." | mailx -s "$DR Refresh update" xxxxx@mail.com

    sleep 20

    done
    echo "$DR is in sync with ${PRIMARY} and ready to be switched to Snapshot DR" | mailx -s "$DR Refresh update" xxxxx@mail.com


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

until [ "$expectedSeq" -eq "$testSeq" ]; do
echo "$DR sync is in Progress." | mailx -s "$DR Refresh update" xxxxx@mail.com
sleep 5 
if [ $? -eq 0 ]; then
break
fi
done
echo "$DR is in sync with ${PRIMARY} and ready to be switched to Snapshot DR" | mailx -s "$DR Refresh update" xxxxx@mail.com

Ценю всю помощь. Заранее спасибо

1 Ответ

0 голосов
/ 17 апреля 2020

Это должно работать с bash, я не проверял k sh:

expectedSeq=`sqlplus -S user/xxxxxxxxx@${DR} <<EOF
set heading off feedback off pagesize 0 verify off echo off numwidth 15 
select max(APPLIED_SEQ#) from V\\$ARCHIVE_DEST_STATUS;
EOF`
testSeq=

while [[ $testSeq != $expectedSeq ]]; do
    if [[ -n testSeq ]]; then
        echo "$DR sync is in Progress."
        sleep 20
    fi
    testSeq=`sqlplus -S user/xxxxxxxxx@${primary} <<EOF
set heading off feedback off pagesize 0 verify off echo off numwidth 15 
select max(ARCHIVED_SEQ#) from V\\$ARCHIVE_DEST_STATUS;
EOF`
    # todo: handle failures
done
echo "$DR is in sync with ${primary} and ready to be switched to Snapshot DR"

Можно определить ожидаемый результат за пределами l oop, если таблица не ' изменить в процессе. Вы должны быть готовы к тому, что запрос потерпит неудачу, обнаружив ошибки в выводе или около того.

...