oracle如何重構(gòu)表 oracle表重建

oracle如何將有相同數(shù)據(jù)的兩張表整合為一張表

給你個思路,先修改B表的表結(jié)構(gòu),增加A表中的兩個列,然后更新B表,用來將A表中的數(shù)據(jù)插入到B表中對應(yīng)的列。

成都創(chuàng)新互聯(lián)專注于岐山企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城系統(tǒng)網(wǎng)站開發(fā)。岐山網(wǎng)站建設(shè)公司,為岐山等地區(qū)提供建站服務(wù)。全流程定制開發(fā),專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

oracle數(shù)據(jù)庫,結(jié)果集拆分重構(gòu)。

with?sleest?as(

select?1?rn,1111111111??a,?1?b,?'c1'?c?,'d1'?d?from?dual

union?all

select?2,222222?,?3?,?'c2'?,'d2'?from?dual

)

--select?*?from?sleest;

select?distinct

--new_rn第一條存值,后續(xù)為空

case?when?levels.column_value?1?then?null?else?t.rn?end?as?new_rn,??

t.rn,

levels.column_value?as?sub_order,??

--4可以通過參數(shù)傳遞

trim(regexp_substr(t.a,?'(.{1,4})',?1,?levels.column_value))??as?a,??

t.b,

--c第一條存值,后續(xù)為空

case?when?levels.column_value?1?then?null?else?t.c?end?as?c?,

t.d

from?sleest?t,

table(

cast(

multiset(

--4可以通過參數(shù)傳遞

select?level?from?dual?connect?by??level?=?length(regexp_replace(trim(regexp_replace(t.a,'(.{4})','\1?')),?'[^?]+'))??+?1

)?as?sys.OdciNumberList

)

)?levels

order?by?rn,?sub_order

構(gòu)造臨時數(shù)據(jù):

根據(jù)需求參數(shù)4進行劃分:

參考stackover上的一個解決方案改的,原文地址如下:

oracle如何重建表的id列

create sequence seq_id start with 1000 increment by 1 ;

update t set id=seq_id.nextval ;

1000w可能會稍微慢點,正常,看你的存儲如何了,

Oracle 中對于大表是怎樣更改表結(jié)構(gòu)并且在

修改表名:

alter table 表名 rename to 新名

添加字段:

alter table 表名 add 字段名 字段類型

刪除字段:

alter table 表名 drop column 字段名

修改字段:

alter table 表名 rename column 原字段名 to 新名;

修改字段類型(前提:表中無數(shù)據(jù))

alter table 表名 modify 字段名 新類型;

例如:String deleteColumn="alter table t_user drop column sname";

ORACLE 10G EXPRESS,REORG怎么操作,請指導詳細操作步驟,謝謝!

reorg 通過重構(gòu)行來消除“碎片”數(shù)據(jù)并壓縮信息,對表進行重組。 還有一個功能就是可以將表中的數(shù)據(jù)按照某個索引關(guān)鍵字的順序排列,從而可以減少某些查詢i/o數(shù)量。 當數(shù)據(jù)庫里某個表中的記錄變化量很大時,需要在表上做REORG操作來優(yōu)化數(shù)據(jù)庫性能,值得注意的是,針對數(shù)據(jù)庫對象的大量操作,如反復(fù)地刪除表,存儲過程,會引起 系統(tǒng)表中數(shù)據(jù)的頻繁改變,在這種情況下,也要考慮對系統(tǒng)表進行REORG操作。

執(zhí)行REORG可以考慮分為表上有索引和沒有索引兩種情況:

1) 如表名為DB2INST1.STAFF,索引名為DB2INST1.ISTAFF

SQL:reorg table db2inst1.staff index db2inst1.istaff use tempspace1

建議REORG時使用USE參數(shù)指定數(shù)據(jù)重排時使用的臨時表空間,否則,REORG工作將會在表所在表空間中原地執(zhí)行.如果表上有多個索引,INDEX參數(shù)值請使用最為重要的索引名.

2)表上沒有索引:

reorg table db2inst1.staff use tempspace1

reorg table sysibm.systables use tempspace1

如何對oracle進行 REORG?

alter table tablename move [tablespace tablespacename];

delete數(shù)據(jù)不會回收已經(jīng)分配出去的block(也就是delete前后你查看user_segments中的信息不會有改動)。

但這時你對表執(zhí)行analyze后查看dba_tables表的話會發(fā)現(xiàn)empty_block數(shù)目變大或者avg_space數(shù)據(jù)變小。

如果你希望減少該table占用的實際block數(shù)目,

你需要使用move操作將table重建,oracle才會重新分配block,這時table上的索引會失效,需要rebuild。

一,創(chuàng)建測試環(huán)境

1.1 創(chuàng)建測試表,為其插入16萬條記錄

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'), -- 表名稱

method_opt = 'for all indexed columns size 1', -- 獲得所有索引列的柱狀圖

cascade = TRUE ); -- 級聯(lián)獲取 indexes的統(tǒng)計信息

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;

表空間占用明細

SELECT table_name,tablespace_name,

num_rows, -- 記錄行數(shù)

avg_row_len, --平均行長度

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

索引空間占用明細

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'), -- 表名稱

method_opt = 'for all indexed columns size 1', -- 獲得所有索引列的柱狀圖

cascade = TRUE ); -- 級聯(lián)獲取 indexes的統(tǒng)計信息

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ù)前相比,沒有任何改變

表空間占用明細

SELECT table_name,tablespace_name,

num_rows, -- 記錄行數(shù)

avg_row_len, --平均行長度

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

索引空間占用明細

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'), -- 表名稱

method_opt = 'for all indexed columns size 1', -- 獲得所有索引列的柱狀圖

cascade = TRUE ); -- 級聯(lián)獲取 indexes的統(tǒng)計信息

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)回收完畢

當前文章:oracle如何重構(gòu)表 oracle表重建
路徑分享:http://muchs.cn/article4/hjdeie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、網(wǎng)站策劃建站公司、企業(yè)網(wǎng)站制作、App設(shè)計、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計