Oracle

게시글 보기
작성자 유건데이타 등록일 2015-05-15
제목 TEMPORARY TABLESPACE에서, 임시 파일을 사용할지, 데이터파일을 사용 할지 결정에 필
버전이 예전꺼라 별로 안쓰겠습니다만....


EMPORARY TABLESPACE에서, 임시 파일을 사용할지, 데이터파일을 사용 할지 결정에 필요한 지침
===========================================================================================



PURPOSE
-------
이 문서는, TEMPORARY TABLESPACE에서 임시 파일과 데이터파일의 차이점을
소개하는 데 목적이 있다.

Explanation
-----------

----------------------------
| TEMPORARY | Tablespace |
| tablespace | TEMPORARY |
----------------------------
| Locally | Dictionary |
| managed | managed |
-----------------------------------------
| Datafiles | impossible | Y |
-------------------------------------------
| Tempfiles | Y | impossible |
------------------------------------------+

다른 조합은 허용되지 않는다.

1. TEMPORARY Tablespace / Tablespace TEMPORARY 와 PERMANENT tablespace 비교

1) Tablespace TEMPORARY는 오라클 7.3 이상 버젼에서 사용가능하다.

=> Tablespace TEMPORARY는 다음과 같은 명령을 사용하여 생성한다.
CREATE TABLESPACE .. TEMPORARY

이 경우 데이터파일만을 사용한다.

2) TEMPORARY tablespac는 오라클 8i 이상 버젼에서 사용 가능하다

=> TEMPORARY tablespace는 다음과 같은 명령을 사용하여 생성한다
CREATE TEMPORARY TABLESPACE .. TEMPFILE

이 경우 tempfile만 사용할 수 있다.

3) Tablespace TEMPORARY/TEMPORARY tablespace는 DBA_TABLESPACES의
CONTENTS 값이 TEMPORARY로 나타난다.

4) Tablespace TEMPORARY/TEMPORARY tablespace 는 PERMANENT
tablespace와 다르며 (DBA_TABLESPACES.CONTENTS 값이 PERMANENT임)
permanent segment를 생성 할 수 없다. 예를 들어, permanent table이나
index, cluster, rollback segment등을 Tablespace TEMPORARY/TEMPORARY
tablespace에 생성할 수 없다.

5) Tablespace TEMPORARY/TEMPORARY tablespace 에서는, 단일한
temporary segment를 제공하며, 이 세그먼트는 다음과 같은
요구사항을 가진 모든 사용자에 의해 공유된다.
=> sort 작업에 따른 sort extents를 필요로 하는 사용자
=> GLOBAL TEMPORARY TABLE에 필요한 temporary extents

이와 같은 고유한 temporary segment는 동시에 많은 양의 sort 작업이
수행되거나, 여러 트랜잭션이 동일한 temporary table을 사용할 때,
permanent tablespace에서 작업하는 overhead를 피하고, 오라클의
공간 관리 작업의 부하를 피하는데 도움을 준다.

6) Temporary segment는 인스턴스 구동후 사용자가 sort extent나
sort run, 또는 global temporary table 생성등의 요청에 따라
자동적으로 생성된다.

7) Temporary segment는 인스턴스 shutdown시 자동적으로 drop 된다.

8) Temporary Content를 저장하는 테이블스페이스에 대한
세그먼트의 공간 할당/할당 해제 관련 정보는 V$SORT_SEGMENT와
V$SORT_USAGE 뷰를 사용하여 확인해 볼 수 있으며, sort segment
등에 현재 sort를 진행하는 사용 정보를 보여준다.

9) 위와 같은 작업을 수행하는데 PERMANENT tablespace 보다는
tablespace TEMPORARY를 사용하는 것이 유리한 점은 11938>에 자세히 기술되어 있따.

