设为首页 收藏本站
查看: 748|回复: 0

[经验分享] oracle的TEMP空间作用及涉及的操作

[复制链接]

尚未签到

发表于 2018-9-9 06:08:43 | 显示全部楼层 |阅读模式
  Oracle临时表空间
  (一)作用:主要用来做查询和存放一些缓冲区数据。它涉及的操作主要有SELECT 和排序。
  (二)弊端:临时表空间消耗的主要原因是需要对查询的中间结果进行排序。重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长,但是Oracle又采用的是贪心策略,即占有了的空间,他就不再释放,所以,一段时间之后,就需要释放 重建这个TEMP表空间。
  (三)如何重建。temp表空间的重建比较简单,不需要关闭数据库,要以system用户进入
  方法一:对于临时表空间,可以用resize修改其空间,但是前提是其中没有数据或不是正在使用;

  SQL>>  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'>  Tablespace created.

  SQL>>
  Database>  SQL> drop tablespace TEMP including contents and datafiles;
  Tablespace dropped.
  新建后的表空间因为没有数据,就可以再resize了

  SQL>>
  Database>  以下内容为摘抄参考:
  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'>  /
  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'>  /
  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,处理结束


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-568160-1-1.html 上篇帖子: oracle中获取年份、月份段内的时间 下篇帖子: oracle large pool
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表