2011-11-09 4 views
-3

이와 같은 데이터 마이그레이션 스크립트가 하나 있습니다. 나는이 스크립트를 실행할 때SQL 오류 - 고유 제한

Data_migration.sql

그것의 내용은


insert into table1 select * from old_schema.table1; 
commit; 
insert into table2 select * from old_schema.table2; 
commit; 

그리고 table1pk_productname 제약 조건이

SQL> @ "data_migration.sql" 

나는 것 고유 제한 조건 (pk_productname) 위반. 그러나 개별 SQL 문을 실행할 때 오류가 발생하지 않습니다. 이것 뒤에 어떤 이유. 그리고 이것을 해결하는 방법.

+0

은 old_schema.table1과 동일한 제약 조건입니까? –

+0

제약 조건은 정확히 어떻게 보이며 테이블에 트리거가 있습니까? – steve

+0

@Phil -이 질문은 8 가지 질문에 불과합니다. – APC

답변

5

고유 제한 조건이 실패하면 기본 키 열이 충돌하는 레코드를 하나 더 삽입하려고합니다.

스크립트를 실행할 때 발생하지만 개별 명령문을 실행할 때 발생하지 않으면 스크립트에 버그가 있어야합니다.. 스크립트를 보지 않으면 버그가 무엇인지 확신 할 수 없지만 가장 가능성있는 것은 동일한 문장을 두 번 실행하는 것입니다.

또 다른 가능한 원인은 제한 조건이 지연된다는 것입니다. 즉, 트랜잭션이 끝날 때까지 적용되지 않습니다. 따라서 INSERT 문은 후속 COMMIT를 발행하지 않고 실행하면 성공한 것처럼 보입니다.

사용 가능한 제약 조건없이 데이터 마이그레이션을 실행하는 것이 일반적입니다. 나중에 EXCEPTIONS 테이블을 사용하여 다시 사용하도록 설정하십시오. 이렇게하면 문제를보다 쉽게 ​​조사 할 수 있습니다. Find out more.

+0

Phil : 정보를 주셔서 감사합니다 – realn

+0

기본 키 위반이 있다는 것을 알고있었습니다. : D 나는 왜 개인적인 진술로서 그것의 작동, 그리고 SQL 파일에서 같은 진술이 나에게 오류를주고 있는지 묻는다. – realn

관련 문제