原 Oracle 碎片整理 问题https://blog.csdn.net/tianlesoftware/article/details/4763768版权声明: https://blog.csdn.net/tianlesoftware/article/details/4763768
  数据库碎片是影响数据库性能的一个大因素,应及时发现并整理碎片。
  一. 碎片是如何产生的  
       当创建一个数据库实例时,会分成称为表空间(tablespace)的多个逻辑段(segment),如系统(system)表空间,临时(temporary)表空间等。一个表空间可以包含多个数据范围(extent)和一个或多个自由范围块,即自由空间(free space)。 
       表空间、段、范围、自由空间的逻辑关系如下: 
       当表空间中生成一个段时,将从表空间有效自由空间中为这个段的初始范围分配空间。在这些初始范围充满数据时,段会请求增加另一个范围。这样的扩展过程会一直继续下去,直到达到最大的范围值,或者在表空间中已经没有自由空间用于下一个范围。
       最理想的状态就是一个段的数据可被存在单一的一个范围中。这样,所有的数据存储时靠近段内其它数据,并且寻找数据可少用一些指针。但是一个段包含多个范围的情况是大量存在的,没有任何措施可以保证这些范围是相邻存储的。     当要满足一个空间要求时,数据库不再合并相邻的自由范围(除非别无选择), 而是寻找表空间中最大的自由范围来使用。这样将逐渐形成越来越多的离散的、分隔的、较小的自由空间,即碎片。
  表空间(tableSpace) 段(segment) 盘区(extent) 块(block) 关系
http://blog.csdn.net/tianlesoftware/archive/2009/12/13/4962476.aspx
    二. 碎片对系统的影响 
2.1 导致系统性能减弱 
       如上所述,当要满足一个空间要求时,数据库将首先查找当前最大的自由范围,而"最大"自由范围逐渐变小,要找到一个足够大的自由范围已变得越来越困难,从而导致表空间中的速度障碍,使数据库的空间分配愈发远离理想状态; 
  2.2  浪费大量的表空间 
       部分extent无法得以自动合并,浪费了大量的表空间。 
  三. 自由范围的碎片计算 
       由于自由空间碎片是由几部分组成,如范围数量、最大范围尺寸等,我们可用FSFI(free space fragmentation index:自由空间碎片索引)值来直观体现: 
    FSFI=100*sqrt(max(extent)/sum(extents))*1/sqrt(sqrt(count(extents)))
              可以看出,FSFI的最大可能值为100(一个理想的单文件表空间)。随着范围的增加,FSFI值缓慢下降,而随着最大范围尺寸的减少,FSFI值会迅速下降。
  可以使用如下SQL可以用来计算FSFI值:
/* Formatted on 2011/01/27 14:12:43 (QP5 v5.115.810.9015) */
  SELECT   tablespace_name,
           SQRT (MAX (blocks) / SUM (blocks))
           * (100 / SQRT (SQRT (COUNT (blocks))))
              FSFI
    FROM   dba_free_space
GROUP BY   tablespace_name
ORDER BY   1;
  比如,在某数据库运行上面SQL,得到以下FSFI值: 
TABLESPACE_NAME                      FSFI
------------------------------ ----------
QS_OA                          54.3794714
RBS                            59.4603558
SYSAUX                         84.0138802
SYSTEM                         70.5946502
UNDOTBS1                       20.0110492
USERS                                 100
XEZF                           6.52482383  --碎片较多
XEZF_INDEX                     32.1055286
8 rows selected.
    四.  碎片整理 
4.1 盘区(extent)的碎片整理 
       使用命令: alter tablespace temp coalesce;
  /* Formatted on 2011/01/27 14:23:46 (QP5 v5.115.810.9015) */
