① 怎么查看oracle数据库碎片
(1)是处理数据文件,插入客户化接口表; (2)是处理客户化接口表数据,插入标准接口表; (3)是提交标准请求,导入标准表。 在导入的类型上来说,有三种情况: (1)创建物料 (2)更新物料 (3)组织分配
② oracle数据库碎片,有什么好办法整理
用联机重定义,先联机拷贝,找个表访问量小的窗口分分钟完成新旧表切换,基本能满足24小时运转的要求。
③ oracle碎片如何整理
1.碎片是如何产生的 当创建一个数据库实例时,会分成称为表空间(tablespace)的多个逻辑段(segment),如系统(system)表空间,临时(temporary)...
2.碎片对系统的影响 2.1导致系统性能减弱 如上所述,当要满足一个空间要求时,数据库将首先...
3.自由范围的碎片计算 由于自由空间碎片是由几部分组成,如范围数量、最大范围尺寸等,我们可用...
4.碎片整理 4.1盘区(extent)的碎片整理 使用命令:alter ...
④ oracle中为什么所有的EXTENT都一样大,那就肯定不会出现表空间碎片了
Oracle数据库的区(EXTENT)有两种分配方式:
UNIFORM--区固定大小分配方式;
AUTOALLOCATE--区大小系统自动分配方式。
一般多数采用系统自动分配区的方式,所以区的大小都是不同的。
⑤ oracle10g为什么还有很多表空间碎片
Oracle在删除一段数据的时候,也不会把其他的有效数据拿过来放在那里。
久而久之就是碎片了,为了提高IO, 当然是成块成块的读取数据最好。
⑥ oracle 如何清理表空间碎片
http://bbs.csdn.net/topics/70440536这是关于oracle碎片的文章,你看下,另外在oracle中删除表中的数据有两种方法,一种是delete,delete在删除表数据后空间不会自动被oracle回收,另一种是truncate删除表数据后空间会自动被oracle回收,truncate的速度快点。
⑦ 如何确定oracle 文件碎片化情况
1.表空间碎片
----1.查看fsfi值
select a.tablespace_name,
trunc(sqrt(max(blocks)/sum(blocks))* (100/sqrt(sqrt(count(blocks)))),2) fsfifrom dba_free_space a,dba_tablespaces bwhere a.tablespace_name=b.tablespace_nameand b.contents not in('TEMPORARY','UNDO','SYSAUX')group by A.tablespace_nameorder by fsfi;如果FSFI小于<30%则表空间碎片太多.
fsfi的最大可能值为100(一个理想的单文件表空间)。随着范围的增加,fsfi值缓慢下降,而随着最大范围尺寸的减少,fsfi值会迅速下降。
---2.查看dba_free_space
dba_free_space 显示的是有free 空间的tablespace ,如果一个tablespace 的free 空间不连续,那每段free空间都会在dba_free_space中存在一条记录。如果一个tablespace 有好几条记录,说明表空间存在碎片,当采用字典管理的表空间碎片超过500就需要对表空间进行碎片整理。
select a.tablespace_name ,count(1) 碎片量 fromdba_free_space a, dba_tablespaces bwhere a.tablespace_name =b.tablespace_nameand b.contents not in('TEMPORARY','UNDO','SYSAUX')group by a.tablespace_namehaving count(1) >20order by 2;
-----3.按照表空间显示连续的空闲空间
Script. tfstsfgm
SET ECHO off
REM NAME:TFSTSFRM.sql
REM USAGE:"@path/tfstsfgm"
REM REM REQUIREMENTS:
REM SELECT ON DBA_FREE_SPACE
REM REM PURPOSE:
REM The following is a script. that will determine how many extentsREM of contiguous free space you have in Oracle as well as theREM total amount of free space you have in each tablespace. FromREM these results you can detect how fragmented your tablespace is.
REM
REM The ideal situation is to have one large free extent in yourREM tablespace. The more extents of free space there are in theREM tablespace, the more likely you will run into fragmentationREM problems. The size of the free extents is also very important.
REM If you have a lot of small extents (too small for any nextREM extent size) but the total bytes of free space is large, thenREM you may want to consider defragmentation options.
REM ------------------------------------------------------------------------REM DISCLAIMER:
REM This script. is provided for ecational purposes only. It is NOTREM supported by Oracle World Wide Technical Support.
REM The script. has been tested and appears to work as intended.
REM You should always run new scripts on a test instance initially.
REM ------------------------------------------------------------------------REM Main text of script. follows:
create table SPACE_TEMP (
TABLESPACE_NAME CHAR(30),
CONTIGUOUS_BYTES NUMBER)
/
declare
cursor query is select *
from dba_free_space
order by tablespace_name, block_id;
this_row query%rowtype;
previous_row query%rowtype;
total number;
begin
open query;
fetch query into this_row;
previous_row := this_row;
total := previous_row.bytes;
loop
fetch query into this_row;
exit when query%notfound;
if this_row.block_id = previous_row.block_id + previous_row.blocks thentotal := total + this_row.bytes;insert into SPACE_TEMP (tablespace_name)values (previous_row.tablespace_name);
else
insert into SPACE_TEMP values (previous_row.tablespace_name,total);total := this_row.bytes;end if;
previous_row := this_row;
end loop;
insert into SPACE_TEMP values (previous_row.tablespace_name,total);end;.
/
set pagesize 60
set newpage 0
set echo off
ttitle center 'Contiguous Extents Report' skip 3break on "TABLESPACE NAME" skip page plicatespool contig_free_space.lisremcolumn "CONTIGUOUS BYTES" format 999,999,999column "COUNT" format 999column "TOTAL BYTES" format 999,999,999column "TODAY" noprint new_value new_today format a1remselect TABLESPACE_NAME "TABLESPACE NAME",CONTIGUOUS_BYTES "CONTIGUOUS BYTES"from SPACE_TEMPwhere CONTIGUOUS_BYTES is not null
order by TABLESPACE_NAME, CONTIGUOUS_BYTES desc;select tablespace_name, count(*) "# OF EXTENTS",sum(contiguous_bytes) "TOTAL BYTES"from space_tempgroup by tablespace_name;
spool off
drop table SPACE_TEMP
/
********************************************************************************2.表碎片********************************************************************************----方法1:显示碎片率最高的200个表(基于统计信息是否准确)col frag format 999999.99col owner format a30;col table_name format a30;
select * from (
select a.owner,
a.table_name,
a.num_rows,
a.avg_row_len * a.num_rows total_bytes,
sum(b.bytes),
trunc((a.avg_row_len*a.num_rows)/sum(b.bytes),2)*100||'%' fragfrom dba_tables a,dba_segments bwhere a.table_name=b.segment_nameand a.owner=b.owner
and a.owner not in
('SYS','SYSTEM','OUTLN','DMSYS','TSMSYS','DBSNMP','WMSYS','EXFSYS','CTXSYS','XDB','OLAPSYS','ORDSYS','MDSYS','SYSMAN')group by a.owner,a.table_name,a.avg_row_len,a.num_rowshaving a.avg_row_len*a.num_rows/sum(b.bytes)<0.7order by sum(b.bytes) desc)where rownum<=200;---方法2:
-- 收集表统计信息
exec dbms_stats.gather_table_stats(ownname=>'SCOTT',tabname=> 'TBLORDERS');-- 确定碎片程度SELECT table_name, trunc(ROUND ((blocks * 8), 2)/1024,2) "High water levelM",trunc(ROUND ((num_rows * avg_row_len / 1024), 2)/1024,2) "Real used spaceM",trunc(ROUND ((blocks * 10 / 100) * 8, 2)/1024,2) "Reserve space(pctfree) M",trunc( ROUND (( blocks * 8- (num_rows * avg_row_len / 1024)- blocks * 8 * 10 / 100
),
2
) /1024,2) "Waste spaceM"
FROM dba_tables
WHERE table_name = 'TBLORDERS';
********************************************************************************3.索引碎片********************************************************************************---1..查看索引高度为2并且索引大小超过20M的索引select id.tablespace_name,id.owner,id.index_name,
id.blevel,
sum(sg.bytes)/1024/1024,
sg.blocks,
sg.extents
from dba_indexes id,dba_segments sg
where id.owner=sg.owner
and id.index_name=sg.segment_name
and id.tablespace_name=sg.tablespace_nameand id.owner not in('SYS','SYSTEM','USER','DBSNMP','ORDSYS','OUTLN')and sg.extents>100and id.blevel>=2group by id.tablespace_name,
id.owner,
id.index_name,
id.blevel,
sg.blocks,
sg.extents
having sum(sg.bytes)/1024/1024>20;
---2.analyze index方法(会锁表)
analyze index index_name validate structure;select del_lf_rows*100/decode(lf_rows,0,1,lf_rows) pct_deleted from index_stats;如果pct_deleted>20%说明索引碎片严重.
********************************************************************************4.automatic segment advisor********************************************************************************数据表上频繁的进行插入、更新和删除动作会产生表空间碎片。Oracle可在表或索引上执行Segment shrink。
使得segment的空闲空间可用于表空间中的其它segment,可改善DML性能。
调用Segment Advisor对指定segment执行增长趋势分析以确定哪些Segment受益于Segment shrink。
执行shrink操作,Segment Advisor推荐启用表的ROW MOVEMENTSQL> alter table scott.tblorders enable row movement;variable id number;begindeclare
name varchar2(100);
descr varchar2(500);
obj_id number;
begin
name:='Manual_tblorders';
descr:='Segment Advisor Example';
dbms_advisor.create_task (
advisor_name => 'Segment Advisor',
task_id => :id,
task_name => name,
task_desc => descr);
dbms_advisor.create_object (
task_name => name,
object_type => 'TABLE',
attr1 => 'SCOTT',
attr2 => 'TBLORDERS',
attr3 => NULL,
attr4 => NULL,
attr5 => NULL,
object_id => obj_id);
dbms_advisor.set_task_parameter(
task_name => name,
parameter => 'recommend_all',
value => 'TRUE');
dbms_advisor.execute_task(name);
end;
end;
/
---删除执行计划
declare name varchar2(100);
begin
name:='Manual_tblorders';
DBMS_ADVISOR.DELETE_TASK (name);
end;
/
---手动执行计划
declare name varchar2(100);
begin
name:='Manual_tblorders';
dbms_advisor.execute_task(name);
end;
/
NOTE:如果执行计划结果中已经有数据则不能直接手动执行需要删除再执行---查看手动新建的计划是否已经执行完成select task_id, task_name, status,advisor_name,created from dba_advisor_taskswhere owner = 'SYS' and task_name='Manual_tblorders' and advisor_name = 'Segment Advisor' ;select af.task_name, ao.attr2 segname, ao.attr3 partition, ao.type, af.messagefrom dba_advisor_findings af, dba_advisor_objects aowhere ao.task_id = af.task_idand ao.object_id = af.object_idand af.task_id=&task_id;
----只查询可以进行shrink操作的对象
select f.task_name, o.attr2 segname, o.attr3 partition, o.type, f.messagefrom dba_advisor_findings f, dba_advisor_objects owhere o.object_id = f.object_idand o.task_name=f.task_name--and f.message like '%shrink%'
and f.message like '%收缩%'
and f.task_id=&task_id
order by f.impact desc;
---查看automatic segment advisor的recommendations结果select tablespace_name, segment_name, segment_type, partition_name,recommendations, c1 fromtable(dbms_space.asa_recommendations('FALSE', 'FALSE', 'FALSE5. 碎片整理方法5.1表空间碎片整理
alter tablespace users coalesce;
5.2表碎片整理
方法1:exo/imp或data pump数据泵技术
---方法2:CTAS
create table newtable as select * from oldtable;drop table oldtable;rename table newtable to oldtable;----方法3:move tablespace技术
alter table <table_name> move tablespace <newtablespace_name>;----方法4:shrinkalter table <table_name> enable row movement;alter table <table_name> shrink space cascade; --压缩表以及相关数据段并下调HWMalter table <table_name> shrink space compact; --只压缩数据不下调HWM,不影响DML操作alter table <table_name> shrink space; --下调HWM,影响DML操作----方法5:online redefinition--online redefinition具有的应用场景:
1).Online table redefinition enables you to:
2).Modify the storage parameters of a table or cluster3).Move a table or cluster to a different tablespace4).Add or drop partitioning support (non-clustered tables only)5).Change partition structure6).Change physical properties of a single table partition, including moving it to a different tablespace in the same schema7).Change physical properties of a materialized view log or an Oracle Streams Advanced Queueing queue table8).Add support for parallel queries9).Re-create a table or cluster to rece fragmentation10).Convert a relational table into a table with object columns, or do the reverse.
11).Convert an object table into a relational table or a table with object columns, or do the reverse.
⑧ oracle性能如何调整,如何回收表空间碎片
性能调整:调整需求一般根据数据库服务器的响应时间来确定是否要调整,发现瓶颈,调整性能,解决问题。需要有具体的问题描述,方可意义。
回收表空间碎片:简单粗暴管用的方法,导出后重建,再导入。
⑨ 如何优化oracle的碎片
合并表的碎片:
1.删除重建表
2.alter table table_name move tablespace_name
3.shrink,前提是要开启row movement和自动(表段所在表空间的)段空间管理
⑩ 逐步讲解 Oracle数据库碎片如何整理
对于系统管理员来讲,如何保证网络稳定运行,如何提高数据库性能,使其更加安全高效,就显得尤为重要。作为影响数据库性能的一大因素 -- 数据库碎片,应当引起 DBA 的足够重视,及时发现并整理碎片乃是 DBA 一项基本维护内容。 1、碎片是如何产生的 当生成一个数据库时,它会分成称为表空间( Tablespace )的多个逻辑段( Segment ),如系统(System)表空间 , 临时(Temporary)表空间等。一个表空间可以包含多个数据范围(Extent)和一个或多个自由范围块,即自由空间(Free Space)。 表空间、段、范围、自由空间的逻辑关系如下: 当表空间中生成一个段时,将从表空间有效自由空间中为这个段的初始范围分配空间。在这些初始范围充满数据时,段会请求增加另一个范围。这样的扩展过程会一直继续下去,直到达到最大的范围值,或者在表空间中已经没有自由空间用于下一个范围。最理想的状态就是一个段的数据可被存在单一的一个范围中。这样,所有的数据存储时靠近段内其它数据,并且寻找数据可少用一些指针。但是一个段包含多个范围的情况是大量存在的,没有任何措施可以保证这些范围是相邻存储的,当要满足一个空间要求时,数据库不再合并相邻的自由范围(除非别无选择), 而是寻找表空间中最大的自由范围来使用。这样将逐渐形成越来越多的离散的、分隔的、较小的自由空间,即碎片。例如: 2、碎片对系统的影响 随着时间推移,基于数据库的应用系统的广泛使用,产生的碎片会越来越多,将对数据库有以下两点主要影响: 1)导致系统性能减弱。 如上所述,当要满足一个空间要求时,数据库将首先查找当前最大的自由范围,而 “最大”自由范围逐渐变小,要找到一个足够大的自由范围已变得越来越困难,从而导致表空间中的速度障碍,使数据库的空间分配愈发远离理想状态; 2)浪费大量的表空间。 尽管有一部分自由范围(如表空间的 pctincrease 为非 0 )将会被 SMON (系统监控)后台进程周期性地合并,但始终有一部分自由范围无法得以自动合并,浪费了大量的表空间。 3、自由范围的碎片计算 由于自由空间碎片是由几部分组成,如范围数量、最大范围尺寸等,我们可用 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 的表空间中,很少会遇见有效自由空间的问题。当一个空间将要接近可比参数时,就需要做碎片整理了。 4、自由范围的碎片整理1)表空间的 pctincrease 值为非 0。 可以将表空间的缺省存储参数 pctincrease 改为非 0 。一般将其设为 1 ,如: alter tablespace temp default storage(pctincrease 1);这样SMON 便会将自由范围自动合并。也可以手工合并自由范围: alter tablespace temp coalesce。 5、段的碎片整理我们知道,段由范围组成。在有些情况下,有必要对段的碎片进行整理。要查看段的有关信息,可查看数据字典 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 这种方法可用于整个数据库。 以上简单分析了 Oracle 数据库碎片的产生、计算方法及整理,仅供参考。数据库的性能优化是一项技术含量高,同时又需要有足够耐心、认真细致的工作。 对数据库碎片的一点探讨, 下面是一种如何自动处理表空间碎片的代码,希望对上大家看上文有用 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 scheled 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