oracle如何重组表,oracle重组表的语句
如何对oracle进行 REORG?
alter table tablename move [tablespace tablespacename];
创新互联公司,为您提供成都网站建设、成都网站制作、网站营销推广、网站开发设计,对服务围栏护栏等多个行业拥有丰富的网站建设及推广经验。创新互联公司网站建设公司成立于2013年,提供专业网站制作报价服务,我们深知市场的竞争激烈,认真对待每位客户,为客户提供赏心悦目的作品。 与客户共同发展进步,是我们永远的责任!
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数据库怎么把两个表合并成为一个新的表?
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 数据库查询两个表然后把结果合并成一个表
实现的方法和详细的操作步骤如下:
1、首先,在计算机桌面上双击“
Management Studio”图标,如下图所示,然后进入下一步。
2、其次,完成上述步骤后,单击左上角的“新建查询”按钮,如下图所示,然后进入下一步。
3、接着,完成上述步骤后,在界面中输入sql语句“
select * from test1,test2;”,将两个表合并成一个表,如下图所示,然后进入下一步。
4、然后,完成上述步骤后,单击下图红框标注的工具栏中的“运行三角形”图标,然后进入下一步。
5、最后,完成上述步骤后,在此界面中,表明两个表已成功合并,如下图所示。这样,问题就解决了。
文章标题:oracle如何重组表,oracle重组表的语句
分享链接:http://abwzjs.com/article/hdiphg.html