ora-01441 에러에 대한 해결... 0 5 3,510

by Rkasid [DB 기타] [2014.11.13 15:50:23]


안녕하세요

DB 테이블 컬럼 수정 작업을 하던 중에 오류가 나는 부분이 발생하여

한가지 질문드립니다..

테이블 A 에 aaa라는 컬럼이 기존에 varchar2(100)으로 돼있다가

중간에 varchar2(4000)으로 수정을 하고 

수정했던 부분이 잘못돼어 원래 사이즈인 varchar2(100)으로  수정하려니깐

ORA-01441: column to be modified must be empty to decreasee column length

라는 에러메시지가 나오더군요...


근데 제가 알기로는 작은 사이즈에서 큰사이즈로 컬럼 길이를 수정할 수는 있으나 

다시 작게는 안된다는걸로 알고있지만.. 그래도 혹시 몰라 

본래 사이즈로 원복 전에 데이터 중 length가 100이 넘어가는 부분에 대해서는 

임의로 'TEST' 라는 식으로 데이터를 update한 후 varchar2(100)으로 수정하려니깐 

저런 에러 문구가 떨어지더라고요.

이런 상황에서 정말 본래 사이즈로 돌아갈 방법은 없는건가요??

DB초보자라 정말 방법이 없는건지 궁금하여 질문드립니다...ㅜㅜ

by DJ [2014.11.13 16:36:18]

DB Version 이 어떻게 되는지요?

제가 test한 11gr2에서는 저장된 data가 수정하려는 column길이 보다 작거나 같으면, 수정이 되는데요..

수정하려는 길이보다 긴 data가 있는 지 확인해 보시고요. (select * from A where length(aaa) > 100 )

없는데도 수정이 안되면, 해당 version에서는 지원하지 않는 것으로 판단하시면 됩니다.

그러면 결국 다시 지우고 다시 생성 해야 겠죠.


by 마농 [2014.11.13 16:56:40]
ALTER TABLE a ADD bbb VARCHAR2(100);
UPDATE a SET bbb = SUBSTRB(aaa, 1, 100), aaa = '';
ALTER TABLE a MODIFY aaa VARCHAR2(100);
UPDATE a SET aaa = bbb;
ALTER TABLE a DROP COLUMN bbb;

 


by Rkasid [2014.11.13 17:03:31]

마농님 안녕하세요^^

답변 감사드립니다.

답변대로 작업한다고 했을때 만약 update할 테이블이 서비스중인 테이블이라면 aaa=''이라고 update하면 문제가 되지 않을까요?? 


by 마농 [2014.11.13 17:44:23]

어차피 테이블 구조 변경 작업 자체가 운영중에 아무런 영향이 없을 수는 없습니다.

다운 타임을 최소화 해야죠.


by Rkasid [2014.11.13 16:57:58]

아.. 8i라서 안되는건가 보네요..

찾아보니 9버전부터는 지원한다고하네요^^;; 

테스트도 해보시고 세심한 답변 감사드립니다^^

삭제는 할 수 없는 관계로 그냥 두어야할듯하네요..

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