컬럼 추가와 디폴트값 > 기술자료 | 해피정닷컴

컬럼 추가와 디폴트값 > 기술자료

본문 바로가기

사이트 내 전체검색

컬럼 추가와 디폴트값 > 기술자료

Oracle 컬럼 추가와 디폴트값

페이지 정보


본문

기존 테이블에 컬럼을 추가할 때 디폴트 값을 지정하면 기존 데이터는 건드리지 않고 새로 추가되는 데이터에 대해서만 디폴드 값이 적용되는 줄 알고 있었다. 그런데 오늘 우연히 작업을 하다가 그동안 잘못 알고 있었다는 것을 알게 되었다. 따라서 다음 두 작업은 완전히 다르게 진행된다.

1. 컬럼 추가시 default 값을 지정하는 경우
alter table t add(c1 char(1) default 'X');

2. 컬럼을 추가한 다음 default 값을 지정하는 경우
alter table t add(c1 char(1));
alter table t modify (c1 default 'X');

1의 경우 컬럼이 추가되면서 기존 레코드에 대해서도 추가된 컬럼에 디폴트 값을 설정하므로, 모든 레코드를 업데이트하는 것과 마찬가지이며 시간 오래 걸린다. 이 시간동안 다른 세션에서 테이블에 DML을 시도하면 해당 세션은 library cache lock 대기상태가 된다.

2와 같이 컬럼 추가와 디폴트 값을 따로 작업할 경우 기존 레코드에 대한 값은 변경되지 않는다. 따라서 기존 레코드에 대해 새로 추가된 컬럼의 값은 null이 된다. 새로 insert하는 레코드부터 디폴트 값이 적용된다.

매뉴얼(SQL Reference)에도 다음과 같이 명시되어 있다.

    DEFAULT
    ...If you are adding a new column to the table and specify the default value, then the database inserts the default column value into all rows of the table.

따라서 컬럼을 추가할 때 디폴드 값을 함께 주는 것은 주의해야 겠다. 트랜잭션이 빈번히 발생하는 테이블에 컬럼을 추가할 때 디폴드 값을 주어 컬럼을 추가할 경우, 새로 추가된 컬럼에 디폴드 값을 설정하느라 테이블이 상당 시간동안 접근 불가능 상태가 될 수 있기 때문이다. 이렇게 된다면 해당 테이블에 접근하는 트랜잭션은 컬럼 추가 작업이 끝날 때까지 모두 대기 상태에 빠지거나 timeout으로 실패하게 될 것이다.


자료인용
http://ntalbs.tistory.com/7

댓글목록

등록된 댓글이 없습니다.


Total 2,634건 57 페이지
  • RSS
기술자료 목록
1514
일반   16852  2014-01-28 13:19  
1513
일반   17588  2014-01-27 13:37  
1512
PHP   14917  2014-01-26 21:07 ~ 2014-01-27 00:00  
1511
그누보드   14407  2014-01-23 21:16  
1510
Editor   19371  2014-01-21 04:09  
1509
킴스큐   45454  2014-01-17 16:59  
1508
Adobe   39404  2014-01-16 21:25  
1507
일반   14031  2014-01-15 22:21  
1506
Oracle   20534  2014-01-10 15:52  
열람
Oracle   16303  2014-01-09 06:01  
1504
Oracle   18779  2014-01-09 01:20  
1503
Oracle   45639  2014-01-09 01:13  
1502
Oracle   14181  2014-01-08 23:43  
1501
호스팅   13627  2014-01-06 13:49  
1500
그누보드   13118  2013-12-26 19:24  
1499
Oracle   25243  2013-12-25 23:39  
1498
Oracle   37236  2013-12-11 01:59  
1497
Oracle   41255  2013-09-25 15:08  
1496
Oracle   21243  2013-09-30 00:48  
1495
Oracle   24546  2013-10-06 04:24  

검색

해피정닷컴 정보

회사소개 회사연혁 협력사 오시는길 서비스 이용약관 개인정보 처리방침

회사명: 해피정닷컴   대표: 정창용   전화: 070-7600-3500   팩스: 042-670-8272
주소: (34368) 대전시 대덕구 대화로 160 대전산업용재유통단지 1동 222호
개인정보보호책임자: 정창용   사업자번호: 119-05-36414
통신판매업신고: 제2024-대전대덕-0405호 [사업자등록확인]  
Copyright 2001~2024 해피정닷컴. All Rights Reserved.