2016-11-05 1 views
1

고객의 소망 때문에 회사에서 소프트웨어를 새로운 데이터베이스 (iSeries 용 DB2 (7.1))로 이식하고 있습니다. Whe는 자동 업그레이드 시스템을 가지고있어 떨어 뜨리고 변경되고 생성됩니다. iSeries에는 경고 메시지를 처리하는 매우 특별한 방법이 있습니다. SQL (ADO.NET)을 통해 lib를 드롭하면 작업이 중단되고 사용자 입력을 기다립니다.기존 애플리케이션을 I 용 DB2에 이식

SYSRPYL을 채우고 QSYS2.QCMDEXC ('CHGJOB INQMSGRPY (* SYSRPYL)')를 호출하면 블로킹 메시지를 차단하는 유일한 방법이거나 일부 글로벌 스위치가있어 iSeries가 일반 데이터베이스처럼 작동합니까? 이 표를 채워야 할 경우 모든 관련 메시지를 얻을 수있는 방법이 있습니까? 아니면 우리가 반응 할 수 있기를 기다리기 위해 먼저 기다려야합니까?

다른 문제는 문법 문제 인 것 같습니다. 우리는 프로젝트를 MSSQL, Oracle 및 DB2 LUW에서 실행하고 있습니다. - iSeries에서 조인에 정의 된 with 절을 사용하는 것과 같습니다 (select othercol from W_WithClause))가 작동하지 않는 것 같습니다. iSeries가이 SQL을 준수하게 만들거나 모든 것을 다시 테스트하고 SQL을 다시 작성해야합니까? 당신은 INQMSGRPY (* DFT)에서 볼 수

+1

어떤 메시지를 보내고 있는지 알려주시겠습니까? (특히 메시지 ID를 포함하십시오.) 또한 특정 테이블, 뷰 등이 아닌 전체 스키마 (라이브러리)를 삭제해야합니까? – user2338816

+0

"일반 데이터베이스"... Lolz. –

답변

3

...

그러나 당신이 메시지를보고 그들은 기본과 무엇인가가 있는지 확인해야 할 것이다. 메시지 설명 표시 (DSPMSGD) 명령을 사용하여 메시지의 기본값을 찾을 수 있습니다.

예를 들어 새로 작성한 스키마를 제거하면 CWTEST의 수신기 QSQJRN0001이 적어도 완전히 저장되지 않습니다. (I C)

해당 메시지의 기본값은 I-Ignore입니다.

SQL 구문의 호환성에 관한 한, 귀하의 유일한 선택은 진술을 다시 작성하는 것입니다. i에 대한 Db2는 Oracle이 아니며 MS SQL Server가 아니며 LUW 용 DB2도 아닙니다. DB2 for i의 코드베이스는 LUW 용 DB2 및 z/OS 용 DB2의 코드베이스와 별개입니다.

아직 찾지 못했다면 IBM DB2 for i Porting Information 페이지를 시작하는 것이 좋습니다.

IBM DB2 for i가 ANSI/ISO SQL 표준을 철저히 준수하므로 DB2 for i에서 작동하는 문이 다른 DB에서도 작동합니다. 그것은 당신에게 문제를 줄 것입니다 다른 DBs에 대해 현재 가지고있는 비표준 구문입니다.

단점은 v7.1이 6 세 이상인 점입니다. v7.2가 2014 년에 릴리스되었고 v7.3이 올해에 릴리스되었습니다. 따라서 새로운 기능을 놓치게 될 것입니다. 일부 향상된 기능은 이전 릴리스로 다시 포팅되었습니다. DB2 for i - Technology Updates 페이지를 살펴볼 수 있습니다.

+1

FYI, IBM i 7.3에서는 CPA7025 (및 모든 저널 리시버 종료 프로그램)를 무시하기 위해'DROP SCHEMA CASCADE '를 향상 시켰습니다. –

1

메시지의 원인을 해결하는 것이 가장 좋습니다. 그 원인을 해결하기 위해, 우리는 어떤 메시지가 보여지고 있는지를 알아야합니다. Charles에 의해 언급 된 CPA7025가 가장 가능성이 있지만 다른 단계는 관련된 단계의 순서에 따라 가능합니다. CPA7025 상태를 해결하는 방법의

한 예로이 SQL 문 순서에 의해 설명 될 수 있습니다 시퀀스는 하나의 간단한 테이블 스키마를 생성

CREATE COLLECTION TSTDLTLIB ; 

CREATE TABLE TSTDLTLIB.TSTDLT (K1 ROWID NOT NULL, F1 VARCHAR (20) 
NOT NULL WITH DEFAULT, F2 REAL NOT NULL WITH DEFAULT) ; 

INSERT INTO TSTDLTLIB.TSTDLT VALUES(default, 'Value 1', 999) ; 

CL: ENDJRNLIB LIB(TSTDLTLIB) ; 
CL: ENDJRNPF FILE(*ALL) JRN(TSTDLTLIB/QSQJRN) ; 
CL: DLTJRN JRN(TSTDLTLIB/QSQJRN) ; 
CL: DLTJRNRCV JRNRCV(TSTDLTLIB/QSQJRN*) DLTOPT(*IGNINQMSG) ; 

DROP COLLECTION TSTDLTLIB CASCADE ; 

이 테이블에 행을 삽입 한 후 떨어질 개요. 그러나 DROP 이전에 짧은 일련의 시스템 명령을 사용하면 스키마의 일부인 기본 저널이 처리됩니다.

SQL 스키마에는 확약 제어를 유지하고 복구를 지원하는 데 사용되는 저널이 있습니다. IBM i에서 저널 리시버는 올바르게 관리해야합니다. 하나의 예상되는 항목은 수신자가 삭제되기 전에 저장된다는 것입니다. 따라서, CPA7025, "수신자 & 1이 &에 저장되지 않았습니다."

먼저 활성 저널 링키지가 끝나면 해당 저널 자체가 삭제 될 수 있습니다. 다양한 ENDJRNxxx 명령이 가능합니다. ENDJRNPF 명령 만 필요할 수도 있지만 그렇지 않을 수도 있습니다. 저널이 h 제된 후에 연관된 수신기를 h 제할 수 있습니다.

DLTJRNRCV 명령은 QSQJRN *이라는 이름의 모든 수신자를 디폴트 SQL 저널의 수신자에 맞게 제거합니다. 또한 명령이 DLTOPT (* IGNINQMSG)를 "조회 메세지 무시"로 지정하기 때문에 조회 메세지가 없어야합니다.

이제 실제로 구현하는 방법은 프로세스의 특정 세부 사항에 따라 달라집니다. 더 많이 알려졌다면 더 많은 것을 말할 수 있습니다.

관련 문제