A 테이블과 B 테이블을 사용 하여
C_V 라는 VIEW 를 만들었는데요..
사용중에 A 테이블에 항목을 ALTER 했을 경우
A 테이블을 SELECT 하지 못하는 경우가 발생 합니다(응답없음) .... 어떤 문제 인가요?
VIEW에서 사용중인 테이블을 ALTER 할 경우 주의 사항이 있는지요 ?
테이블 ALTER시 SELECT 하지 못하는 경우는 library cache pin 의 wait event 일 가능성이 높습니다.
select 시에 일반적으로는 lock이 걸리지 않지만 latch에서 shared lock을 사용합니다. alter시에는 latch에 순간적으로 exclusive lock이 걸리는 경우가 있는데 이때 새로 수행되는 쿼리들은 모두 대기하게 됩니다. 데이터의 사용이 많지 않을 경우에는 alter가 큰 문제를 일으키지는 않으나 busy한 상태에서는 관련된 쿼리들이 모드 wait 상태로 빠지게 될 가능성이 크고 경합을 일으켜 hang에 준하는 상태에 빠질수도 있으므로 주의해야 합니다. 특히 많은 쿼리(또는 procedure)에서 사용되는 table일수록 alter 작업은 조심해서 하는게 좋습니다.
자세한 내용은 http://wiki.ex-em.com/index.php/Library_cache_pin 문서를 읽어보시기 바랍니다.
감사 합니다.
업무 중에 불가피 하게 A TABLE를 ALTER 할 경우 좋은 방법이 있나요?
VIEW 에 관련된 TALBE을 ALTER 할 경우 해당 펑션,트리거,프로시져를 Disable 시키고 해야 하는 것 인지요..
해당 object를 disable시키게 되면 못쓰게 되는데, 괜찮은지요??
된다고 하더라도 disable하는 순간 사용하던 cursor 들이 invalidate상태로 빠질것이므로 업무자체가 마비될수 있습니다.
꼭 업무시간에 해야한다면, 그래도 사용이 적은 시간(점심시간이라던가?)에 하는게 가장 좋겠죠. 또는 많이 사용된다 하더라도 해당 테이블을 사용하는 서비스가 적은 시간에 하는게 최선일듯 합니다. 저로서는 DB작업을 '업무시간 중 아무때나' 할수 있다는 조건이 이해가 되질 않네요.. ^^;
미들웨어를 사용한다면 해당 테이블이나 object를 사용하는 서비스를 내리는 방법도 있겠습니다만.. 이런 부분들은 전략적 판단이 필요할듯 합니다.
100% 문제를 피해갈 방법은 없을것으로 보이네요..
답변 감사 드립니다. ㅎㅎ