2010-07-08 6 views
13

테이블의 특정 변경 사항이 적용되면 데이터베이스의 트리거 중 일부가 유효하지 않게됩니다. 그러나 그들은 여전히 ​​일하고있는 것으로 보인다. 내가 가지고있는 유일한 문제는 SQL Developer를 사용할 경우 유효하지 않음을 나타내는 트리거의 왼쪽에 적색 십자가가 있다는 것입니다. 큰 문제입니까?오라클에서 트리거가 유효하지 않습니다.

이 문제를 해결하기 위해 트리거를 다시 컴파일 할 수 있음을 알고 있습니다. 그러나 이것이 정말로 가치있는 문제인지 확인하지 못했습니다. 그렇다면 이전의 수백 가지 변경 사항을 검토하고 문제의 원인을 찾아야합니다. 고맙습니다.

답변

16

데이터베이스 개체에 변경 사항을 배포 할 때마다 그에 따라 달라지는 코드가 무효화됩니다. 이는 트리거, 뷰 및 저장 프로 시저에 영향을 미칩니다. 그러나 다음에 무언가가 코드를 호출하면 데이터베이스가 자동으로 다시 컴파일합니다.

그래서 걱정할 필요가 없습니다. 맞습니까? 네, 요점까지. 문제는 트리거의 무효화 (또는 무엇이든)는 부작용이있을 수있는 트리거의 작동에 영향을 미칠 수있는 변경 사항이 있음을 나타내는 플래그입니다. 가장 확실한 부작용은 트리거가 컴파일되지 않는다는 것입니다. 더 미묘하게, 트리거가 컴파일되지만 작동 중에 실패합니다.

따라서 개발 환경에서 트리거를 강제로 다시 컴파일하여 변경 사항이 근본적으로 손상되지 않았는지 확인하는 것이 좋습니다. 그러나 우리는 변경 사항을 프로덕션 환경에 배치 할 때이 단계를 건너 뛸 수 있습니다. 모든 것이 필요에 따라 다시 컴파일 될 것이라고 확신하기 때문입니다. 우리의 신경에 달려있다.

오라클은 스키마의 모든 유효하지 않은 객체를 자동으로 다시 컴파일하는 메커니즘을 제공한다.

  • 가장 직접적인 것은 DBMS_UTILITY.COMPILE_SCHEMA()입니다. 그러나 이것은 8i (Java Stored Procedures에 대한 지원이 순환 의존성에 대한 잠재 성을 도입했기 때문에) 이후 처음부터 모든 객체를 성공적으로 컴파일 할 수 있다는 보장이 없으므로 현혹되어 왔습니다.

  • 9i 오라클은 어떤 것을 다시 컴파일 한 스크립트 $ORACLE_HOME/rdbms/admin/utlrp.sql을주었습니다. 불행히도 SYSDBA 액세스가 필요합니다.

  • 10g에서 UTL_RECOMP 패키지가 추가되었습니다.이 패키지는 기본적으로 해당 스크립트가 수행하는 모든 작업을 수행합니다. 많은 수의 개체를 다시 컴파일 할 때 권장되는 방법입니다. 아쉽게도 SYSDBA 액세스가 필요합니다. Find out more.

11g에서 오라클은 세부 종속성 관리를 도입했습니다. 즉, 테이블에 대한 변경 사항은 세밀한 세분성 (기본적으로 테이블 수준이 아닌 열 수준)으로 평가되며 변경 사항에 의해 직접 영향을받는 개체 만 영향을받습니다. Find out more.

+0

고마워,이 설명은 아주 좋아 보인다. 위의 링크를 클릭하여 10g의 설명서를 읽었습니다. 이 스크립트를 실행하려면 AS SYSDBA에 연결되어 있어야합니다. 어쨌든 SYSDBA로 로그인해야합니다. – newguy

+0

@Newguy - 네가 맞아. – APC

0

전혀 큰 문제는 아닙니다.

재 컴파일을 위해 마우스 오른쪽 버튼을 클릭하기 만하면됩니다. 제 경험으로이 글을 쓰고 있습니다.

방금 ​​변경 한 코드에 오류가있는 경우 수정할 수 있도록 오류가 표시됩니다. 컴파일러는 오류가 발생한 경우 어디에 문제가 있는지 (줄 번호, 변수 이름 등) 알려줍니다.

+0

트리거를 다시 컴파일하지 않으면 어떻게됩니까? 나는 수십 개의 클라이언트 서버에 데이터베이스를 배포 할 때마다 매번 다시 컴파일해야하는 어려움이 있습니다. – newguy

+0

하지만 재 컴파일이 필요하다고 생각합니다. 데이터베이스 코드에 오류가 없음을 보장 할 수 있습니다. 시간 소모적이지만 정말로 필요한 것. 적색 십자 표시가 있으면 트리거 참조 코드가 다소 바뀌 었음을 의미합니다. 이것은 경보이므로 코드를 변경하여 발생하는 오류가 없다는 것을 주장하기 위해 다시 컴파일하는 조치를 취할 수 있습니다. –

+0

수백 개의 트리거, 프로 시저, 함수 및 뷰가 유효하지 않은 경우 큰 문제입니다. 그리고 10 분의 재 편집 결과를 해결하기 위해 일주일이 걸립니다. – PhatHV

0

트리거가 작동 중이면 오라클이 트리거를 실행할 때 ORA-04068 오류를 트래핑하고 트리거가 자동으로 재 컴파일 된 후 다시 시도 할 가능성이 있습니다.

+1

아니요, "INVALID"로 표시된 트리거 또는 저장된 proc을 실행하려고하면 Oracle은 먼저 실행 전에이를 재 컴파일하려고 시도합니다. ORA-04068은 패키지 상태와 관련이 있으며 트리거 상태와는 아무런 관련이 없습니다. –

관련 문제