oracle认证:oracle清理和重建临时表空间Oracle认证考试

文章作者 100test 发表时间 2009:05:07 18:20:04
来源 100Test.Com百考试题网


  正常来说,在完成Select语句、create index等一些使用TEMP表空间的排序操作后,Oracle是会自动释放掉临时段a的。但有些有侯我们则会遇到临时段没有被释放,TEMP表空间几乎满的状况,甚至是我们重启了数据库仍没有解决问题。这个问题在论坛中也常被网友问到,下面我总结一下,给出几种处理方法。
  法一、重启库
  库重启时,Smon进程会完成临时段释放,TEMP表空间的清理操作,不过很多的时侯我们的库是不允许down的,所以这种方法缺少了一点的应用机会,不过这种方法还是很好用的。
  法二、Metalink给出的一个方法
  修改一下TEMP表空间的storage参数,让Smon进程观注一下临时段,从而达到清理和TEMP表空间的目的。
  SQL>.alter tablespace temp increase 1.
  SQL>.alter tablespace temp increase 0.
  法三、我常用的一个方法,具体内容如下:
  1、 使用如下语句a查看一下认谁在用临时段
  SELECT username,
  sid,
  serial#,
  sql_address,
  machine,
  program,
  tablespace,
  segtype,
  contents
  FROM v$session se,
  v$sort_usage su
  WHERE se.saddr=su.session_addr
  2、
  那些正在使用临时段的进程
  SQL>.Alter system kill session sid,serial#.
  3、把TEMP表空间回缩一下
  SQL>.Alter tablespace TEMP coalesce.
  法四、使用诊断事件的一种方法,也是被我认为是“杀手锏”的一种方法
  1、 确定TEMP表空间的ts#
  SQL>.0select 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
  其它:
  1、 出现如上问题的原因我认为可能是由于大的排序超出了TEMP表空间的空间允许范围引起的。也可能包含着其它的异常的因素。
  2、 观注TEMP等这些空间的状态是Dba日常职责之一,我们可以通过Toad、Object Browser等这些工具办到,也可以用如下的语句:
  SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
  D.TOT_GROOTTE_MB "表空间大小(M)",
  D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
  TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,
  2),
  990.99) "使用比",
  F.TOTAL_BYTES "空闲空间(M)",
  F.MAX_BYTES "最大块(M)"
  FROM (SELECT TABLESPACE_NAME,
  ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
  ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
  FROM SYS.DBA_FREE_SPACE
  GROUP BY TABLESPACE_NAME) F,
  (SELECT DD.TABLESPACE_NAME,
  ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
  FROM SYS.DBA_DATA_FILES DD
  GROUP BY DD.TABLESPACE_NAME) D
  WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
  ORDER BY 4 DESC
  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.创建中转临时表空间
  create temporary tablespace TEMP1 TEMPFILE E:ORACLEORADATAORCL9temp02.DBF SIZE 512M REUSE AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED.
  2.改变缺省临时表空间 为刚刚创建的新临时表空间temp1
  alter database default temporary tablespace temp1.
  3.删除原来临时表空间
  0drop tablespace temp including contents and datafiles.
  4.重新创建临时表空间
  create temporary tablespace TEMP TEMPFILE E:ORACLEORADATAORCL9temp01.DBF SIZE 512M REUSE AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED.
  5.重置缺省临时表空间为新建的temp表空间
  alter database default temporary tablespace temp.
  6.删除中转用临时表空间
  0drop tablespace temp1 including contents and datafiles.
  7.如果有必要,那么重新指定用户表空间为重建的临时表空间
  alter user arbor temporary tablespace temp.
  更多优质资料尽在百考试题论坛 百考试题在线题库 oracle/认证更多详细资料

相关文章


oracle认证:Oracle10g新增CONVERT语法Oracle认证考试
oracle认证:浅谈Oracle优化排序的操作Oracle认证考试
Oracle10gR2如何删除误添加的空文件Oracle认证考试
oracle认证:oracle清理和重建临时表空间Oracle认证考试
oracle认证:深度揭露Oracle索引使用中的限制Oracle认证考试
oracle认证:详解如何在Oracle中连接输出结果Oracle认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