您的位置:首页 > 数据库 > Oracle

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

2015-12-02 09:51 411 查看
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表空间