2011-12-07 2 views
0

트리거 본문에 트리거의 부모 스키마를 지정합니다.내가 <code>MYLOGTABLE</code>에 <code>MYCHECKEDTABLE</code>에 만든 모든 삽입 작업 기록이 트리거를 작성 IBM 시스템 I</strong>에 대한 <strong>DB2에서

이제 전체 스키마를 새로운 스키마 NEWSCHEMA으로 복사한다고 가정 해보십시오. NEWSCHEMA.MYCHECKEDTABLE에 레코드를 삽입하면 NEWSCHEMA.MYLOGTABLE 대신에 MYSCHEMA.MYLOGTABLE에 로그 레코드가 추가됩니다. 즉, 트리거와 테이블이있는 스키마에서 로그 레코드가 추가됩니다. 이것은 큰 문제의 원인입니다! 또한 많은 사용자가 내 제어없이 스키마를 복사 할 수 있기 때문에 또한 ...

따라서 은 트리거 본문에 트리거가있는 스키마를 지정하는 방법이 있습니까? 이렇게하면 로그 레코드를 올바른 MYLOGTABLE에 기록합니다. PARENT SCHEMA과 같은 것 ... 또는 해결 방법이 있습니까? 많은 감사!

답변

0

불행히도 나는 방아쇠가 살고있는 스키마 은 방아쇠의 몸체 안쪽에서을 발견 할 수 없다는 것을 깨달았습니다.

그러나 일부 해결 방법 (너무 @krmilligan 덕분에)있다 :

  • CPYLIB을 실행하는 사용자의 권한을 데려가하고이 유틸리티를 사용하기는.
  • 실시간으로 실행되는 백그라운드 에이전트를 생성하여 동기화되지 않은 트리거를 찾습니다.
  • CPYLIB의 경우 TRG 옵션의 기본값을 *NO으로 설정하십시오. 이런 식으로 사용자가 명시 적으로 지정한 경우를 제외하고는 트리거가 절대 복사되지 않습니다.

트리거 복사가 필요한 컨텍스트가있을 수 있더라도 가장 간단한 것이므로 마지막 것을 선택합니다. 그런 경우에는 첫 번째 해결 방법을 사용합니다.

1

HLL에 정의 된 외부 트리거는 트리거를 실행 한 테이블의 라이브러리 이름이 포함 된 트리거 버퍼에 대한 액세스 권한을가집니다. 이는 MYLOGTABLE에 대한 참조를 한정하는 데 사용될 수 있습니다.

자세한 내용은 11.2 "IBM Redbook Stored Procedures, Triggers, and User-Defined Functions on DB2 Universal Database for iSeries"의 "트리거 프로그램 구조"를 참조하십시오.

또는 CURRENT SCHEMA 특수 레지스터 또는 GET DESCRIPTOR 문을 사용하여 트리거 및/또는 테이블의 현재 위치를 확인할 수 있습니다.

+0

고마워요! 불행히도'CURRENT SCHEMA'는 기본 스키마이거나'INSERT'를 수행하기 전에'SET SCHEMA'로 설정 한 것입니다. 나는'GET DESCRIPTOR'를 시도하고 있습니다 ... 나는 디스크립터를 설정해야만할까요? 나는 혼란스러워. – bluish