프린트 하기

OS환경 : Oracle Linux 6.8 (64bit)


DB 환경 : Oracle Database 11.2.0.4


방법 : 오라클 11g R2 Temp Tablespace 재생성

현재 Default Temp Tablespace 확인

1
2
3
4
5
6
7
8
9
SQL>
col name for a25
col value$ for a15
col comment$ for a50
select * from sys.props$ where name = 'DEFAULT_TEMP_TABLESPACE';
 
NAME              VALUE$      COMMENT$
------------------------- --------------- --------------------------------------------------
DEFAULT_TEMP_TABLESPACE   TEMP      Name of default temporary tablespace



해당 Temp 파일 확인

1
2
3
4
5
6
7
8
SQL>
col file_name for a50 
col tablespace_name for a15
select file_id, tablespace_name, file_name, bytes/1024/1024 mb, autoextensible from dba_temp_files;
 
   FILE_ID TABLESPACE_NAME FILE_NAME                              MB AUT
---------- --------------- -------------------------------------------------- ---------- ---
     1 TEMP        /oracle/app/oracle/oradata/ORCL11/temp01.dbf         500 NO

500MB 크기로 자동증가 옵션 없이 사용중



유저들의 default Temp Tablespace 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SQL> select username, default_tablespace, temporary_tablespace from dba_users;
 
USERNAME               DEFAULT_TABLESPACE          TEMPORARY_TABLESPACE
------------------------------ ------------------------------ ------------------------------
WAITUSER               WAIT_TS                  TEMP
PERFSTAT               STATSPACK_TS              TEMP
IMSI                   USERS                  TEMP
MINSU                   USERS                  TEMP
OPS$ORACLE               USERS                  TEMP
ORACLE_OCM               USERS                  TEMP
DIP                   USERS                  TEMP
APPQOSSYS               SYSAUX                  TEMP
WMSYS                   SYSAUX                  TEMP
DBSNMP                   SYSAUX                  TEMP
SYSTEM                   SYSTEM                  TEMP
SYS                   SYSTEM                  TEMP
OUTLN                   SYSTEM                  TEMP
 
13 rows selected.

현재모든 유저의 Temp Tablespace 가 'TEMP' tablespace



새로운 Temp Tablespace TEMP2 생성

1
2
3
SQL> create temporary tablespace temp2 tempfile '/oracle/app/oracle/oradata/ORCL11/temp02.dbf' size 500m;
 
Tablespace created.



해당 Temp Tablespace 확인

1
2
3
4
5
6
SQL> select file_id, tablespace_name, file_name, bytes/1024/1024 mb, autoextensible from dba_temp_files;
 
   FILE_ID TABLESPACE_NAME FILE_NAME                              MB AUT
---------- --------------- -------------------------------------------------- ---------- ---
     1 TEMP        /oracle/app/oracle/oradata/ORCL11/temp01.dbf         500 NO
     2 TEMP2       /oracle/app/oracle/oradata/ORCL11/temp02.dbf         500 NO

정상적으로 생성됨



Default Temp Tablespace 를 TEMP 에서 TEMP2로 변경 

1
2
3
SQL> alter database default temporary tablespace temp2;
 
Database altered.



유저들의 default Temp Tablespace 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SQL> select username, default_tablespace, temporary_tablespace from dba_users;
 
USERNAME               DEFAULT_TABLESPACE          TEMPORARY_TABLESPACE
------------------------------ ------------------------------ ------------------------------
WAITUSER               WAIT_TS                  TEMP2
PERFSTAT               STATSPACK_TS              TEMP2
IMSI                   USERS                  TEMP2
MINSU                   USERS                  TEMP2
OPS$ORACLE               USERS                  TEMP2
ORACLE_OCM               USERS                  TEMP2
DIP                   USERS                  TEMP2
APPQOSSYS               SYSAUX                  TEMP2
WMSYS                   SYSAUX                  TEMP2
DBSNMP                   SYSAUX                  TEMP2
SYSTEM                   SYSTEM                  TEMP2
SYS                   SYSTEM                  TEMP2
OUTLN                   SYSTEM                  TEMP2
 
13 rows selected.

정상적으로 Temp Tablespace 가 TEMP2 로 변경됨



개별 유저 Temp Tablespace 변경

