Oracle11g--解决临时表空间过大问题

it2022-05-05  247

背景:

        线上的生产数据库的临时表空间增长到了32GB,增长至最高上限,为了保证数据库的正常运行,有两套临时思路可供选项。         1)增加临时表空间的大小。         2)  重建临时表空间,解决临时表空间过大的问题。 今天 ,在测试库上进行测试,操作步骤如下:         1)增加临时表空间的大小:         * 查看临时表空间的大小 ###########临时表空间的使用情况#############     SELECT d.tablespace_name "Name",                 TO_CHAR(NVL(a.bytes / 1024 / 1024, 0),'99,999,990.900') "Size (M)",                 TO_CHAR(NVL(t.hwm, 0)/1024/1024,'99999999.999') "HWM (M)",                 TO_CHAR(NVL(t.hwm / a.bytes * 100, 0), '990.00') "HWM % " ,                 TO_CHAR(NVL(t.bytes/1024/1024, 0),'99999999.999') "Using (M)",           TO_CHAR(NVL(t.bytes / a.bytes * 100, 0), '990.00') "Using %"            FROM sys.dba_tablespaces d,                 (select tablespace_name, sum(bytes) bytes from dba_temp_files group by tablespace_name) a,                 (select tablespace_name, sum(bytes_cached) hwm, sum(bytes_used) bytes from v$temp_extent_pool group by tablespace_name) t           WHERE d.tablespace_name = a.tablespace_name(+)             AND d.tablespace_name = t.tablespace_name(+)             AND d.extent_management like 'LOCAL'             AND d.contents like 'TEMPORARY' ###########查看临时表空间的总大小和最大扩展大小(能看到数据文件)########## select file_name,tablespace_name, bytes/1024/1024 MB,autoextensible,maxbytes/1024/1024 MAX_MB from dba_temp_files         * 增加临时表空间的大小 ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oradata/ARPDB/temp02.dbf' SIZE 4G  AUTOEXTEND ON NEXT 128M MAXSIZE 16384M;         2)  重建临时表空间,解决临时表空间过大的问题。 0.查看目前默认的临时表空间 select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE'; 1.创建中转临时表空间 create temporary tablespace temp1 tempfile '/u01/app/oradata/ARPDB/temp03.dbf' size 512m reuse autoextend on next 1m maxsize unlimited; 2.改变缺省临时表空间为刚刚创建的新临时表空间temp1 alter database default temporary tablespace temp1; 3.删除原临时表空间 drop tablespace temp including contents and datafiles; ###########如果删除表空间的时候,hang住的话,可以使用下列语句############ 先把运行在temp临时表空间的sql语句kill掉,这样的sql语句多为排序的语句 SQL>Select se.username,se.sid,se.serial#,su.extents,su.blocks*to_number(rtrim(p.value))as Space,tablespace,segtype,sql_text from v$sort_usage su,v$parameter p,v$session se,v$sql s where p.name='db_block_size' and su.session_addr=se.saddr and s.hash_value=su.sqlhash and s.address=su.sqladdr order by se.username,se.sid; 查询出来之后,kill掉这些sql语句: SQL>alter system kill session '71,58031'; (假如某一条运行的sql语句的SID为524,serial#为778) 4.重建临时表空间 create temporary tablespace temp tempfile '/u01/app/oradata/ARPDB/temp01.dbf' size 512m reuse autoextend on next 1m maxsize unlimited; 5.重置缺省临时表空间为新建的temp表空间 alter database default temporary tablespace temp; 6.删除中转用临时表空间 drop tablespace temp1 including contents and datafiles;

最新回复(0)