reorg 通過(guò)重構(gòu)行來(lái)消除“碎片”數(shù)據(jù)并壓縮信息,對(duì)表進(jìn)行重組。 還有一個(gè)功能就是可以將表中的數(shù)據(jù)按照某個(gè)索引關(guān)鍵字的順序排列,從而可以減少某些查詢i/o數(shù)量。 當(dāng)數(shù)據(jù)庫(kù)里某個(gè)表中的記錄變化量很大時(shí),需要在表上做REORG操作來(lái)優(yōu)化數(shù)據(jù)庫(kù)性能,值得注意的是,針對(duì)數(shù)據(jù)庫(kù)對(duì)象的大量操作,如反復(fù)地刪除表,存儲(chǔ)過(guò)程,會(huì)引起 系統(tǒng)表中數(shù)據(jù)的頻繁改變,在這種情況下,也要考慮對(duì)系統(tǒng)表進(jìn)行REORG操作。
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)城關(guān),10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢建站服務(wù):18980820575
執(zhí)行REORG可以考慮分為表上有索引和沒(méi)有索引兩種情況:
1) 如表名為DB2INST1.STAFF,索引名為DB2INST1.ISTAFF
SQL:reorg table db2inst1.staff index db2inst1.istaff use tempspace1
建議REORG時(shí)使用USE參數(shù)指定數(shù)據(jù)重排時(shí)使用的臨時(shí)表空間,否則,REORG工作將會(huì)在表所在表空間中原地執(zhí)行.如果表上有多個(gè)索引,INDEX參數(shù)值請(qǐng)使用最為重要的索引名.
2)表上沒(méi)有索引:
reorg table db2inst1.staff use tempspace1
reorg table sysibm.systables use tempspace1
1、在數(shù)據(jù)庫(kù)服務(wù)器的開(kāi)始菜單中找到Datebase Configuration Assistant。
2、在創(chuàng)建畫(huà)面第一步選擇:創(chuàng)建新數(shù)據(jù)庫(kù),點(diǎn)擊下一步。
3、根據(jù)需求選擇自己的數(shù)據(jù)庫(kù)類(lèi)型(一般默認(rèn))后,跳轉(zhuǎn)到全局?jǐn)?shù)據(jù)庫(kù)名這個(gè)畫(huà)面時(shí),重點(diǎn)來(lái)了:新建數(shù)據(jù)庫(kù)名稱(chēng)不能和已經(jīng)存在的任何一個(gè)數(shù)據(jù)庫(kù)名稱(chēng)相同。
4、在管理帳戶密碼界面,可以與別的數(shù)據(jù)庫(kù)管理帳戶密碼相同也可以不同,需注意的是,Oracle數(shù)據(jù)庫(kù)默認(rèn)是區(qū)分密碼大小寫(xiě)的。
5、跳轉(zhuǎn)到Oracle內(nèi)存分配大小頁(yè)面,這里建議將Oracle內(nèi)存調(diào)整為物理主機(jī)內(nèi)存的70%。
6、點(diǎn)擊完成后,等待數(shù)據(jù)庫(kù)創(chuàng)建完成。
7、數(shù)據(jù)庫(kù)創(chuàng)建完成后,用sqlplus?語(yǔ)句連接數(shù)據(jù)庫(kù),在同一服務(wù)器上建立多個(gè)Oracle數(shù)據(jù)庫(kù)操作完成。
alter table tablename move [tablespace tablespacename];
delete數(shù)據(jù)不會(huì)回收已經(jīng)分配出去的block(也就是delete前后你查看user_segments中的信息不會(huì)有改動(dòng))。
但這時(shí)你對(duì)表執(zhí)行analyze后查看dba_tables表的話會(huì)發(fā)現(xiàn)empty_block數(shù)目變大或者avg_space數(shù)據(jù)變小。
如果你希望減少該table占用的實(shí)際block數(shù)目,
你需要使用move操作將table重建,oracle才會(huì)重新分配block,這時(shí)table上的索引會(huì)失效,需要rebuild。
一,創(chuàng)建測(cè)試環(huán)境
1.1 創(chuàng)建測(cè)試表,為其插入16萬(wàn)條記錄
create table jax_t11
as
select * from dba_objects
where rownum = 10000;
insert into jax_t11
select * from jax_t11;
commit;
insert into jax_t11
select * from jax_t11;
commit;
insert into jax_t11
select * from jax_t11;
commit;
insert into jax_t11
select * from jax_t11;
commit;
1.2 創(chuàng)建索引
create index idx_jax_t11_01 on jax_t11(owner,object_name,created);
1.3 分析表及索引
begin
dbms_stats.gather_table_stats
( ownname = user, -- 表的擁有者
tabname = upper('jax_t11'), -- 表名稱(chēng)
method_opt = 'for all indexed columns size 1', -- 獲得所有索引列的柱狀圖
cascade = TRUE ); -- 級(jí)聯(lián)獲取 indexes的統(tǒng)計(jì)信息
end;
1.4 查看表占用空間大小
select segment_name,segment_type,bytes/1024/1024 from dba_segments ds
where ds.segment_name in ( 'JAX_T11', upper('idx_jax_t11_01'));
SEGMENT_NAME SEGMENT_TYPE BYTES/1024/1024
JAX_T11 TABLE 17
IDX_JAX_T11_01 INDEX 9
這里我們可以看到,表占空間17M,索引占空間9M;
表空間占用明細(xì)
SELECT table_name,tablespace_name,
num_rows, -- 記錄行數(shù)
avg_row_len, --平均行長(zhǎng)度
blocks,
avg_space,
empty_blocks
from user_tables ut
where ut.table_name = 'JAX_T11'
TABLE_NAME TABLESPACE_NAME NUM_ROWS AVG_ROW_LEN BLOCKS AVG_SPACE EMPTY_BLOCKS
JAX_T11 DRP_DATA 160000 100 2146 0 0
索引空間占用明細(xì)
SELECT index_name,table_name,leaf_blocks,distinct_keys,num_rows
from user_indexes ut
where ut.index_name = upper('idx_jax_t11_01')
INDEX_NAME TABLE_NAME LEAF_BLOCKS DISTINCT_KEYS NUM_ROWS
IDX_JAX_T11_01 JAX_T11 1036 9832 160000
二,刪除90%的記錄后的空間占用
2.1 刪除90%的記錄
delete from jax_t11
where rowid in (select r1
from (select rowid r1, mod(rownum, 100) r2 from jax_t11) t
where r2 = 90);
commit;
2.2 分析表及索引
begin
dbms_stats.gather_table_stats
( ownname = user, -- 表的擁有者
tabname = upper('jax_t11'), -- 表名稱(chēng)
method_opt = 'for all indexed columns size 1', -- 獲得所有索引列的柱狀圖
cascade = TRUE ); -- 級(jí)聯(lián)獲取 indexes的統(tǒng)計(jì)信息
end;
2.3 查看表占用空間大小
select segment_name,segment_type,bytes/1024/1024 from dba_segments ds
where ds.segment_name in ( 'JAX_T11', upper('idx_jax_t11_01'));
SEGMENT_NAME SEGMENT_TYPE BYTES/1024/1024
JAX_T11 TABLE 17
IDX_JAX_T11_01 INDEX 9
這里我們可以看到,表占空間17M,索引占空間9M;與刪除數(shù)據(jù)前相比,沒(méi)有任何改變
表空間占用明細(xì)
SELECT table_name,tablespace_name,
num_rows, -- 記錄行數(shù)
avg_row_len, --平均行長(zhǎng)度
blocks,
avg_space,
empty_blocks
from user_tables ut
where ut.table_name = 'JAX_T11'
TABLE_NAME TABLESPACE_NAME NUM_ROWS AVG_ROW_LEN BLOCKS AVG_SPACE EMPTY_BLOCKS
JAX_T11 DRP_DATA 14400 100 2146 0 0
索引空間占用明細(xì)
SELECT index_name,table_name,leaf_blocks,distinct_keys,num_rows
from user_indexes ut
where ut.index_name = upper('idx_jax_t11_01')
INDEX_NAME TABLE_NAME LEAF_BLOCKS DISTINCT_KEYS NUM_ROWS
IDX_JAX_T11_01 JAX_T11 998 7654 14400
三,move table rebuild index
3.1 刪除90%的記錄
alter table jax_t11 move;
alter index idx_jax_t11_01 rebuild;
3.2 分析表及索引
begin
dbms_stats.gather_table_stats
( ownname = user, -- 表的擁有者
tabname = upper('jax_t11'), -- 表名稱(chēng)
method_opt = 'for all indexed columns size 1', -- 獲得所有索引列的柱狀圖
cascade = TRUE ); -- 級(jí)聯(lián)獲取 indexes的統(tǒng)計(jì)信息
end;
3.3 查看表占用空間大小
select segment_name,segment_type,bytes/1024/1024 from dba_segments ds
where ds.segment_name in ( 'JAX_T11', upper('idx_jax_t11_01'));
SEGMENT_NAME SEGMENT_TYPE BYTES/1024/1024
JAX_T11 TABLE 2
IDX_JAX_T11_01 INDEX 0.8125
這里我們可以看到,表占空間2M,索引占空間0.8125M;與刪除數(shù)據(jù)前相比,該回收的空間已經(jīng)回收完畢
先把擬清理表空間上的對(duì)象導(dǎo)出,并在其他表空間上創(chuàng)建完成,并確保不影響應(yīng)用;刪除和擬清理表空間相關(guān)的用戶、表空間上對(duì)象、刪除表空間。
解釋起來(lái)比較麻煩,去翻翻數(shù)據(jù)碎片的定義吧。
以后可以定期使用move或者shrink命令重組表。
網(wǎng)頁(yè)標(biāo)題:如何重組oracle的表 oracle拆表
分享網(wǎng)址:http://jinyejixie.com/article20/hpcsjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、網(wǎng)站營(yíng)銷(xiāo)、定制網(wǎng)站、網(wǎng)站排名、動(dòng)態(tài)網(wǎng)站、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)