做个试验,看看是否能有所帮助。
达梦查询表空间数据文件中各表数据页位置分布_after231011__202508011001.sql
这个SQL文件里是一个脚本,非侵入性的,也就是不会在库里创建对象或修改数据,只是做查询。
注意,因为 V$LOB_SEG、V$SEGMENT_PAGES 等系统动态视图查询时会扫描数据页,可能会耗时比较长。
这个脚本前面我已经修改表空间名为你用的这个PMSNB,脚本执行后会列出三个结果集: 结果集1:表空间下各数据文件的存储内容占用位置情况 结果集2:表空间下各表相关数据页面在数据文件中的位置占用情况 结果集3:表空间下各表、各数据段在数据文件中的位置占用情况
先看看这个脚本是否能正常执行,如果能正常跑,就看一下输出内容,关键看这三个结果集最后的 MAX_PAGE_POS/POSITION_MB,也就是数据页面在数据文件中所处的绝对位置最大值。
因为达梦是使用类似Oracle的数据文件存储方式,而不是每个表单独文件存储,所以当某个数据页面占用了数据文件的尾部位置,就可能会引起收缩失败。通过查询结果集的位置最大值,能够分析出是哪张表以及是哪个索引占用了数据文件尾部位置。
如果处于尾部的表不多,且表不是很大的话,可以测试下用ALTER TABLE MOVE TABLESPACE的方法把这个表的数据先挪到其他表空间,等当前表空间收缩成功后再移动回来。
或者,实在不行,就用dexp/dimp工具,把数据导入到其他表空间里。
做个试验,看看是否能有所帮助。
达梦查询表空间数据文件中各表数据页位置分布_after231011__202508011001.sql
这个SQL文件里是一个脚本,非侵入性的,也就是不会在库里创建对象或修改数据,只是做查询。
注意,因为 V$LOB_SEG、V$SEGMENT_PAGES 等系统动态视图查询时会扫描数据页,可能会耗时比较长。
这个脚本前面我已经修改表空间名为你用的这个PMSNB,脚本执行后会列出三个结果集:
结果集1:表空间下各数据文件的存储内容占用位置情况
结果集2:表空间下各表相关数据页面在数据文件中的位置占用情况
结果集3:表空间下各表、各数据段在数据文件中的位置占用情况
先看看这个脚本是否能正常执行,如果能正常跑,就看一下输出内容,关键看这三个结果集最后的 MAX_PAGE_POS/POSITION_MB,也就是数据页面在数据文件中所处的绝对位置最大值。
因为达梦是使用类似Oracle的数据文件存储方式,而不是每个表单独文件存储,所以当某个数据页面占用了数据文件的尾部位置,就可能会引起收缩失败。通过查询结果集的位置最大值,能够分析出是哪张表以及是哪个索引占用了数据文件尾部位置。
如果处于尾部的表不多,且表不是很大的话,可以测试下用ALTER TABLE MOVE TABLESPACE的方法把这个表的数据先挪到其他表空间,等当前表空间收缩成功后再移动回来。
或者,实在不行,就用dexp/dimp工具,把数据导入到其他表空间里。