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.
고마워,하지만 ... DBA 가이드 링크를보고 올바르게 구현했는지 확인할 수 있습니까? 나는 내가 쓴 것이 아닌 소스 자료에 대한 설명을 원했다. – Rudiger
'@ Rudiger' : 기본적으로이 모든 것은 단지 인덱스를 생성하기위한 충분한 디스크 공간을 확보 할 수있게 해줍니다. 예, 확실하지 않은'EXTENT MANAGEMENT' 절을 제외하고는 올바르게 구현했습니다. 코드에서 오류가 발생하지 않는다면 괜찮습니다. 놓친 유일한 것은 새로 작성된 테이블을 삭제하기 전에 기본 사용자의 테이블 공간을 이전 값으로 되돌려 야 할 필요가 있다는 것입니다. – Quassnoi
임시 테이블 스페이스를 원래 임시 테이블 스페이스로 재설정하는'ALTER USER' 문은 무엇입니까? – Rudiger