2010-05-06 5 views
0

좋아요, 클라이언트가 LIVE 데이터베이스에서 새로운 키 구조를 생성하는 것을 포함하여 특정 프로세스를 자동화하기를 원하기 때문에 tables.columns 사이에 관계를 만들어야합니다. 이제 제약 조건에 대한 정보를 보유하기 위해 테이블 ​​ALL_CONS_COLS EN USER_CONSTRAINTS를 발견했습니다. 이 테이블에 수동으로 제약 조건을 만들면 원래 제약 조건을 다시 만들 수 있어야합니다. 내 질문 : 조사해야 할 테이블이 더 있습니까? 다른 제안 사항이 있습니다. 매우 더럽고 오류가 발생하기 쉽습니다.Oracle 수동으로 FK 제약 조건을 추가하십시오.

현재 작업 방식 :

  • 이 약동학 각 테이블에 새 열을 만들기;

  • 이 PK에 대한 GUID를 생성하십시오.

  • 각 테이블에 FK를위한 새 열을 만듭니다.


  • FK와 연결된 GUID를 가져옵니다. SOFAR 수행

....... ......

  • 에 따라 새로운 제약 조건을 추가 이전
    하나;

  • 이전 제약 조건을 제거하십시오.

  • 새 이름 바꾸기;

이것은 일종의 dodgy이며 차라리 내 방법을 변경하면 모든 아이디어가 도움이 될 것입니다.

다른 점은 클라이언트는 실제 데이터베이스에서 int에서 guid로 키 구조를 변경하려고합니다. 이게 가장 좋은 방법은 무엇입니까

답변

4

먼저 데이터 딕셔너를 사용하여 제약 조건을 작성/수정/삭제하지 않고 일반 ALTER TABLE t ADD/MODIFY/DROP CONSTRAINT 구문을 사용하여 제약 조건을 삭제/수정/삭제하지 마십시오.

1)이 작업은 먼저 기존의 외래 키 제약 조건을 삭제)

2 일에 진행되는 동안 아무도 데이터를 수정 없는지 확인 : 시나리오에서

, 나는 다음과 같은 시나리오를 사용한다고 생각합니다 새로운 제약 조건과 이름 충돌을 피하십시오.

3) 새로운 외래 키 제약

그리고 당신이 완료 만들기 GUID 열

5

)에 이전 기본 키 제약

4

) 만들기 새 기본 키 제약 조건을 삭제합니다.

감사합니다. Rob.

+0

좋아, ALTER TABLE이긴하지만 기존 관계를 복사하는 작업을 자동화하려면 어떻게해야합니까? 내가 상상할 수있는 유일한 방법은 all_cons_cols 및 user_constraints 테이블의 관계를 쿼리하고 '새'열의 복사본을 만들고 'old'열의 DROPping입니다. – Oxymoron

+0

명령을 생성하는 스크립트를 작성하십시오. "select 'alter table'|| table_name || 'drop constraint'|| constraint_name || ';'와 같은 것입니다. user_constraints에서 constraint_type = 'P' '로 설정하면 모든 기본 키가 삭제됩니다. 그리고 외래 키를 삭제하고 새로운 제약 조건을 만드는 것과 유사한 것입니다. –

+0

그래서 나는 지금하고있는 것처럼 user_constraints 테이블을 정확하게 사용해야한다.) 우리는 실제 데이터베이스와 레코드에 대해 이야기하고있다. 참조로 인해 DISABLE 또는 DROP하는 것이 쉽지 않습니다. – Oxymoron

관련 문제