음머어's 까망별

블로그 이미지
무지 인간의 첫 걸음..
by 까망별 음머어
  • 287,444Total hit
  • 50Today hit
  • 139Yesterday hit


어제 Migration 작업중, 다음과 같은 에러가 발생했어.

***********************************************************************************************
C:\mysql>mysql -hIP-uID -pPASSWORD --database test < c:\20080806.sql
ERROR 1005 (HY000) at line 3528: Can't create table './test/table1.frm' (errno: 121)
***********************************************************************************************

인터넷 접속... 닝기리리~~ 삐약삐약...
MySQL Reference 검색....

오케이! 찾았으~
http://dev.mysql.com/doc/refman/5.1/en/innodb-error-codes.html


자 그럼 위의 에러 메세지를 분석해 볼까나?

1. ERROR 1005
테이블 생성 에러란다.

흠... 그 중  errno 가 150인 경우는,
 FOREIGN KEY CONSTRAINT에 대한 입력이
엄하게 되어 있는 경우라고 하는군...

그런데 내가 찾는 것은 errno가 121인 경우잖아?

그럼 또 찾아봐야지... 하는 순간
아래쪽에 사람들이 댓글처럼 POST 한 글들이 눈에 띄었어.


2. (errno : 121)
쏼라쏼라~~ (영어 읽는 중 --;;)
그 중 2008년 2월 29일 Jim Grill 이란 사람이 쓴 글이 눈에 들어오네...

번역하면.
'위에서 말한 것처럼 (121 메세지는),
어딘가에서 이미 사용하고 있는 CONSTRAINT를
더하려고 할 때 나타난다.......... (생략..)'


흠.. 그런 것이군....

예를 들어서,

** EXAMPLE **************************************************************

CREATE TABLE a (
id integer PRIMARY KEY
);

CREATE TABLE b (
id integer,
CONSTRAINT id_a FOREIGN KEY (id) REFERENCES a(id)
);

CREATE TABLE c (
id integer,
CONSTRAINT id_a FOREIGN KEY (id) REFERENCES a(id)
);


/*

라고 하면,

Error Code : 1005
Can't create table '.\test\c.frm' (errno: 121)


라는 에러 메세지가 발생하거든?

이는 다시 말해서,
b의 CONSTRAINT인 id_a
c의 CONSTRAINT인 id_a
CONSTRAINT 이름이 서로 중복되므로
에러가 발생한다는 의미라는 것이지...

*/
***************************************************************************

그러므로, CONSTRAINT는 반드시 DATABASE 내에서
UNIQUE 해야 한다는 것 !!!!





========================================================================================
아래 글은 내가 문제를 잡아 나가는 과정이니깐,
읽으면 좋고, 안 읽어도 사는데 지장 없다오~

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓


암튼간에 원인을 알았으니, 일을 해야 할 것 아닌감?
그래서, 대상테이블들을 모두 들쑤셔 보기 시작했어.

대체 어떤 넘이 나의 소중한 FOREIGN KEY를 물고 있는게냐!!!!!
그런데... 못 찾겠더란 말이지....

궁극의 비책 '전부몰살' 만이 방법이려던가......
결국....대상 테이블 모두 DROP....

얼래?  한 넘 DROP이 안 되넹....
**** <ERROR MESSAGE> **************************************************
Error Code : 1217
Cannot delete or update a parent row: a foreign key constraint fails

***************************************************************************

다 지웠는데, FOREIGN KEY를 물고 있다고 나와?

으윽!!!!!!

내가 지금까지 척살했던 대상 테이블들이 모두 무죄였었다는 것과,
몇 시간 동안 엄한 넘이랑 드잡이질을 하고 있었단 것을 깨닫는 순간이었지......
꾸어어어~~~
ㅠ,.ㅠ

내가 작업하는 DB에는,
진짜 보기만 해도 쏠릴 정도의 많은 수의 테이블이 존재했는데,
그 넘들 중 한 넘이 물고 있을 것이라는 생각에.....

......이런 쉡딱꾸리!!!!!

암튼 간에,
FOREIGN KEY를 물고 있는 b_backup 이란 테이블을 간신히 찾아냈어..
(테이블 수가 많아서, 찾기가 힘들오 ㅠ,.ㅠ)

그리고는... 기쁜 마음으로... 관계를 날려버렸어!!!
***************************************************************************
mysql> ALTER TABLE b_bakup DROP FOREIGN KEY a_id;
***************************************************************************

그랬더니... 오오!!!! 되더군.......

으흐흐... 이게 오늘 한 장장 4시간의 삽질 내용이양.....

흠... 감이 올지 모르겠지만,
오늘 MIGRATION 하던... 쿼리 크기가... 2GB 였어...
BULK 모드로 때려 부어도 30분 넘게 걸리더군....

그걸, 중간에 몇번 끊겨먹었다고 생각해봐.......
ㅠ,.ㅠ

암튼 간에 다시 한 번 강조하지!!!
FOREIGN KEY CONSTRAINT는 반드시 UNIQUE한 이름을 사용할 것..

자... 약속하는거야~~~ !!!!














 

저작자 표시 비영리
신고
TRACKBACK 0 AND COMMENT 6

ARTICLE CATEGORY

모든 이야기 (77)
독백 (22)
MySQL (25)
Oracle (7)
영화 (6)
Linux (3)
DW(Data Warehouse) (0)
(7)
음악 (1)
Python (3)
Postgresql (2)

ARCHIVE