2010-01-19 6 views
0

누군가가 링크 된 참조를보고 실행할 정확한 명령문을 설명 할 수 있습니까? 여기 Oracle에서 매우 큰 색인 생성

Oracle DBA's Guide: Creating a Large Index

내가 ... 해낸 무엇

CREATE TEMPORARY TABLESPACE ts_tmp 
TEMPFILE 'E:\temp01.dbf' SIZE 10000M 
REUSE AUTOEXTEND ON EXTENT MANAGEMENT LOCAL; 

ALTER USER me TEMPORARY TABLESPACE ts_tmp; 

CREATE UNIQUE INDEX big_table_idx ON big_table (record_id); 

DROP TABLESPACE ts_tmp; 

이 인덱스가 생성 된 후, 내가 간단한 쿼리에 대한 계획을 설명하고 얻을 실행 한

편집 이 오류 :

ORA-00959: tablespace 'TS_TMP' does not exist 

그것은 일시적인 것 같지 않습니다 ... :(

답변

5
CREATE TEMPORARY TABLESPACE ts_tmp 
TEMPFILE 'E:\temp01.dbf' SIZE 10000M 
REUSE AUTOEXTEND ON EXTENT MANAGEMENT LOCAL; 

임시 테이블 공간 (중간 정렬 결과가 저장 될 디스크의 영역)이 생성됩니다. 인덱스는 정렬 된 데이터 집합이며 정렬에는 많은 공간이 필요합니다.

여기서 "임시"는 저장되는 데이터가 임시적인 것이므로 테이블 공간 자체가 일시적인 것이 아님을 의미합니다. /tmp 디렉토리가 Unix 또는 %TEMP%Windows으로 접혀있는 것처럼 생각하십시오. 디렉토리/폴더 자체는 영구적이지만 그 안에 저장된 데이터는 일시적입니다.

REUSE은 파일이 이미 존재하는 경우 실패하지 않음을 의미합니다 (파일 관리 오버 헤드를 피하려면 OS). 대신 파일 쓰기를 위해 파일을 열고 새 데이터로 채 웁니다. 이 절에 해당하지 않으면 주어진 이름의 파일이 존재하면 명령이 실패합니다.

AUTOEXTEND ON은 "필요한 경우 파일 확장"을 의미합니다. 이 값을 off로 설정하면 10Gb으로 정렬 조작에 충분하지 않으므로 테이블 공간이 자동으로 증가하지 않고 조작이 실패합니다.

EXTENT MANAGEMENT LOCAL은 테이블 공간 레이아웃이 시스템 테이블이 아닌 테이블 공간 자체에 저장됨을 의미합니다. 11g에 대해서는 확실하지 않지만 이전 버전 인 Oracle에서는이 옵션을 임시 테이블 공간에 사용할 수 없었습니다.

ALTER USER me TEMPORARY TABLESPACE ts_tmp; 

이 임시 저장 매체

CREATE UNIQUE INDEX big_table_idx ON big_table (record_id); 

이것은 단지 인덱스를 생성로서 새로 생성 된 임시 테이블을 사용하여 사용자 me한다.

DROP TABLESPACE ts_tmp; 

임시 테이블 공간을 삭제합니다.

SELECT temporary_tablespace 
FROM dba_users 
WHERE username = 'ME' 

대부분의 아마, 그것은 TEMP를 반환합니다

스크립트를 실행하기 전에, 현재의 디폴트 테이블 스페이스를 알아낼.

ts_tmp를 삭제하기 전에 사용자의 기본 임시 테이블 스페이스를 되돌릴 :

ALTER USER me TEMPORARY TABLESPACE temp; -- or whatever the previous query returned. 
+0

고마워,하지만 ... DBA 가이드 링크를보고 올바르게 구현했는지 확인할 수 있습니까? 나는 내가 쓴 것이 아닌 소스 자료에 대한 설명을 원했다. – Rudiger

+0

'@ Rudiger' : 기본적으로이 모든 것은 단지 인덱스를 생성하기위한 충분한 디스크 공간을 확보 할 수있게 해줍니다. 예, 확실하지 않은'EXTENT MANAGEMENT' 절을 제외하고는 올바르게 구현했습니다. 코드에서 오류가 발생하지 않는다면 괜찮습니다. 놓친 유일한 것은 새로 작성된 테이블을 삭제하기 전에 기본 사용자의 테이블 공간을 이전 값으로 되돌려 야 할 필요가 있다는 것입니다. – Quassnoi

+0

임시 테이블 스페이스를 원래 임시 테이블 스페이스로 재설정하는'ALTER USER' 문은 무엇입니까? – Rudiger

0

오라클에 대한 작은 비밀이 있습니다.이 공간은 오라클에서만 증가하고 절대로 크기가 줄어들지 않을 것입니다. 이 상황을 피하기 위해 임시 테이블 스페이스를 작성하고 해당 테이블 스페이스를 사용하여 인덱스를 작성한 다음 h 제하십시오.

+2

테이블 공간의 크기를 수동으로 줄이면 축소 할 수 없으므로 사용중인 블록 앞에 '끝'수 있습니다. 즉, 700 블록과 750 블록 사이의 데이터 만있는 1000 블록 파일이 있습니다.이 블록을 751 블록으로 축소 할 수는 있지만 51 블록으로 축소 할 수는 없습니다. –

0

HWM의 사용 현황을 계산하는 방법에 따라하면 전체 표시 (높은 워터 마크) 증가 - 임시 테이블의 적절한 사용을 볼 수 V $ SORT_USAGE 및 V $ SORT_SEGMENT 뷰를 사용하십시오.