临时表空间总是满的初步想法(AIX系统,裸设备)


由于开发人员的水平有高低,dba精力有限,不可能及时解决sql语句问题!打算通过模仿重做日志的方法来解决数据库运行缓慢问题!

1.查看临时文件的使用/剩余空间

  1. select (BYTES_USED+BYTES_FREE)/1024/1024 "总空间M", BYTES_USED/1024/1024 "使用空间M"   from v$temp_space_header;  

2.查看当前用户所属的临时表空间

  1. select username ,temporary_tablespace from dba_users;   

  USERNAME    TEMPORARY_TABLESPACE
  -----------         ------------------------------
  SYS                TEMP1
  SYSTEM         TEMP1
  DBSNMP         TEMP1
  HUJINPEI         TEMP1
  ALAN1             TEMP1
  PERFUSER     TEMP1
  ALAN2             TEMP1
  MYUSER          TEMP1
  OUTLN            TEMP1
  WMSYS           TEMP1

  已选择10行。

3.查看当前有那些临时文件。

  1. select name from v$tempfile;   

4.在裸设备上面创建数据文件

   a.在文件系统里面创建想要的的链接
      比如:cd /sgerp5/sgerp5 
            touch temp03.dbf

   b.创建软链接

      注意:这步千万小心,/dev/sgerp5_sgtemp03这个目录不能错,如果错了,挂载成功,但是会各种奇怪的错误 

       ①--创建数据文件

           mklv -y sgerp5_temp03 -T O -t raw -a ie -e x sgvg 60 hdisk2 hdisk3 hdisk4 hdisk5 

       ②--建立链接

          ln -fs /dev/sgerp5_sgtemp03 /sgerp5/sgerp5/temp03.dbf

  

5.重新建立一个临时表空间:请仔细核对脚本,临时表空间创建命令和永久不一样

  1. CREATE TEMPORARY TABLESPACE "TEMP3" TEMPFILE   
  2. '/sgerp5/sgerp5/temp03.dbf' SIZE 10G  
  3. AUTOEXTEND ON NEXT 655360 MAXSIZE 30G  
  4. EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1048576;  

6.将建好的TEMP表空间设置为数据库默认的临时表空间:

  1. alter database default temporary tablespace temp;  
  2. --查看默认的表空间  
  3. select username,temporary_tablespace from dba_users;   

7、DROP掉旧的TEMP1的表空间:(如果不用drop直接跳到第十步

  1. drop tablespace temp1 including contents and datafiles;  

8、如果drop不掉,可能现在的临时表空间有人在用,等到session释放以后再搞,以下查看谁占用的临时表空间

  1. SELECT se.username,  
  2.        sid,  
  3.        serial#,  
  4.        sql_address,  
  5.        machine,  
  6.        program,  
  7.        tablespace,  
  8.        segtype,  
  9.        contents   
  10.   FROM v$session se,  
  11.        v$sort_usage su  
  12. HERE se.saddr=su.session_addr    
  • 1
  • 2
  • 下一页

相关内容