문제

테이블의 특정 변경 후에 데이터베이스의 일부 트리거가 유효하지 않습니다.그러나 여전히 일하는 것 같습니다.내가 가진 유일한 문제는 SQL Developer를 사용하는 경우 트리거가 유효하지 않음을 나타내는 트리거의 왼쪽에 적색 십자가가 있습니다.그것은 큰 문제입니까?

나는 그 객실을 고치기 위해 방아쇠를 다시 컴파일 할 수 있지만 이것이 실제로 걱정할 가치가있는 문제인지 확실하지는 않습니다.그렇다면 이전 수백 가지의 변경 사항을 검토하고 문제가 발생하는 것을 알아보십시오.고맙습니다.

도움이 되었습니까?

해결책

데이터베이스 오브젝트에 변경 사항을 배포 할 때마다 무효화됩니다. 이는 트리거, 뷰 및 저장 프로 시저에 영향을줍니다. 그러나 다음 번에 코드가 자동으로 다시 컴파일 할 때가 뭔가를 호출합니다.

그래서 우리는 이것에 대해 걱정할 필요가 없습니다. 음, 예, 점까지. 그 일은, 트리거 (또는 무엇이든지)의 무효화는 부작용이있을 수있는 트리거의 작동에 영향을 줄 수있는 변경이 이루어질 수있는 변화가 있음을 우리에게 깃발입니다. 가장 확실한 부작용은 트리거가 컴파일되지 않는다는 것입니다. 더 자소적으로 트리거가 컴파일되지만 작동 중에 실패합니다.

우리의 변화가 근본적으로 아무것도 부러지지 않도록 개발 환경에서 트리거를 재 컴파일하는 것이 좋습니다. 그러나 우리는 모든 것이 요구에 따라 다시 컴파일 될 것이라고 확신하기 때문에 프로덕션 변화를 배치 할 때 해당 단계를 건너 뛸 수 있습니다. 우리의 신경에 달려 있습니다 :)

오라클은 스키마의 모든 잘못된 오브젝트를 자동으로 재 컴파일하기위한 메커니즘을 제공합니다.

  • 가장 간단하면 DBMS_UTILITY.COMPILE_SCHEMA()를 사용하는 것입니다. 그러나 이것은 8i 이후로 dodgy이었습니다 (자바 저장 프로 시저에 대한 지원이 원형 종속성의 잠재력을 도입했기 때문에) 더 이상 처음으로 모든 객체를 성공적으로 컴파일 할 수 없습니다.

  • 9i 오라클의

  • 은 우리에게 물건을 다시 컴파일 한 스크립트를 향상 시켰습니다. 불행히도 SYSDBA 액세스가 필요합니다.

  • 10g에서는 기본적으로 스크립트가 수행하는 모든 것을 수행하는 UTL_recomp 포장을 추가했습니다. 이것은 많은 수의 객체를 다시 컴파일하기위한 권장되는 방법입니다. 불행히도 SYSDBA 액세스가 필요합니다. 자세히 알아보기

11g 오라클에서는 미세한 의존성 관리를 도입했습니다. 즉, 테이블의 변경 사항은 미세한 세분성 (기본적으로 테이블 레벨보다는 기본적으로 수준)에서 평가되며 변경 사항의 직접 영향을받는 객체 만 영향을받습니다. 자세히 알아보기 .

다른 팁

전혀 큰 문제가 아닙니다.

그냥 다시 컴파일 할 수 있도록 마우스 오른쪽 버튼으로 클릭하고 잘 가기에 좋습니다 ... 나는 이것을 내 자신의 경험에서 씁니다.

방금 변경 한 코드가있는 오류가있는 경우 해결할 수 있도록 표시됩니다.컴파일러는 오류가 발생할 경우 문제가있는 곳 (라인 번호, 변수 이름 등)을 알려줍니다.

트리거가 작동하는 경우 ORACLE이 트리거를 시작하고 자동으로 다시 컴파일 된 후 트리거를 다시 시도 할 때 ORA-04068 오류를 트래핑 할 수 있습니다.

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