10) 오라클 8i에서는, 사용자별 default temporary tablespace가 어떤
종류라도 상관이 없으나, PERMANENT locally managed 방식의 테이블
스페이스는 지정할 수 없다. 다음은 PERMANENT locally managed 방식의
테이블스페이스를 default temporary tablespace로 지정하여 발생하는
에러이다.


SQL> alter user x temporary tablespace PERM_LOCAL;
User altered.

SQL> select * from dba_tables order by 3,2,6,4,7,9,1,5;
select * from dba_tables order by 3,2,6,4,7,9,1,5
*
ERROR at line 1:
ORA-03212: Temporary Segment cannot be created in locally-managed tablespace

오라클 9i에서는 사용자별 default temporary tablespace가
어떤 TEMPORARY 타입이라도 무방하다.

=> TEMPORARY tablespace locally managed
=> tablespace TEMPORARY dictionary managed

PERMANENT locally-managed 타입의 테이블스페이스를 사용자의
TEMPORARY tablespace으로 지정할 때 다음과 같은 에러가 발생한다.

SQL> alter user x temporary tablespace PERM_LOCAL;
alter user x temporary tablespace PERM_LOCAL
*
ERROR at line 1:
ORA-12911: permanent tablespace cannot be temporary tablespace


2. TEMPORARY Tablespace/Tempfiles 대비 Tablespace TEMPORARY/Datafile


1) 공간관리

공간 관리는, locally managed tablespace에서 훨씬 단순하고, 또
효율적이기 때문에, TEMPORARY tablespace를 사용하는 것이
바람직하다. Local managedment 방식에서 사용 가능한 유일한
방식이 temporary tablespace 방식이다.

SQL> create tablespace temp1
2 DATAFILE '/ora/ora817/32/oradata/V817/temp1.dbf' size 100M
3 TEMPORARY
4 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;
create tablespace temp1
*
ERROR at line 1:
ORA-25144: invalid option for CREATE TABLESPACE with TEMPORARY contents

Dictionary-managed tablespace 대비 locally-managed tableapce의 장점은
에 자세히 기술되어 있다.

오라클 8i에서는, sort segment가 locally managed permanent tablespace에
생성될 수 없으므로, locally managed TEMPORARY tablespace를 사용하여야
한다.

Locally managed temporary tablespace는 tempfile을 사용하며, temporary
tablespace 바깥 데이터에 전혀 영향을 주지 않으면서, temporary tablespace
관련 데이터에 대한 redo정보가 생성되지 않는다.
이 테이블스페이스는, standby database나 read-only database에서도
사용 가능하다.

2) View

TEMPORARY tablespace 와 연관된 파일 목록은 V$TEMPFILE 과
DBA_TEMP_FILES 뷰를 통해 확인할 수 있다.

SQL> select * from dba_tablespaces;

TABLESPACE_NAME CONTENTS EXTENT_MAN
------------------------ --------- ----------
TEMP_TEMPFILE_LOCAL TEMPORARY LOCAL
TEMP_DATAFILE_DICT TEMPORARY DICTIONARY

SQL> select STATUS, ENABLED, NAME from v$tempfile;

STATUS ENABLED NAME
------- ---------- ----------------------------------
ONLINE READ WRITE /tcase/oradata/V901/temp_temp01.dbf

SQL> select FILE_NAME, TABLESPACE_NAME from dba_temp_files;

FILE_NAME TABLESPACE_NAME
------------------------------------ -------------------
/tcase/oradata/V901/temp_temp01.dbf TEMP_TEMPFILE_LOCAL


위 내용은 tablespace TEMPORARY 환경에서 V$DATAFILE 와
DBA_DATA_FILES를 사용하는 것에 비길 수 있다.

SQL> select STATUS, ENABLED, NAME from v$datafile;

STATUS ENABLED NAME
------- ---------- ----------------------------------
ONLINE READ WRITE /tcase/oradata/V901/temp_data01.dbf

SQL> select FILE_NAME, TABLESPACE_NAME from dba_data_files;

