2016-08-01 2 views
3
# it works fine 
db2 connect to <db_name> user <user> using <passwd> 
while read aline 
do 
    tab=$(echo $aline | awk -F',' '{print $1}') 
    col=$(echo $aline | awk -F',' '{print $2}') 
    max_id=$(db2 -x "select count($col) from $tab") 
    echo $tab $col $max_id 
done < tab.ls 


# it doesn't work because of lost DB connection 
db2 connect to <db_name> user <user> using <passwd> 
cat tab.lst | while read aline 
do 
    tab=$(echo $aline | awk -F',' '{print $1}') 
    col=$(echo $aline | awk -F',' '{print $2}') 
    max_id=$(db2 -x "select count($col) from $tab") 
    echo $tab $col $max_id 
done 

코드 두 부분으로 약간의 차이가 있습니다. 첫 번째 부분은 예상대로 실행되지만 두 번째 부분은 차이가 없습니다.BASH의 파이프 라인은 db2와의 연결이 끊어지기 때문에

파이프 라인으로 인해 DB 연결이 끊어지는 것 같습니다.

이유를 설명 할 수 있습니까?

미리 감사드립니다.

가 BTW : 나는 RH 리눅스 6.6, bash는 테스트

+1

다중 호출; 'IFS =, read -r tab col 기타; do max_id = $ (...); 에코 ...; 완료 chepner

+0

정말 고마워! 도움이 안돼! – user6379021

답변

0

DB2 documentation는 말한다 :

당신은 한 번에 하나의 DB2 데이터베이스에 연결할 수 있습니다

; 그러나 여러 개의 CONNECT 문을 사용하여 연결을 구별하기 위해 alias 인수를 사용하여 여러 DB2 데이터 소스에 연결할 수 있습니다.

위 예제에서 두 번 연결하고 있습니다. 연결 재설정하거나 종료 고려 : awk`가 낭비 및 불필요한`에

db2 connection reset 

또는

db2 terminate 
관련 문제