1. 程式人生 > >臨時表空間操作總結

臨時表空間操作總結

con database 成功 1.5 size ane stripe ont table

一、 臨時表空間理論

在9i之前,如果一個數據庫用戶沒有被指定默認臨時表空間,那麽oracle就會使用system表空間作為該用戶的臨時表空間,這是很危險的。在9i裏面,database可以被指定一個默認臨時表空間。這樣如果數據庫用戶沒有被明確指定臨時表空間,oracle 9i就會自動指定database的默認臨時表空間作為該用戶的臨時表空間。

默認臨時表空間的限制:

1.1. 默認臨時表空間必須是TEMPORARY的:
SQL> alter database default temporary tablespace EXAMPLE;
ORA-12901: default temporary tablespace must be of TEMPORARY type

1.2. 默認臨時表空間一旦被指定,將無法在改成PERMANET:
SQL> alter tablespace tmp01 permanent;
ORA-03217: invalid option for alter of TEMPORARY TABLESPACE

1.3. 在刪除默認臨時表空間必須先重新指定默認臨時表空間:
SQL> drop tablespace temp including contents and datafiles;
ORA-12906: cannot drop default temporary tablespace
SQL> create temporary tablespace tmp01 tempfile ‘+DATA‘ size 10m;
Tablespace created.
SQL> alter database default temporary tablespace TMP01;
Database altered.
SQL> drop tablespace temp including contents and datafiles;
Tablespace dropped.

1.4. 默認臨時表空間無法OFFLINE:
SQL> alter tablespace temp offline;
ORA-03217: invalid option for alter of TEMPORARY TABLESPACE

1.5. 用戶的臨時表空間必須是TEMPORARY的(在9i之前沒有這個限制,可以是PERMANENT):
SQL> alter user TEST temporary tablespace tmp01;
User altered.

1.6. 修改數據庫默認臨時表空間
SQL> alter database default temporary tablespace tmp_grp;
Database altered.

1.7. 如果刪除了用戶的臨時表空間,而這個臨時表空間又不是數據庫的默認臨時表空間(如果是數據庫的默認臨時表空間是刪不掉的),用戶的臨時表空間不會自動轉換到數據庫的默認臨時表空間上:
SQL> select tablespace_name, contents from dba_tablespaces where contents like ‘TEMPORARY%‘;
TABLESPACE CONTENTS
---------- ---------
TEMP TEMPORARY
TMP01 TEMPORARY
SQL> select TEMPORARY_TABLESPACE from dba_users where username=‘TEST‘;
TEMPORARY_TABLESPACE
------------------------------
TMP01

SQL> drop tablespace TMP01 including contents and datafiles;
Tablespace dropped.

SQL> select TEMPORARY_TABLESPACE from dba_users where username=‘TEST‘;
TEMPORARY_TABLESPACE
------------------------------
TMP01


二、 臨時表空間實戰

2.1 查詢表空間使用率
SQL> SELECT TABLESPACE_NAME,
ROUND(USED_SPACE *
(SELECT VALUE FROM V$PARAMETER WHERE NAME = ‘db_block_size‘) /
POWER(2, 30),
2) USED_GB,
ROUND(TABLESPACE_SIZE *
(SELECT VALUE FROM V$PARAMETER WHERE NAME = ‘db_block_size‘) /
POWER(2, 30)) MAXSIZE_GB,
ROUND(USED_PERCENT, 2) AS "PCT%"
FROM DBA_TABLESPACE_USAGE_METRICS
ORDER BY 4 DESC;

2.2 臨時表空間擴容

--2.2.0查看臨時表空間及大小
SQL>
col FILE_NAME for a40;
col TABLESPACE_NAME for a10;
select tablespace_name,file_name,bytes/1024/1204 m from dba_temp_files;
TABLESPACE FILE_NAME M
---------- ---------------------------------------- ----------
TEMP +DATA/devdb/tempfile/temp.264.936769423 24.6644518

--2.2.1查詢當前默認臨時表空間
col PROPERTY_VALUE for a15;
col DESCRIPTION for a25;
select * from database_properties where property_name like ‘DEFAULT_TEMP_%‘;
PROPERTY_NAME PROPERTY_VALUE DESCRIPTION
------------------------------ --------------- -------------------------
DEFAULT_TEMP_TABLESPACE TEMP Name of default temporary tablespace

--2.2.2resize臨時表空間文件
SQL> alter database tempfile ‘+DATA/devdb/tempfile/temp.264.936769423‘ resize 30m;
Database altered.

--2.2.3查看系統文件大小,已經修改成功
[email protected] /home/oracle$ export ORACLE_SID=+ASM1
[email protected] /home/oracle$ asmcmd
ASMCMD> ls -ls +DATA/devdb/tempfile/temp.264.936769423
Type Redund Striped Time Sys Block_Size Blocks Bytes Space Name
TEMPFILE UNPROT COARSE AUG 04 18:00:00 Y 8192 3841 31465472 32505856 temp.264.936769423

三、 重建臨時表空間

3.1 先建
SQL> create temporary tablespace tmp01 tempfile ‘+DATA‘ size 2m tablespace group tmp_grp;
Tablespace created.

SQL> create temporary tablespace tmp02 tempfile ‘+DATA‘ size 2m;
Tablespace created.

SQL> alter tablespace tmp02 tablespace group tmp_grp;
Tablespace altered.

SQL> alter database default temporary tablespace tmp_grp;
Database altered.

3.2 觀察系統運行情況與告警日誌信息,無異常就刪除舊的臨時表空間的數據文件。

臨時表空間操作總結