首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

oracle temp表空间处置方法

2012-07-15 
oracle temp表空间处理方法一.检查过程(1) 我们可以查查数据库alert日志例如:/u0/admin/sm/bdump/alert_sm

oracle temp表空间处理方法

一.检查过程(1) 我们可以查查数据库alert日志例如:/u0/admin/sm/bdump/alert_sm.log数据库中并没有报temp表空间的错,一般来说不报错,可以先不管,因为没有temp表空间可能由于没有需要用到而不释放空间。(2) 我们可以用这个语句查一下SELECT se.username,sid,serial#,sql_address,machine,program,tablespace,segtype,contentsFROM v$session se,v$sort_usage suWHERE se.saddr=su.session_addr;其实v$session是会话信息,v$sort_usage是正在使用排序段的会话。可以检查当前数据库有没有语句正在用排序段,如果有的话可以使用一下语句删除寻找出的相关语句:SQL>alter system kill session 'sid,serial#';(3) 检查temp表空间是不是自动扩展的SQL>select file_name,bytes/1024/1024 "MB",autoextensible,tablespace_name from dba_temp_files;(4) 查询目前数据库中默认的临时表空间SQL>select * from database_properties where property_name like 'DEFAULT%';或SQL>select username,temporary_tablespace from dba_users;二.处理过程(1) 重起数据库,看看有没有释放临时表空间Smon进程会完成临时段释放,TEMP表空间的清理操作,不过很多的时侯我们的库是不允许down的,所以这种方法缺少了一点的应用机会,不过这种方法还是很好用的。(2) 如果检查出temp表空间是自动扩展的,建议先修改成非自动扩展由于数据库temp表空间是自动扩展,有可能它不断使用新的空间,建议先把它变成非自动扩展。例如:alter database tempfile '/u0/oradata/sm/temp01.dbf' autoextend off;(3) 如果temp表空间不是自动扩展,而且空间比较小例如:数据库的temp表空间只有1.6G,觉得可以扩大一点,扩大3G左右SQL> alter system temp add tempfile '/u0/oradata/sm/temp02.dbf' size 3096M;(4) 如果temp表空间由于自动扩展变得太大,可以新建一个temp表空间把它取代详细可参看eygle大师的"Oracle9i中如何重建与切换临时表空间"http://www.eygle.com/archives/2006/04/oracle9i_default_temporary_tablespace.html例如:用temp2表空间取代temp表空间SQL> create temporary tablespace temp2 tempfile '/opt/oracle/oradata/conner/temp1.dbf' size 10M autoextend off;SQL> alter tablespace temp add tempfile '/opt/oracle/oradata/conner/temp2.dbf' size 20M;SQL> alter database default temporary tablespace temp2;SQL> drop tablespace temp;最后在操作系统上把temp的文件删除,就可以释放空间。(5) 如果使用的版本是oracle 10g以上,可以收缩表空间SELECT se.username,sid,serial#,sql_address,machine,program,tablespace,segtype,contentsFROM v$session se,v$sort_usage suWHERE se.saddr=su.session_addr;其实v$session是会话信息,v$sort_usage是正在使用排序段的会话。可以检查当前数据库有没有语句正在用排序段,如果有的话可以使用一下语句删除寻找出的相关语句:SQL>alter system kill session 'sid,serial#';SQL>Alter tablespace TEMP coalesce;(6) 网上Metalink给出的一个方法  修改一下TEMP表空间的storage参数,让Smon进程观注一下临时段,从而达到清理和TEMP表空间的目的。    SQL>alter tablespace temp increase 1;   SQL>alter tablespace temp increase 0;(7) 网上给出诊断事件的一种方法确定TEMP表空间的ts#SQL> select ts#, name from sys.ts$ ;       TS# NAME---------- ------------------------         0 SYSTEM         1 UNDOTBS1         2 TEMP         3 INDX         4 TOOLS         5 USERS         6 DKH_DATA         7 DKH_INDX         8 PHS_DATA         9 PHS_INDX10 rows selected.执行清理操作SQL>alter session set events 'immediate trace name DROP_SEGMENTS level 3' ;说明:temp表空间的TS# 为 2*, So TS#+ 1= 3PS注意几个问题:(1) 在oracle中,temp表空间是独立于其他的表空间的(回滚表空间UNDOTBS,数据表空间DATATBS等),因为它的数据是临时的,不用保存的所以查数据表都不一样:temp:    dba_temp_files v$tempfile其他:    dba_data_files v$datafile完成的说,整个数据库的大小是由 temp + 其他表空间大小,一般我们就只算其他表空间大小,例如在月报中(2) 建表空间不一样temp表空间:SQL>create temporary tablespace temp2 tempfile '/opt/oracle/oradata/conner/temp1.dbf' size 10M autoextend off;数据表空间:SQL>create tablespace test_a datafile '/home/oracle/oradata/test/test_a.dbf' size 100m extent management local segment space management auto;undo表空间SQL> create UNDO TABLESPACE undotbs_01 DATAFILE 'C:/Oracle/Ordata/TSH1/undo0101.dbf' SIZE 100M REUSE AUTOEXTEND off;(3) 加表空间的方法不一样temp表空间SQL> alter tablespace temp add tempfile '/opt/oracle/oradata/conner/temp2.dbf' size 20M autoextend off;数据表空间和UNDO表空间一样SQL> alter tablespace test_a add datafile '/opt/oracle/oradata/conner/abc.dbf' size 10M autoextend off;SQL> alter tablespace undotbs_01 add datafile '/opt/oracle/oradata/conner/undotbs_02.dbf' size 10M autoextend off;
?

热点排行