如何将oracle数据库dmp文件合并成一张表你的要求比较不常见,数据又很多,没有什么好的办法
建议先用imp倒入数据库,然后在数据库层合并表
这个合并注意commit的频率,不要每条都commit,也不要太久不commit.可以写个简单程序或者存储过程,能快一些
如何对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
【如何重组oracle的表 oracle重建数据库】索引空间占用明细
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 tablerebuild 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 10G EXPRESS,REORG怎么操作,请指导详细操作步骤,谢谢!reorg 通过重构行来消除“碎片”数据并压缩信息,对表进行重组 。还有一个功能就是可以将表中如何重组oracle的表的数据按照某个索引关键字的顺序排列,从而可以减少某些查询i/o数量 。当数据库里某个表中的记录变化量很大时,需要在表上做REORG操作来优化数据库性能,值得注意的是,针对数据库对象的大量操作,如反复地删除表,存储过程,会引起 系统表中数据的频繁改变,在这种情况下,也要考虑对系统表进行REORG操作 。
执行REORG可以考虑分为表上有索引和没有索引两种情况如何重组oracle的表:
1) 如表名为DB2INST1.STAFF,索引名为DB2INST1.ISTAFF
SQL:reorg table db2inst1.staff index db2inst1.istaff use tempspace1
建议REORG时使用USE参数指定数据重排时使用的临时表空间,否则,REORG工作将会在表所在表空间中原地执行.如果表上有多个索引,INDEX参数值请使用最为重要的索引名.
2)表上没有索引如何重组oracle的表:
reorg table db2inst1.staff use tempspace1
reorg table sysibm.systables use tempspace1
oracle 数据库查询两个表然后把结果合并成一个表实现的方法和详细的操作步骤如下:
1、首先,在计算机桌面上双击“
Management Studio”图标,如下图所示 , 然后进入下一步 。
2、其次,完成上述步骤后,单击左上角的“新建查询”按钮 , 如下图所示,然后进入下一步 。
3、接着 , 完成上述步骤后,在界面中输入sql语句“
select * from test1,test2;” , 将两个表合并成一个表,如下图所示,然后进入下一步 。
4、然后,完成上述步骤后,单击下图红框标注的工具栏中的“运行三角形”图标 , 然后进入下一步 。
5、最后,完成上述步骤后,在此界面中 , 表明两个表已成功合并,如下图所示 。这样,问题就解决了 。
如何用ORACLE将两张表的内容合并成一张新表create table c as select c.date date1,code code ,money money,count count from a,b,c
where a.code=b.code and a.date=b.date
and a.code=c.code
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重建数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。
推荐阅读
- linux命令访问百度,linux访问端口号命令
- 金毛游戏动作,金毛爱玩什么游戏
- 阿胶糕直播话术,阿胶直播怎么介绍
- windows系统sp1的简单介绍
- 通信如何营销日记,通信行业的营销方案
- 如何改进营销,如何改进营销组合战略?
- 12306抢票利用python爬虫成功,抢票 python
- oracle过程如何执行 oracle执行顺序是什么
- 跨境电商公司如何定位,跨境店铺定位可以从哪些方面考虑