SELECT   'alter tablespace ' || TABLESPACE_NAME || ' coalesce ;'
  FROM   DBA_FREE_SPACE_COALESCED
 WHERE   PERCENT_EXTENTS_COALESCED < 100 OR PERCENT_BLOCKS_COALESCED < 100;
  4.2  段(segment)的碎片整理 
       段由extent组成。在有些情况下,有必要对段的碎片进行整理。要查看段的有关信息,可查看数据字典dba_segments,segment的信息可查看数据字典dba_extents。
       段可以有表段,索引段等。 每种段都可以碎片的整理。
  (1)表段碎片整理
         如果段的碎片过多, 将其数据压缩到一个范围的最简单方法便是用正确的存储参数将这个段重建,然后将旧表中的数据插入到新表,同时删除旧表。这个过程可以用import/export工具来完成。 
         export命令有一个(压缩)标志,这个标志在读表时会引发export确定该表所分配的物理空间量,它会向输出转储文件写入一个新的初始化存储参数--等于全部所分配空间。若这个表关闭, 则使用import命令重新生成。这样,它的数据会放入一个新的、较大的初始段中。例如:
    exp user/password file=exp.dmp compress=y
       grants=y indexes=y    tables=(table1,table2);
导出成功后,在库中删除这两张表,在导入数据:
    imp user/password file=exp.dmp commit=y buffer=64000  tables=(table1,table2);
  除了用exp/imp,还可以使用shrink table 或者alter table tbname move 来实现。
  具体参考:
       Oracle 10g Shrink Table 详解
        http://www.cndba.cn/Dave/article/1248
  一个小脚本:
--1.整理空间碎片;
tmp_val VARCHAR2 (500);
BEGIN
FOR REC IN (SELECT TABLE_NAME FROM USER_TABLES )
LOOP
tmp_val:='ALTER TABLE '||user.TABLE_NAME ||' MOVE';
BEGIN
EXECUTE IMMEDIATE tmp_val;
DBMS_OUTPUT.put_line (tmp_val);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('Error: ' || tmp_val || '!');
END;
END LOOP;
  (2). 索引段碎片整理
把索引重建(碎片整理后,很多索引会变成UNUSABLE状态,必须重建后,让它变成void状态)
  FOR REC IN (SELECT INDEX_NAME FROM USER_INDEXES ) --WHERE STATUS='UNUSABLE'
LOOP
tmp_val:='ALTER INDEX '||REC.INDEX_NAME ||' REBUILD';
BEGIN
EXECUTE IMMEDIATE tmp_val;
DBMS_OUTPUT.put_line (tmp_val);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('Error: ' || tmp_val || '!');
END;
END LOOP;
END;
  更多信息参考:
     Oracle 索引的维护
       http://www.cndba.cn/Dave/article/1157
            整理自网络
------------------------------------------------------------------------------
QQ:492913789
Email:ahdba@qq.com
Blog: http://www.cndba.cn/dave

网上资源: http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1 群:62697716(满); DBA2 群:62697977(满)
DBA3 群:62697850   DBA 超级群:63306533;    
聊天 群:40132017
--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请
 https://img-blog.csdnimg.cn/20190217105710569.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwNzgxNDE=,size_16,color_FFFFFF,t_70《算法导论 第三版英文版》_高清中文版.pdf
https://pan.baidu.com/s/17D1kXU6dLdU0YwHM2cvNMw
《深度学习入门:基于Python的理论与实现》_高清中文版.pdf
https://pan.baidu.com/s/1IeVs35f3gX5r6eAdiRQw4A
《深入浅出数据分析》_高清中文版.pdf
https://pan.baidu.com/s/1GV-QNbtmjZqumDkk8s7z5w
《Python编程:从入门到实践》_高清中文版.pdf
https://pan.baidu.com/s/1GUNSg4mdpeOf1LC_MjXunQ
《Python科学计算》_高清中文版.pdf
https://pan.baidu.com/s/1-hDKhK-7rDDFll_UFpKmpw