FILE_NAME TABLESPACE_NAME
------------------------------------ -------------------
/tcase/oradata/V901/temp_data01.dbf TEMP_DATAFILE_DICT

3) 권한

Temporary tablespace 또는 tablespace temporary 생성을 위해서는
CREATE TABLESPACE system privilege가 필요하다.

4) TEMPORARY Tablespace 생성

SQL> create TEMPORARY tablespace temp_tempfile_local
2 TEMPFILE '/ora/V817/temp_temp.dbf' size 100M
3 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

참고: 일부 OS에서는 tempfile block이 실제 액세스 되기
전 까지 tempfile이 실제로 생성되지 않는다. 이와 같은
파일 생성 작업이 지체되어 처리 되는 것은, tempfile의
생성과 크기 조정이 신속하게 처리되는데 도움이 된다.
그러나, tempfile이 나중에 생성되더라도, 생성 가능한
충분한 디스크 공간이 있어야 하겠다.
사용중인 O/S에서 tempfile이 실제 생성되는 시점은
플랫폼별 매뉴얼에 기술되어 있다.

Tablespace TEMPORARY의 생성
---------------------------
SQL> create tablespace TEMP_DATAFILE_DICT
2 datafile '/tcase/oradata/V901/temp_data.dbf' size 100M
3 TEMPORARY;
Tablespace created.

5) Tempfile/Datafile 제거

a. 테이블스페이스를 drop 하기 전까지 테이블스페이스의 datafile을
제거할 수 없다.

참고: 오라클 9i에서 DROP TABLESPACE 명령에 추가된
INCLUDING CONTENTS AND DATAFILES 절을 사용하면, OS로 부터
관련 데이터파일도 삭제하는 작업을 자동화 할 수 있다.

b. Temporary tablespace로 부터 tempfile을 삭제하고, 논리 구조를
비어 있는 상태로 유지할 수 있다.

=> 오라클 8i:

SQL> alter tablespace TEMP_TEMPFILE_LOCAL
2 add tempfile '/oradata/V817/temp_temp01.dbf';
Tablespace altered.

SQL> alter database tempfile '/oradata/V817/temp_temp01.dbf'
2 drop;
Database altered.

SQL> !ls /oradata/V817/temp_temp01.dbf
/oradata/V817/temp_temp01.dbf

위 명령을 수행 한 후, tempfile을 시스템으로 부터 삭제하고,
나중에 다시 추가 시킬 수 있다.

SQL> alter tablespace TEMP_TEMPFILE_LOCAL
2 add tempfile '/oradata/V817/temp_temp01.dbf';
Tablespace altered.

=> 오라클 9i: OS 파일을 삭제 하기 위해 INCLUDING DATAFILES
절을 사용할 수 있다.

SQL> alter database tempfile '/oradata/V901/temp_temp01.dbf'
2 drop including datafiles;
Database altered.

SQL> !ls /oradata/V901/temp_temp01.dbf
/oradata/V901/temp_temp01.dbf not found

Temporary tablespace로 부터 모든 tempfile을 삭제하면,
다음과 같은 에러가 발생할 수 있다.

SQL> alter table olap.test add primary key (c);
alter table olap.test add primary key (c)
*
ERROR at line 1:
ORA-25153: Temporary Tablespace is Empty

ORA-25153
25153, 00000, "Temporary Tablespace is Empty"
// *Cause: An attempt was made to use space in a temporary tablespace with
// no files.
// *Action: Add files to the tablespace using ADD TEMPFILE command.

이 에러 메시지는 동시 작업 수행시 디스크를 실제 액세스 하여야
할 경우 발생하게 된다.


Example
-------


Reference Documents
-------------------
ORA-03296 Resizing Temporary Locally Managed Tablespace
ORA-03212 at Instance Startup
Temporary Segments: What Happens When a Sort Occurs
TEMPORARY Tablespaces : Tempfiles or Datafiles
Comment
등록된 코멘트가 없습니다.