美国上市公司,专注Java培训21年

Oracle数据库碎片的整理方法-java培训机构


碎片计算

由于自由空间碎片是由几部分组成,如范围数量、最大范围尺寸等,我们可用 FSFI--Free Space Fragmentation Index (自由空间碎片索引)值来直观体现:

FSFI=100*SQRT(max(extent)/sum(extents))*1/SQRT(SQRT(count(extents)))

可以看出, FSFI 的最大可能值为 100 (一个理想的单文件表空间)。随着范围的增加, FSFI 值缓慢下降,而随着最大范围尺寸的减少, FSFI 值会迅速下降。

下面的脚本可以用来计算 FSFI 值:

rem FSFI Value Compute

rem fsfi.sql

column FSFI format 999,99

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;

spool fsfi.rep;

/

spool off;

比如,在某数据库运行脚本 fsfi.sql, 得到以下 FSFI 值:

TABLESPACE_NAME FSFI

-------------------------------------

RBS 74.06

SYSTEM 100.00

TEMP 22.82

TOOLS 75.79

USERS 100.00

USER_TOOLS 100.00

YDCX_DATA 47.34

YDCX_IDX 57.19

YDJF_DATA 33.80

YDJF_IDX 75.55

统计出了数据库的 FSFI 值,就可以把它作为一个可比参数。在一个有着足够有效自由空间,且FSFI 值超过 30 的表空间中,很少会遇见有效自由空间的问题。当一个空间将要接近可比参数时,就需要做碎片整理了。

【Oracle数据库碎片的整理方法】

碎片整理

1)表空间的 pctincrease 值为非 0。

可以将表空间的缺省存储参数 pctincrease 改为非 0 。一般将其设为 1 ,如:

alter tablespace temp

default storage(pctincrease 1);

这样 SMON 便会将自由范围自动合并。也可以手工合并自由范围: alter tablespace temp coalesce。

碎片整理

我们知道,段由范围组成。在有些情况下,有必要对段的碎片进行整理。要查看段的有关信息,可查看数据字典 dba_segments ,范围的信息可查看数据字典 dba_extents 。如果段的碎片过多, 将其数据压缩到一个范围的最简单方法便是用正确的存储参数将这个段重建,然后将旧表中的数据插入到新表,同时删除旧表。这个过程可以用 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 full=Y

这种方法可用于整个数据库。


下面是一种如何自动处理表空间碎片的代码,希望对上大家看上文有用

Coalesce Tablespace Automatically

This technique comes from Sandeep

Naik, a database administrator

for GSXXI, Inc. in New York City, New York

Here is a handy script which can be

scheduled to automatically run

and coalesces the tablespaces.

This script is designed to run in NT

but can be run in any operating system

by slight modifications in the path where the file spools

from the SQLPLUS environment.

It assumes that the user who runs the script

has priviledges to view the data dictionary.

Start of code

--------------------------------------

sqlplus /

prompt this script will coalesce the

tablespace automatically

set verify off;

set termout off;

set head off;

spool c: empcoalesce.log

select alter tablespace

||TABLESPACE_NAME|| coalesce ;

from DBA_FREE_SPACE_COALESCED where

PERCENT_EXTENTS_COALESCED <100

or PERCENT_BLOCKS_COALESCED<100 ;

spool off;

@ c: empcoalesce.log

set head on;

set termout on;

set verify on;

prompt Tablespaces are coalesced successfully


【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!

Java开发高端课程免费试学

大咖讲师+项目实战全面提升你的职场竞争力

  • 海量实战教程
  • 1V1答疑解惑
  • 行业动态分析
  • 大神学习路径图

相关推荐

更多
  • Java培训机构分享ORACLE数据库的备份方法
    Java培训机构分享ORACLE数据库的备份方法
    Oracle数据库的备份方法很多,无论使用那种备份方法,备份的目的都是为了在出现故障后能够以尽可能小的时间和代价恢复系统 详情>>

    2017-02-08

  • Oracle体系结构-Java培训机构整理分享
    Oracle体系结构-Java培训机构整理分享
    Oracle体系结构-Java培训机构整理分享 详情>>

    2017-01-04

  • Oracle数据库碎片的整理方法-java培训机构
    Oracle数据库碎片的整理方法-java培训机构
    Oracle数据库碎片的整理方法-java培训机构 详情>>

    2016-12-29

  • Oracle如何删除表中重复记录
    Oracle如何删除表中重复记录
    在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来读诸多不便,那么怎么删除这些重复没有用的数据呢? 详情>>

    2016-12-14

  • Java开班时间

    收起