2016-12-20 1 views
1

동일한 데이터베이스의 두 테이블에서 마이그레이션을 수행하는 방법을 찾으려고합니다. 이 마이그레이션은 가동 중지 시간을 최소화하기 위해 최대한 빨리 이루어져야합니다. 이드로> (ID, 이름, 주소)동일한 데이터베이스에서 빠른 데이터 마이그레이션

그래서 사람 -

person_table : 예에 넣어

내가 사람 테이블과 같이이 있다고 할 수 있습니다 , 이름과 주소. 내 시스템에는 수백만 개의 개인 레지스트리가 포함될 것이며 개인 테이블을 분할해야한다고 결정되었습니다. > (ID, 이름, 주소, partition_time)

지금이 테이블 partition_time라는 여분의 열을 포함 -

partitioned_person_table 이렇게하려면, 나는 새 테이블을 만들었습니다. 이 테이블은 범위 파티션 (매시간 하나의 파티션)이기 때문에이 테이블의 파티션 키입니다.

마지막으로, 나는 최고의 성능과 partitioned_person_tableperson_table에서 모든 정보를 이동하는 방법을 찾을 필요가있다. 내가 시도 할 수

  • 첫 번째 것은 단순히 같은 문 작성하는 것입니다 : person_table FROM

    partitioned_person_table (ID, 이름, 주소, partition_time) SELECT ID, 이름, 주소 INTO INSERT, CURRENT_TIMESTAMP를;

문제는 내 두 번째 방법을 사용하는 것이 었습니다

  • (또한 임시 테이블이 모든 정보를 처리하지 못할 수도 있습니다)는 레지스트리의 수백만에 관해서이 매우 느려질 수 있다는 것입니다 교환 구역 방법. 유감스럽게도 테이블에 다른 열 번호가 포함되어 있기 때문에이 작업을 수행 할 수 없습니다.

최상의 성능 (작동 중지 시간 감소)으로 성능을 향상시킬 수있는 다른 방법이 있습니까?

감사합니다.

+0

[online table redefinition] (https://docs.oracle.com/cd/E11882_01/server.112/e25494/tables.htm#ADMIN11667)을 고려 했습니까? –

+0

@AlexPoole 답장을 보내 주셔서 감사합니다. 아직 Online Table Redefinition에 대해 들어 보지 못했지만 이것을 사용하여 테이블에 여분의 열을 추가하여 파티션 교환을 수행 할 수 있습니까? –

+1

지금은 얼마나 큰가요? 당신은 오늘날 얼마나 큰지를 말하지 않는 "수백만 명을 포함 할 것"이라고 말합니다. – tbone

답변

1

당신이 상태로 살 수 있다면, 현재의 모든 레코드를 하나 개의 파티션에 위치 할 것이다 (그리고 INSERT 접근 제안은), 당신은 단지

1) 새 열을 추가 할 수 있습니다 partition_time 중 하나로서 NULL 또는 가능하면 metadata default only - 필요 12c

012) 2) 온라인 재 정의 (테이블이 오프라인 인 유지 관리 기간이없는 경우) 또는 다른 방식으로 교환 파티션을 사용하여 테이블을 분할 테이블로 전환하십시오.

+0

답장을 보내 주셔서 감사합니다. Online Redefinition을 수행하면 마이그레이션이 이미 실행 중일 때 삽입되는 정보는 어떻게됩니까? 오라클은 자동으로 새로운 정보가 삽입되고 데이터가 마이그레이션되는지 검사 할 것입니까? 감사. –

+0

네, 이것이 [DBMS_REDEFINITION] (http://docs.oracle.com/database/121/ARPLS/d_redefi.htm#ARPLS042)의 작동 방식입니다. 문서 전제 조건과 변경 사항이 어떻게 연기되고 전파되는지 확인하십시오. –

관련 문제