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 

나는 그것을 인수 값을 가져 오는됩니다

/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 

라인을 별도로 복사 할 때 그것이 내가 오류

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...... 

아래 얻고있다 하나 개의 인수 값을 따기입니다 실행하려고 할 때 테이블에 삽입하십시오. 이유는 무엇 일 수 있습니다. 코드에서 어떤 변화가 필요합니다. 저에게 알려주세요.

+0

오신 것을 환영합니다 가능한 경우 코드 스 니펫을 줄이려 고 시도하십시오. – 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;}') 

또한 하나의 빈 어쨌든 끝나는 경우, 큰 따옴표로 인수를 둘러싸고 고려해 볼 수 있습니다;

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

EOF '히어 닥은'당신의 예에서와 완전히 중복 보인다 : 나는 또한 데이터베이스에 연결할 수없는 경우는 SQL * 플러스 배너 및 종료를 숨기려면 -s-l 플래그를 사용하는 것이 좋습니다 것 암호.

+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"size_bkp1에 대한 << EOF EOF – user3441224