oracle优化资料.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1.表空间(或者临时表空间过大)--系统表空间 浪费资源怎么处理? alter table 表名 shrink space;--表空间回收 此语句是删除某个表大量后用来回收该表空间--oracle 10g上才支持的 5.使用alter?tablespace?name?coalesce;手动收缩一次。 将表空间的pctincreace参改为大于0,让其自动收缩。一般改为1。 ?alter?tablespace?name?storage?(pctincrease?1); ????? 在oracle中由于表结构设计不合理或者需要清楚老数据的时候,经常需要对大表数据进行清理。 一般有一下几种方法: ???? 1. 删除大部分数据,留下小部分数据。我们可以把需要保留的数据转移到别的表,然后再把大表drop掉,然后改名就行了; ????????? a) create table tablename_min as select * from tablename_max a?where 需要保留的数据. ????????? b) drop table tablename_max ; ????????? c) rename tablename_min as tablename_max ; ?????? 这样就能清除这个大表的hwm,而且释放掉其他空间。 ???? 2.当删除的数据只是一小部分数据的话,第一种方法就不适用了。比如 3亿条数据,你删除一亿条数据的话,用1就不合适。 ????这时我们就应该考虑使用shrink table的方式。 ???????? a) 我们可以先用delete from tablename_max; ???????? b) 由于我们进行了数据的delete 所以造成了 tablename_max 这张表的数据稀疏,数据块并没有减少,hwm也没有减少,这样就会影响全表扫描需要访问更多的数据块。这时我们可以通过shrink来重组数据使数据分布更紧密,同时降低HWM释放空闲数据块。 ??????? c)由于需要移动行数据,数据的rowid会发生变化,所以需要设置表的row movement属性: ? ????????? alter table tablename_max enable row movement; --开启行迁移功能。 ? ???????? ?alter table tablename_max?shrink space compact;--(可以在压缩期间进行DML操作和查询) ,收缩表,不会降低hwm ????????????alter table tablename_max?shrink space; --( 调整HWM时将阻塞DML操作),收缩表,并且降低hwm ??????????? alter table tablename_max shrink space cascade;--收缩表并降低hwm,并且回收相应的索引。 ???????????? 由于我们删除了大量的数据 ,相应的索引也进行了删除,这时需要对索引进行收缩。? alter index idxname shrink space; ???????注意:shrink table只会针对assm(自动段空间管理)的表有用,否则会报:?ORA-10635: Invalid segment or tablespace type??????? alter table?tablename_max?enable row movement语句会造成引用表tablename_max的对象(如存储过程、包、视图等)变为无效。执行完成后,最好执行一下utlrp.sql来编译无效的对象。????????? ???由于是通过DML操作进行的,会产生大量redo,注意archivelog目录的空间大小问题;同时undo表空间也会暴增。 truncate比较适合一次性清除表中所有内容。 你想删除,delete from where是唯一的途径。 --批量高效删除大表数据语句 declare maxrows pls_integer default 5000; row_id_table dbms_sql.Urowid_Table; p_b_table dbms_sql.Number_Table; cursor cur_1 is select t_source.a,t_target.rowid from t_source,t_target where t_source.a=t_target.a and ????? rownum=200000 order by t_target.rowid; begin ?open cur_1; ?loop ????? exit whe

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档