如何重组oracle的表,oracle 改表结构

如何对oracle进行 REORG?

alter table tablename move [tablespace tablespacename];

创新互联建站服务项目包括旺苍网站建设、旺苍网站制作、旺苍网页制作以及旺苍网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,旺苍网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到旺苍省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

delete数据不会回收已经分配出去的block(也就是delete前后你查看user_segments中的信息不会有改动)。

但这时你对表执行analyze后查看dba_tables表的话会发现empty_block数目变大或者avg_space数据变小。

如果你希望减少该table占用的实际block数目,

你需要使用move操作将table重建,oracle才会重新分配block,这时table上的索引会失效,需要rebuild。

一,创建测试环境

1.1 创建测试表,为其插入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 创建索引

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 ); -- 级联获取 indexes的统计信息

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, -- 记录行数

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 ); -- 级联获取 indexes的统计信息

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;与删除数据前相比,没有任何改变

表空间占用明细

SELECT table_name,tablespace_name,

num_rows, -- 记录行数

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 ); -- 级联获取 indexes的统计信息

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;与删除数据前相比,该回收的空间已经回收完毕

在oracle中怎么将两个表合在一起?

工具/材料:Management Studio。

1、首先在桌面上,点击“Management Studio”图标。

2、之后在该界面中,点击左上角“新建查询”选项。

3、接着在该界面中,输入将两个表合在一起的sql语句“select * from test1,test2;”。

4、然后在该界面中,点击工具栏里的“运行三角形”图标。

5、最后在该界面中,显示成功将两个表合在一起。

Oracle数据库怎么把两个表合并成为一个新的表?

1、临时表

WITH CTE AS (

SELECT T1.Sno,T1.Cno, T.Cname,T.Cpno,T.Ccredit,T.Grade

FROM Course T

INNER JOIN SC T1 ON T.Cno =T1.Cno

) SELECT * FROM

2、创建表

CREATE TABLE AA AS

SELECT T1.Sno,T1.Cno, T.Cname,T.Cpno,T.Ccredit,T.Grade

FROM Course T

INNER JOIN SC T1 ON T.Cno =T1.Cno


网站名称:如何重组oracle的表,oracle 改表结构
URL链接:http://ybzwz.com/article/hchjhd.html