① 怎麼查看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