暂无图片
exp/imp怎样清除高水位?
我来答
分享
神武天尊
2022-04-24
exp/imp怎样清除高水位?

看网上说,oracle使用exp/imp能够清除表的高水位线,但我实际使用时却发现它并不能清除高水位线:例如原表做了delete操作,有1000个空块,然后对其进行exp导出,导出完成后删除这张表 drop table XX purge; 然后使用imp导入之前备份的表,经查仍然有1000个空块,高水位并没有降低。另外,我尝试使用expdp/impdp的方式,仍然没有把高水位降下来。

请问,关于exp/imp能清除高水位线的说法是真的吗?如果是真的,要怎样操作才能实现呢?

我来答
添加附件
收藏
分享
问题补充
5条回答
默认
最新
薛晓刚

假设你有1000w记录,删除了990万。你再进行导出导入。我不相信降不下来。

另外你可以采用shrink的方式回收表空间。

暂无图片 评论
暂无图片 有用 0
打赏 0
神武天尊
题主
2022-04-24
您说的是对的。但我们可能不在同一个频道上面啊。
cqiwen

我认为exp/imp能清除高水位线的说法是假的!官方文档中并没有找到类似的描述,这都是民间传说。

暂无图片 评论
暂无图片 有用 0
打赏 0
杨卓

正常情况如果你的表碎片很多,使用exp,expdp,shrink都是可以降低高水位线的。 但是还有其它额外的因素导致你看到的blocks无法降低:

1.表没有什么碎片,你说的1000个block free,是oracle extents申请的时候每次都是批量化申请,有可能就是一次性申请多个,然后有1000个free,就算drop table ,imp重新导入,只是还原这个操作而已!
这个可能性可以通过创建一个表空间,分配extens固定大小不使用oracle自扩展分配的机制进行排除

2.表中的行长度比较大,无法有效利用blocks的空间,做一个极端的假设,一个blocks 8k,一个行记录5k,那么一个blocks insert 时只能存储一行记录,那么blocks就存在大量的free无法重用;
这个比较麻烦可以通过分析行记录,调试blocks非标准块大小进行测试;
这个还有个PCTFREE相关的参数问题也要排除;

3.你说的空块的相关记录查询是否准确,是否受到统计信息的影响,如果查询的记录统计信息不准确是否干扰你的判断,这个可以测试收集统计信息操作对比结果进行排查

暂无图片 评论
暂无图片 有用 1
打赏 0
dbtiger

您好,exp/imp或者数据泵,这2套工具都属于逻辑导入导出。首先要理解逻辑备份和物理备份的区别,逻辑备份是基于sql语句将数据转化或存储为二进制文件,理解了这点,那是否能够真正降低高水位线就不攻自破了。

另外,也需要理解高水位的概念:
1.理论是dml操作产生了碎片未清理;
2.即使1做了,但是统计信息未及时触发更新,查看到的系统视图也不是最新数据。
基于上述这2个概念,就通透了。

暂无图片 评论
暂无图片 有用 2
打赏 0
cqiwen

看下我的实验数据再下结论吧:https://www.modb.pro/db/397933

其实我之前也觉得数据泵能降低高水位,但事实胜于雄辩,有些情况下此方法并不能清除高水位,具体原因不是很明朗。

暂无图片 评论
暂无图片 有用 1
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
这种报错有大神遇到过吗?The method specified in wallet_location is not supported. Location: /usr/local/weblogic
回答 1
没遇到过,walletlocation中指定的方法不受支持。检查你的walletlocation配置方法吧。
oracle 11g RAC crsctl status res -t 显示异常质询
回答 5
虽然和你的case不是完全匹配,但可以参考看看一下这个文章:ID1086563.1,估计也是一个bug之类的东西。http://blog.sina.com.cn/s/blog538285a701019
rac数据库转化为两个单机的数据库
回答 3
请说明两套数据库的数据需要如何分布?如果需要一样的ADG然后failover,如果是空库,重装就可以了,先deletenode
oracle分区表,在迁移的时候,老的分区可以迁移到新的表空间,但是新的分区还是会在老的空间,那这种迁移,需要一直进行的?
回答 2
altertablexxxxxxmodifydefaultattributestablespacexxxxxx;
ORA-01103: database name 'DHH' in control file is not 'DHHNEW'
回答 5
问题解决了吗?
oracle生产环境都是什么系统?
回答 1
已采纳
一般是Linux,centos,UNIX
rose 来双击热备 oracle,模式 是和rac 差不多的吗?
回答 2
已采纳
rose是双机高可用软件,正常来说,针对同一个实例,只能做主备模式,即主机运行,备机停止;而rac既可以实现高可用(两台机器故障任一台都不影响业务),也有负载均衡的作用,两台机器同时运行,scanip
Oracle 19c 打补丁到最新的RU:35319490,删库后重新全导入的一个库,还需要再打一次补丁吗?
回答 1
不用,你是删库,又不是删除软件
dg跨平台版本
回答 6
估计有点难。首先你这两个OS版本跨度太大,oel5上应该适合安装10g,而oel7上适合安装11g,所以你在安装数据库这块会很难达到一致版本。所以建议还是不要这样去搭建DG,可以考虑搭建ogg实现数据
Oracle数据库怎样抓出带有自定义函数的SQL?
回答 6
已采纳
在开发过程中,应该避免在SQL语句中调用自定义函数,可以通过以下SQL语句抓出调用了自定义函数的SQL。selectdistinctsqlid,sqltext,module fromV$SQ