oracle的TEMP空间作用及涉及的操作

Oracle临时表空间

(一)作用:主要用来做查询和存放一些缓冲区数据。它涉及的操作主要有SELECT 和排序。

(二)弊端:临时表空间消耗的主要原因是需要对查询的中间结果进行排序。重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长,但是Oracle又采用的是贪心策略,即占有了的空间,他就不再释放,所以,一段时间之后,就需要释放 重建这个TEMP表空间。

(三)如何重建。temp表空间的重建比较简单,不需要关闭数据库,要以system用户进入

方法一:对于临时表空间,可以用resize修改其空间,但是前提是其中没有数据或不是正在使用;
SQL> ALTER database TEMPFILE '/u01/app/oracle/database/oradata/Bondex/temp01.dbf' resize 100M ;
ALTER database TEMPFILE '/u01/app/oracle/database/oradata/Bondex/temp01.dbf ' resize 100M
ORA-03297: file contains used data beyond requested RESIZE value
出现这样的提示,说明该表空间里还有数据不能立即resize.只能等到其中没有数据才可以 resize了 

方法二:对于其中有数据的表空间,则可以采取替换的方法:
SQL> create temporary tablespace TEMP1 tempfile '/u01/app/oracle/oradata/BXG/temp02.dbf' size 200M;
Tablespace created.
SQL> alter database default temporary tablespace TEMP1;
Database altered.
SQL> drop tablespace TEMP including contents and datafiles;
Tablespace dropped.
新建后的表空间因为没有数据,就可以再resize了
SQL> alter database tempfile '/u01/app/oracle/oradata/BXG/temp02.dbf' resize 100M;
Database altered.

以下内容为摘抄参考:

1、使用下面的语句查一下是谁在用临时段 
SELECT s.username, s.sid, s.serial#, s.sql_address, 
s.machine, s.PRogram, su.tablespace, su.segtype, su.contents
FROM v$session s, v$sort_usage su
WHERE s.saddr = su.session_addr; 
2、 那些正在使用临时段的进程
SQL>Alter system kill session 'sid,serial#'; 
3、把TEMP表空间回缩一下
SQL>Alter tablespace TEMP coalesce;
但这种方法并不一定起作用,所以还需要下面这种方法辅助。
1、 确定TEMP表空间的ts#
SQL>select ts#, name from sys.ts$ ;
TS# NAME 
----------------------- 
0 SYSYEM 
1 RBS 
2 USERS 
3* TEMP 
4 TOOLS 
5 INDX 
6 DRSYS
2、 执行清理操作
SQL>alter session set events 'immediate trace name DROP_SEGMENTS level 4'
注释:
temp表空间的TS# 为 3*, So TS#+ 1= 4 
TEMP清理以后,感觉是TEMP表空间的存储参数有问题,


二、OracleUNDO表空间

(一)、作用:UNDO表空间用于存放UNDO数据,当执行DML操作(INSERT,UPDATE和DELETE)时,Oracle会将这些操作的旧数据写入到UNDO段,

(二)、涉及的操作:INSERT,UPDATE和DELETE和数据泵的导出与导入

(三)、如何重建。重建undo表空间比较复杂,需要关闭数据库,并需要sysdba权限来操作。

UNDO表空间不像TEMP,它就没有resize了,只能直接重建,操作如下:

1,创建备用undo表空间
sql>create undo tablespace new_undotbs1 datafile 'd:\oracle\oradata\ora9i\new_undotbs1_01.dbf' size 800m
/
2,切换undo表空间到新建的备用表空间new_undotbs1 
sql>alter system set undo_tablespace=new_undotbs1 scope=spfile
/
3,关闭重起Oracle
sql>shutdown immediate
/
sql>startup 
/
4,drop掉原来的undo表空间undotbs1 
sql>drop tablespace undotbs1 incl ing contents and datafiles
/
5,再创建原undo表空间undotbs1 
sql>create undo tablespace undotbs1 datafile ''d:\oracle\oradata\ora9i\undotbs1_01.dbf' size 800m
/
6,切换undo表空间到原有表空间undotbs1 
sql>alter system set undo_tablespace=undotbs1 scope=spfile
/
7,关闭重起Oracle
sql>shutdown immediate
/
sql>startup 
/
8,drop掉备用undo表空间new_undotbs1 
sql>drop tablespace new_undotbs1 incl ing contents and datafiles

9,处理结束


你可能感兴趣的:(Temp表空间)