일부 테이블의 초기 대량로드를 수행합니다 (소스 및 대상 모두 Oracle 11g). 프로세스는 다음과 같습니다. 1. 잘라 내기, 2. 색인 삭제 (PK 및 고유 색인), 대량 삽입, 4. 색인 작성 (다시 PK 및 고유 색인). (참고로 테이블이 6 열 약 22 억 레코드가)Oracle 11g 필요한 TEMP 테이블 스페이스를 계산하는 방법은 무엇입니까?
그래서 분명히alter table TARGET_SCHEMA.MYBIGTABLE
add constraint PK_MYBIGTABLE primary key (MYBIGTABLE_PK)
ORA-01652: unable to extend temp segment by 128 in tablespace TEMP
TEMP 테이블 스페이스는 PK 생성을위한 작은이다 : 지금 나는 다음과 같은 오류가 발생했습니다. 그래서 나는 이것을했다 :
explain plan for
select line_1,line_2,line_3,line_4,line_5,line_6,count(*) as cnt
from SOURCE_SCHEMA.MYBIGTABLE
group by line_1,line_2,line_3,line_4,line_5,line_6;
select * from table(dbms_xplan.display);
/*
-----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2274M| 63G| | 16M (2)| 00:05:06 |
| 1 | HASH GROUP BY | | 2274M| 63G| 102G| 16M (2)| 00:05:06 |
| 2 | TABLE ACCESS FULL| MYBIGTABLE | 2274M| 63G| | 744K (7)| 00:00:14 |
-----------------------------------------------------------------------------------------------
*/
이 방법은 얼마나 많은 TEMP 테이블 스페이스가 필자의 경우 (102GB)에 필요한지 알려주 는가? 아니면 견적을 다르게 하시겠습니까?
추가 : PK는 대상 시스템에만 존재합니다. 하지만 공정한 점이있어서 타겟 PK에 대한 귀하의 질의를 실행합니다 :
explain plan for
select MYBIGTABLE_PK
from TARGET_SCHEMA.MYBIGTABLE
group by MYBIGTABLE_PK ;
-------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 13 | 3 (34)| 00:00:01 |
| 1 | HASH GROUP BY | | 1 | 13 | 3 (34)| 00:00:01 |
| 2 | TABLE ACCESS FULL| MYBIGTABLE | 1 | 13 | 2 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------
그래서 지금 어떻게 읽어야합니까?