IMSI 유저의 Temp Tablespace 를 TEMP2에서 TEMP로 변경

1
2
3
SQL> alter user imsi temporary tablespace temp;
 
User altered.



유저들의 default Temp Tablespace 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SQL> select username, default_tablespace, temporary_tablespace from dba_users;
 
USERNAME               DEFAULT_TABLESPACE          TEMPORARY_TABLESPACE
------------------------------ ------------------------------ ------------------------------
IMSI                   USERS                  TEMP
WAITUSER               WAIT_TS                  TEMP2
PERFSTAT               STATSPACK_TS              TEMP2
MINSU                   USERS                  TEMP2
OPS$ORACLE               USERS                  TEMP2
ORACLE_OCM               USERS                  TEMP2
DIP                   USERS                  TEMP2
APPQOSSYS               SYSAUX                  TEMP2
WMSYS                   SYSAUX                  TEMP2
DBSNMP                   SYSAUX                  TEMP2
SYSTEM                   SYSTEM                  TEMP2
SYS                   SYSTEM                  TEMP2
OUTLN                   SYSTEM                  TEMP2
 
13 rows selected.

IMSI유저만 정상적으로 'TEMP' Temp Tablespace 를 사용함



이상태에서 'TEMP' Temp Tablespace 삭제

1
2
3
SQL> drop tablespace temp including contents and datafiles;
 
Tablespace dropped.

정삭적으로 삭제는 가능함



IMSI 유저 테스트용 테이블, 데이터 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
SQL> create table imsi.ttest as select * from dba_objects;
 
Table created.
 
SQL> insert into imsi.ttest select * from imsi.ttest;
 
14391 rows created.
 
SQL> /
 
28782 rows created.
 
SQL> /
 
57564 rows created.
 
SQL> /
 
115128 rows created.
 
SQL> /
 
230256 rows created.
 
SQL> commit;
 
Commit complete.



pga 사용을 줄이기 위해 pga_aggregate_target 10m로 변경

1
2
3
4
5
6
7
8
9
SQL> alter system set pga_aggregate_target = 10m;
 
System altered.
 
SQL> show parameter pga
 
NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target             big integer 10M



IMSI 유저로 TEMP 사용 테스트

1
2
3
4
5
6
7
8
9
10
11
12
13
SQL> conn imsi/imsi
Connected.
 
SQL> 
select * from ttest union all
select * from ttest union all
select * from ttest union all
select * from ttest union all
select * from ttest union all
select * from ttest order by 11,12,9,10,7,8,5,6,3,4,1,2;
              *
ERROR at line 1:
ORA-00959: tablespace 'TEMP' does not exist

'TEMP' tablespace 가 존재하지 않는다고 나옴



SYS로 다시 TEMP2 로변경

1
2
3
SQL> alter user imsi temporary tablespace temp2;
 
User altered.



IMSI 유저로 TEMP 사용 테스트

1
2
3
4
5
6
7
SQL> 
select * from ttest union all
select * from ttest union all
select * from ttest union all
select * from ttest union all
select * from ttest union all
select * from ttest order by 11,12,9,10,7,8,5,6,3,4,1,2;



동시에 사용량 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
SQL>
set line 150
set concat "+"
col username format a10
col osuser format a10
col tablespace format a15
SELECT b.tablespace,
b.segfile#,
b.segblk#,
b.blocks,
a.sid,
a.serial#,
c.spid,
a.username,
a.osuser,
a.status,
a.sql_hash_value
FROM v$session a,
v$sort_usage b,
v$process c
WHERE a.saddr = b.session_addr and a.paddr=c.addr
ORDER BY b.tablespace, b.segfile#, b.segblk#, b.blocks
/
 
TABLESPACE      SEGFILE#    SEGBLK#      BLOCKS    SID    SERIAL# SPID             USERNAME   OSUSER      STATUS   SQL_HASH_VALUE
--------------- ---------- ---------- ---------- ------ ---------- ------------------------ ---------- ---------- -------- --------------
TEMP2               201    63104         128     35      15597 4222             IMSI       oracle      ACTIVE       3498062838

정상적으로 사용중(STATUS가 ACTIVE 상태)



* Temp Tablespace 사용중에도 Default Temp Tablespace 변경이 가능함



참조 : https://positivemh.tistory.com/26

https://positivemh.tistory.com/481