문제

Kornshell (KSH)에서 다음 명령을 실행하려고합니다.

set -A INDEXES `db2 "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail" | awk '{print $1"."$2}'`

내가 달성하려는 것은 특정 테이블 위의 인덱스 목록을 나중에 반복 할 수있는 배열에 배치하는 것입니다.

문제는 위의 명령을 실행할 때 배열의 내용이 'SQL1024N'의 오류 메시지로 시작한다는 것입니다 (데이터베이스 연결이 존재하지 않음을 알려줍니다).

그러나 내가 제거하면 awk 성명서의 끝에서 :

set -A INDEXES `db2 "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail"`

그것은 잘 작동합니다 (글쎄, 데이터를 반환하는 한, 분명히 awk 올바른 데이터를 캡처하지 않습니다).

누구든지 왜 awk 이것이 영향을 미치고 있습니까?

이 데이터를 얻는 방법이 둘 이상인 것에 감사하지만 왜 이런 일이 일어나고 있는지에 대해 저를 당황하게합니다.

미리 감사드립니다.

도움이 되었습니까?

해결책

이 경우 DB2 CLP가 데이터베이스에 연결되어 있지 않다고 말하면 쉘이 자체 전용 DB2BP 백엔드 프로세스가 필요한 하위 프로세스를 열었 기 때문에 원래 쉘 프로세스에 의해 열리는 연결에 액세스 할 수 없기 때문입니다. 무언가 연결이 끊어지는 것이 아니라 새로 생성 된 쉘 프로세스 (및 그에 따른 DB2BP 프로세스)가 생성되고 있지만 데이터베이스에 연결하라는 지시를받지 못했습니다. 이를 해결하는 한 가지 방법은 귀하가 그러한 상황 중 하나에 있다는 것을 알 때 데이터베이스에 명시 적으로 연결 (또는 다시 연결)하는 것입니다.

set -A INDEXES `db2 connect to watevrDB >/dev/null;db2 -x describe indexes for table ${TABSCHEMA}.${TABNAME} show detail | awk {'print $1"."$2'}`

이 질문은 시스템 카탈로그보다 DB2로 스크립팅과 AWK에 관한 것이라는 것을 알고 있습니다. 그렇지 않으면 동일한 결과를 생성하기 위해 간단한 카탈로그 쿼리를 권장했을 것입니다.

다른 팁

나는 그것이 그 자체로 어색한 것 같다. 아마도 DB2가 STDOut이 TTY 또는 콘솔에 연결되는 것에 대해 특히일까요? 또는 파이프에 연결된 경우 적어도 마음에 들지 않습니다.

이것은 특이한 것이며, Pez가 말했듯이 아마도 DB2 Quirk 일 것입니다.

DB2가 연결할 정의 된 데이터베이스가없는 DB2 명령 문자열 이전에 Time 또는 Timex를 사용하는 경우 비슷한 문제를 보았습니다.

환경 변수 DB2DBDFT가있어 암시 적 연결에 대한 기본 데이터베이스를 설정합니다. 이 변수가 DBA가 아닌 사용자 가이 변수를 사용할 수 있는지 확실하지 않다고 유감스럽게 생각합니다 (앱 개발자라고 가정). 이 변수를 통해 다음을 설정하는 경우 조사 할 가치가 있습니다.

db2set db2dbdft = $ {your_db_name}

그리고 당신의 쿼리를 다시 시도합니다.

여러 데이터베이스가있는 경우 환경을 연결할 수 있습니다. 작업을 완료 한 후에는 DB2DBDFT 변수를 설정하지 않을 수 있습니다.

-X 스위치를 사용하여 DB2 명령을 사용해보십시오.

db2 **-x** "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail"....

나는 이것이 파이프 출력을 awk에 적합하지 못한 사례를 가지고있었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top