테이블에 컬럼을 추가하면, 해당 테이블을 사용한 오라클 패키지가 깨지나요? 0 2 2,266

by 권오창 [2020.01.18 09:53:40]


어느날 갑자기 패키지가 빨간색이 나오며 깨져 있습니다.

팀장님이 원인을 찾으라고 하는데 해당 테이블은 여러군대에서 사용하는 테이블인데

그 테이블에 변경을 준건 개발자 한명이 컬럼 추가한 거 밖에 없다고 하는데요...

by 마농 [2020.01.18 10:51:12]

네. Alter 등의 DDL 발생시 관련 Object 들이 invalid 됩니다.
invalid 된 object 를 호출하면 자동 compile 되긴 합니다.
다만 자주 사용되는 중요 테이블의 경우 자동 컴파일에 맞기기 보다는
DDL 작업 후 바로 invalid 목록 확인해서 재컴파일 해주시는게 좋습니다.


by 임상준 [2020.01.22 16:22:33]

툴에서 빨간색으로 엑스표시하고 그런식으로 표시 해 주니까 깨진다 에러났다 이렇게 받아들이시는 분들이 많은데, 그냥 그건 "유효하지 않은" 상태를 나타내는 의미입니다. 실제로 문법 오류로 잘못 컴파일 되어서 유효하지 않을수도 있지만 위 상황처럼 참조 오브젝트의 변경이 일어나서 프로시저를 다시 컴파일 해서 오류가 있는지 없는지 검증하기 전 까지는 유효한지 아닌지 알지 못하는 상태일 경우에도 마찬가지로 유효하지 않은 상태죠.

테이블에 변경이 일어났을 때 바로 컴파일이 된다고 했을 때, 만일 연관 plsql 오브젝트끼리 의존성이 복잡하게 얽혀 있으면 그게 모두 일시에 재 컴파일 되는거고 이로 인한 발생할 수 있는 라이브러리 캐시 내 경합을 방지하기 위해서 일부러 바로 컴파일 되지 않도록 되어 있는걸로 기억합니다(오래전에 본거라 정확하지 않습니다).

어플리케이션에서 항상 사용하는 PL/SQL 이라고 하면 INVALIDATION 후 재 컴파일 시 라이브러리캐시 핀 경합으로 컴파일이 되지 않는 경우도 있습니다. 패키지일 경우는 스펙은 내버려 두고 바디만 컴파일이 되는 경우에는 핀 경합이 발생하지 않는다고 예전에 읽었던 것 같습니다. 라이브러리 캐시 오브젝트는 패키지 스펙을 바라보고 있는거고, 실제 변경은 바디에서 발생하니까요. 그래서 패키지 사용을 권장한다는 내용이었는데 마찬가지로 기억이 정확하지 않고 이론은 이론일 뿐이라..

아무튼 이런저런 이유로 인해 테이블 변경을 아무나 아무때나 막 하는건 좋은 관리방법은 아니라고 봅니다 특히 운영시스템일 경우에는요

 

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입