Oracle碎片整理问题相关推荐

  1. ORACLE 碎片整理小结

    oracle碎片小结 我们在使用windows的时候,都知道要定期整理磁盘碎片,因为磁盘碎片会影响性能,给管理上带来额外的 负担.那oracle更是如此,当随着数据增加,oracle处理海量数据本身就 ...

  2. oracle+怎么清理碎片,oracle碎片整理方法

    采用两种方法:exp imp 和 SQL脚本整理 ---- 我们知道,段由范围组成.在有些情况下,有必要对段的碎片进行整理.要查看段的有关信息,可查看数据字典 dba_segments ,范围的信息可 ...

  3. Oracle 数据库整理表碎片

    Oracle 数据库整理表碎片 转载:http://kyle.xlau.org/posts/table-fragmentation.html 表碎片的来源 当针对一个表的删除操作很多时,表会产生大量碎 ...

  4. Oracle 20c 新特性:Online SecureFiles Defragmentation 在线的 LOB 碎片整理

    墨墨导读:在使用 LOB 的时候,可能大家都遇到过碎片和空间问题的困扰,在 20c 中,Oracle提供了对于 SecureFiles 的碎片整理功能,完善了对于大对象碎片化的处理过程. 在使用 LO ...

  5. oracle 表空间 碎片,Oracle表空间碎片整理

    作为影响数据库性能的一个因素,数据库表空间碎片,应当引起DBA的重视,及时发现并整理碎片是DBA基本维护内容,以提高数据库性能. Oracle数据库表空间.段.区.块简述 表空间(tablesapce ...

  6. ORACLE表空间的碎片整理

    oracle作为一种大型数据库,广泛应用于金融.邮电.电力.民航等数据吞吐量巨大,计算机网络广泛普及的重要部门.对于系统管理员来讲,如何保证网络 稳定运行,如何提高数据库性能,使其更加安全高效,就显得 ...

  7. oracle表碎片整理

    记录一次oracle 11g整理表的命令 Oracle版本:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Prod ...

  8. oracle表稅片整理,oracle_Oracle表碎片整理操作步骤详解,高水位线(HWL)下的许多数据 - phpStudy...

    Oracle表碎片整理操作步骤详解 高水位线(HWL)下的许多数据块都是无数据的,但全表扫描的时候要扫描到高水位线的数据块,也就是说oracle要做许多的无用功!因此oracle提供了shrink s ...

  9. Oracle表的空间释放,碎片整理记录

    一.表的占用空间大小释放原理 背景: 生产环境中,经常会遇到表由于数据不断插入,导致空间越来越大,由于前期配置问题,没有做分区或者其他优化,而且生产数据实时向表插入.要删除历史数据来释放空间. 分析: ...

最新文章

  1. symfony2项目访问app_dev.php不显示debug工具栏的问题
  2. Scapy学习笔记一
  3. VC2019消息框编程总结
  4. React开发(208):react代码分割在嵌套组件中更新 Context
  5. [开源] 使用 Python 轻松操作已存在的表
  6. ADO.Net之SqlConnection、 Sqlcommand的应用
  7. 软件开发模型_为什么越来越多软件开发团队都放弃了瀑布模型?
  8. iOS开发UIAlertController之UIAlertAction加图片(UIAlertController按钮加图片)
  9. CNN 卷积神经网络 池化层Pooling 动手学深度学习v2 pytorch
  10. 线性代数知识点汇总:行列式和矩阵
  11. Flask 框架的网站实现
  12. 学测试,看视频?NONONO,除非这种情况
  13. 本地静态网页上传到服务器
  14. 机器学习,看这一篇就够了:回归算法,特征工程,分类算法,聚类算法,神经网络,深度学习入门
  15. android 实现果冻动画效果,HTML5/Canvas粘滑的果冻动画特效
  16. 【C语言】计算日期差
  17. MT940银行对账单怎么解析呢
  18. BUUCTF VoIP
  19. Python实现随机游走详细解释
  20. synchronized源码解析

热门文章

  1. 【自然语言处理】【ChatGPT系列】FLAN:微调语言模型是Zero-Shot学习器
  2. vue3购物车(全选,反选,数量计算)
  3. 草图大师卡死后找到自动保存备份文件的3种解决方法
  4. Gensim库生成与导入W2V模型_CodingPark编程公园
  5. 大数据Apache Druid(四):使用Imply进行Druid集群搭建
  6. 关于webservice服务在springboot项目中的开发的介绍
  7. PHP面试题2021和2022面试、跳槽必备大全!
  8. b2g process 和nuwa process 通信
  9. SSMS18.9.1证书被颁发者直接吊销
  10. EasyX 图片透明设置