2015-01-16 2 views
0

Я пытаюсь выполнить сценарий оболочки, в котором переменные со значениями в сценарии оболочки передаются в sqlplus. Но он не работает с ошибкой ниже, и EOF тоже создает проблему.Множество аргументов, переданных в sqlplus в сценарии оболочки, не принимается

yr_bkp1=$(date +"%Y") 

dt_bkp1=$(date +"%d" --date="yesterday") 

mn_bkp1=$(date +"%b") 

mo_bkp1=$(echo "$mn_bkp1" | tr '[:lower:]' '[:upper:]') 

check_fold_size_bkp1=`du -h /archive/node1/bkp/HRMIS_NODE1_PRODFULL_$yr_bkp1$mo_bkp1$dt_bkp1` 

size_bkp1=$(echo $check | head -n1 | awk '{print $1;}') 

loc_bkp1=$(echo $check | head -n1 | awk '{print $2;}') 

cd /archive/node1/bkp/HRMIS_NODE1_PRODFULL_$yr_bkp1$mo_bkp1$dt_bkp1 

clnt_cnt1=$(ls -ltr 

/archive/node1/bkp/HRMIS_NODE1_PRODFULL_$yr_bkp1$mo_bkp1$dt_bkp1/*.gz | wc -l) 

export ORACLE_HOME=/apps/oracle/oracle_ee/product/11.2.0/dbhome 

/oracle_ee/sqlplus DBA_SCHEMA/[email protected] @/rmanbkp/exp_bkp_hpay_essdb/test.sql $loc_bkp1 $clnt_cnt1 <<EOF 
EOF 

Когда я пытаюсь выполнить это собирание только одно значение аргумента я получаю ниже ошибки

2015 

15 

JAN 

13G /archive/node1/bkp/HRMIS_NODE1_PRODFULL_2015JAN15 

296 

SQL*Plus: Release 11.2.0.3.0 Production on Fri Jan 16 19:23:01 2015 
Copyright (c) 1982, 2011, Oracle. All rights reserved. 

Connected to: 

Oracle Database 11g Release 11.2.0.3.0 - 64bit Production 
With the Real Application Clusters and Automatic Storage Management options 

old 1: insert into test (TEST1,TEST2) values ('&1','') 

new 1: insert into test (TEST1,TEST2) values ('296','') 

1 row created. 

Commit complete. 
Enter value for 2: old 1: insert into test (TEST1,TEST2) values ('','&2') 
new 1: insert into test (TEST1,TEST2) values ('','EOF ') 

1 row created. 

Commit complete. 

Commit complete. 

Disconnected from oracle...... 

Когда я копирую отдельно линии

/apps/oracle/oracle_ee/product/11.2.0/dbhome/bin/sqlplus LOGIN/[email protected] @/rmanbkp/scripts/exp_bkp_hpay_essdb_info/exp_bkp_hpay_essdb_ins.sql $loc_bkp1 $clnt_cnt1 <<EOF 

это Fetching значение аргумента и вставка в таблицу. Что может быть причиной. Какое изменение мне нужно сделать в коде. Пожалуйста, дайте мне знать.

+0

Добро пожаловать в stackoverflow.Пожалуйста, попробуйте уменьшить фрагменты кода, если это возможно. – Daenarys

+0

Я попытался отредактировать, чтобы уменьшить код. Но это не работает. – user3441224

+0

Измените свой пароль как можно скорее, как вы вставили его вместе с кодом, а затем положите тест в скрипт, чтобы проверить, что аргументы действительно содержат данные, прежде чем перейти к sqlplus. Это поможет сузить то, что происходит, и убедиться, что это то, что вы ожидаете. –

ответ

1

$loc_bkp1 будет пустым, потому что у вас есть непоследовательное имя, когда вы пытаетесь его установить. Вы получаете $check_fold_size_bkp1 от этого:

check_fold_size_bkp1=`du -h /archive/node1/bkp/HRMIS_NODE1_PRODFULL_$yr_bkp1$mo_bkp1$dt_bkp1` 

Но тогда, когда вы получаете следующие две переменные, которые относятся к $check, не $check_fold_size_bkp1. Так это выглядит, как вы хотите:

size_bkp1=$(echo $check_fold_size_bkp1 | head -n1 | awk '{print $1;}') 
loc_bkp1=$(echo $check_fold_size_bkp1 | head -n1 | awk '{print $2;}') 

Вы могли бы также рассмотреть заключая аргументы в двойных кавычках, в случае, если один заканчивается все равно пусто; и я также предлагаю вам использовать -s и -l флаги, чтобы скрыть SQL * Plus баннер и выход, если вы не можете подключиться к базе данных:

/oracle_ee/sqlplus -s -l DBA_SCHEMA/... @.../test.sql "$loc_bkp1" "$clnt_cnt1" 

В EOF «Heredoc» кажется совершенно излишним в вашем примере код.

+0

Большое спасибо. Я пропустил их. Теперь он отлично работает. – user3441224

+0

Снова я получаю ту же ошибку. Я попытался добавить дополнительные аргументы в sqlplus. Есть ли какое-либо ограничение на это. Ниже вы найдете код. и вывод выполнения скрипта sql. – user3441224

+0

/apps/oracle/oracle_ee/product/11.2.0/dbhome/bin/sqlplus -s -l DBA_SCHEMA/************ @ CENTREPO @/rmanbkp/scripts/exp_bkp_hpay_essdb_info/exp_bkp_hpay_essdb_ins.sql "$ size_bkp1" " $ size_bkp2" "$ loc_bkp1" "$ loc_bkp2" "$ clnt_cnt1" "$ clnt_cnt2" << EOF EOF – user3441224

Смежные вопросы