2016-10-14 2 views
4

라이브 프로덕션 환경에 Oracle 테이블이 있고이 테이블의 크기가 0.5GB 이상입니다. 이 일반적인 오라클 테이블을 힙 조직에서 조직화 된 인덱스로 변경하는 것이 가능합니까? 아니면이 테이블의 데이터를 인덱스로 구성된 다른 새로운 테이블로 이동하여 달성 할 수 있습니까? 어느 쪽이든,이 절차에 관련된 단계를 기입 해 주시면 감사하겠습니다.오라클 테이블을 인덱스 구성으로 이동

답변

2

테이블을 변경하여 인덱스 구성 테이블로 만들 수있는 방법이 없습니다. 대신 (DBMS_REDEFINITION을 사용하여) 테이블을 다시 정의하거나 CTAS를 사용하여 새 테이블을 만들 수 있습니다.

예 : 나는 DBMS_REDEFINITION을 사용한 적이 있지만, CTAS로는 생산이 경우 테이블을 생성하는 단계 만하지

create table t2 (
id number, first_name varchar2(20), 
constraint pk_id primary key (id) 
) 
organization index 
as select * from t1; 
+0

감사합니다. JSapkota. 나는 다른 웹 사이트에 같은 주석을 보았고 DBMS_REDEFINITION 패키지를 사용하는 방법에 대해 좀 더 상세하게 설명했다. 예를 들어 위의 동일한 SQL을 사용하는 경우 DBMS_REDEFINITION 패키지를 사용하면 새 테이블 t2를 작성할 필요가 없지만 t1은 패키지를 사용하여 변환됩니다. – TS74

+0

또한 새로운 물리적 구조 (여기서 테이블의 구성을 정의 할 수 있음)로 새 임시 테이블을 만들어 테이블을 재정의하고 매우 긴 프로세스를 다시 정의해야합니다. 이 설명서 링크는 몇 가지 유용한 예제를 제공합니다. http : //docs.oracle.com/cd/B28359_01/server.111/b28310/tables007.htm – JSapkota

+1

기본 키를 지정하지 않아도 작동합니까? IOT에는 기본 키가 있어야합니다. –

1

.

  1. 목록 시스템을 기반으로 모든 인덱스, 제약 조건, 외래 키 등은
  2. 인덱스, 제약 조건을 만들 준비하고 외래 키 문을 변경 본다. 트리거 목록, 테이블에 의존하는 절차를 준비하십시오.
  3. 모든 인덱스, 2 단계
  4. 스왑 테이블 이름과 스왑 외래 키에서 준비된 문에 제약을 만들기
  5. 가 (당신이 할 수 있다면 그 단계 이전에 잠금을 고려)와 같은 선택 테이블을 만들고 (이 단계는 약간의 오차가 발생할 수 있습니다 당신이 경우 외부 키에 대한 삽입을 누르십시오 (외래 키로 참조하는 테이블과 테이블을 잠 가야 할 때 예상 할 경우)
  6. 2 (종속 테이블 잠금을 해제 한 경우)
  7. t 단계에 고정 3) 테이블 select * from new minus select * from old;에 삽입하거나 행을 삽입하는 타임 스탬프가있는 경우 새 행을 삽입하십시오.

목록이 완성되기를 바랍니다.

관련 문제