#database #oracle #sqlplus #ksh
Вопрос:
У меня есть один скрипт оболочки, который вызывает соединение sqlplus, работающее в фоновом режиме, и выполняет в нем сохраненные процессы, sql — запросы. Всякий раз, когда у нас есть большой объем записей, подлежащих объединению, мы вызываем SP, который, в свою очередь, выполняет слияние из таблицы этапов в базовую таблицу. Слияние прошло успешно, но SQLPLUS возвращается к сценарию оболочки ровно через час без каких-либо результатов, а затем выдает результаты слияния SP при следующем выполнении запроса, как указано в приведенном ниже журнале. В приведенном ниже примере __LV_MERGE_SB_ФАЙЛ-это файл sql SP, который начал выполняться в 20210728.01.00.09 24370, но затем ровно через час в 20210728.02.00.09 24370 он вернулся к сценарию оболочки. Затем, когда началось выполнение файла TS_SQL, он выдал ему результаты слияния SP.
#SQLPLUS in back ground:
sqlplus -s $CONNECTION |amp;
print -p "set heading off;"
print -p "set feedback off;"
print -p "set pagesize 0;"
print -p "set linesize 500;"
print -p "set numwidth 20;"
#function to execute the sql files
function ExecuteSQL
{
__OUTPUT=""
print -p @$__LV_IN_SQL_FILE
print -p "prompt $__EOF"
while read -p __OUTPUT
do
if [[ "$__OUTPUT" == "$__EOF" ]]; then
break
else
print "E3 Failure Check 1: $__OUTPUT"
echo "$__OUTPUT" >> $__LV_OUT_SQL_FILE
fi
done
}
#calling above function like below
ExecuteSQL $__LV_MERGE_SB_FILE $__LV_MERGE_OUT_SB_FILE
#content of sql file in this case merge SP
cat $__LV_MERGE_SB_FILE
var msg_txt varchar2(2000);
var msg_val number;
call SCHEMA.MERGE_SP( 'SGMSTG.STAGE_TABLE' , 'SCM.BASE_TABLE','ROW_NUM',40000,:msg_txt,:msg_val);
print msg_txt;
print msg_val;
#calling function like below
ExecuteSQL $TS_SQL $TS_DAT
#content of file to get timestamp from DB
cat $TS_SQL
select TO_CHAR(SYSTIMESTAMP,'YYYY-MM-DD HH24:MI:SS.FF6') FROM DUAL;
#Logs:
20210728.01.00.09 24370: 12. script.ksh___________Function [ ExecuteSQL ] Started___________
20210728.01.00.09 24370: Executing The SQL File [ __LV_MERGE_SB_FILE ]........
20210728.02.00.09 24370: 12. script.ksh___________Function [ ExecuteSQL ] Completed___________
20210728.02.00.09 24370: 12. script.ksh___________Function [ ExecuteSQL ] Started___________
20210728.02.00.09 24370: Executing The SQL File [ TS_SQL ]........
20210728.02.00.28 24370: E3 Failure Check 1: > Successfully Merged the data from SGMSTG.STAGE_TABLE into SCM.BASE_TABLE
20210728.02.00.28 24370: E3 Failure Check 1: >
20210728.02.00.28 24370: E3 Failure Check 1: > 0
20210728.02.00.28 24370: E3 Failure Check 1: >
20210728.02.00.28 24370: E3 Failure Check 1: > END
20210728.02.00.28 24370: 12. script.ksh___________Function [ ExecuteSQL ] Completed___________
20210728.02.00.28 24370: LOAD END TIME STAMP : Successfully Merged the data from SGMSTG.STAGE_TABLE into SCM.BASE_TABLE 0
20210728.02.00.28 24370: Merge Stored Proc Return Status is :-1
Любая помощь будет очень кстати. заранее спасибо.