我有个数据库,里面有100+张表,其中有些表的数据相当大(超过百万条)!
现在当我把这个数据库的所有东西导入到另一台机器的数据库中,并把表里所有的字段都删除了后!
在执行DML语句时,速度明显比不上新建表DML操作的速度!这是为什么?怎样可以解决这个问题(在不需要创建类似表的情况下)!
现在当我把这个数据库的所有东西导入到另一台机器的数据库中,并把表里所有的字段都删除了后!
在执行DML语句时,速度明显比不上新建表DML操作的速度!这是为什么?怎样可以解决这个问题(在不需要创建类似表的情况下)!
简单的方法是:
exp出数据
drop user;
create user;
imp 数据;
复杂的方法是(10g):
对每个表执行如下操作:
alter table table_name enable row movement;
alter table table_name shrink space cascade;
alter table table_name shrink space cascade;
各表示什么意思?可以达到我想要的效果吗?
而且网上有说开启了row movement属性会使公共回退段的负荷增加!
还有,谁能解释下 为什么会出现这中情况?
我用的是oracle90版本的!
我也知道就是你所说的这种情况,是在执行DML操作时,就象是以前的数据没删除似的!
什么是block?为什么会出现这种情况?我该怎么解决呢?
1 这个时候你首先看你的数据库是否为归档模式,如果是,改为非归档;
2 重建一个大回滚段,并将其他回滚段offline
3 调大你的sga_max_size和bd_cach_size
4 有没有索引和约束?有的话insert后再建立索引,约束也要在insert之后再enable
imp的除了基本的表格,还有很多其它数据.
其实就是因为LZ是用的delete表来清空,表的高水位并没有改变。要降低高水位,你用的是9I,就:alter table xxx move;
执行后,你的DML会快很多。
把 FSFI 参数变小了;或者说它把 user_free_space 里的block数变多了;
会这样吗?怎么解决?