暂无图片
Oracle表空间数据文件收缩
我来答
分享
手机用户0867
2024-03-19
Oracle表空间数据文件收缩

我使用alter database datafile 'file_name' resize re_gb;

file_name是数据文件路径;

re_gb=round(max(block_id)*8/1024/1024);

无法解决数据文件收缩,那是什么原因?执行以上的resize语句后,asm磁盘的空闲空间反而变小了,这是怎么回事?有哪位大佬有好的方案指导指导

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

Oracle数据库的数据文件收缩主要是通过resize命令来实现的,但是有一些限制和前提条件:

1.  数据文件中的数据块必须是连续的,也就是说,如果数据文件中有碎片(即非连续的数据块),那么resize命令可能无法收缩到期望的大小。

2.  resize命令只能减小数据文件的大小,不能增大。如果你尝试增大数据文件的大小,那么命令将会失败。

3.  resize命令会尝试移动数据文件中的数据块以使其连续,但是这个过程可能会消耗大量的系统资源,并且可能会对数据库的性能产生影响。

4.  如果数据文件中有大量的空闲空间,那么resize命令可能会导致这部分空间被浪费,因为resize命令无法将这部分空间回收。

关于你的问题,asm磁盘的空闲空间反而变小了,这可能是因为resize命令在执行过程中,需要临时分配一些额外的空间来存储移动的数据块,这部分空间在resize命令执行完毕后可能没有被立即回收,从而导致asm磁盘的空闲空间变小。你可以尝试在执行resize命令后,再执行一次coalesce命令,来尝试回收这部分空间。

暂无图片 评论
暂无图片 有用 0
打赏 0
Thomas

我印象里好像resize可以增大数据文件吧。比如现在10G,把它resize到20G

暂无图片 评论
暂无图片 有用 0
打赏 0
大胖

应该是你的表空间设置了自动扩展,之前你创建的表空间的时候create tablespace test datafile '路径‘ size 1g autoextend on,此时你的表空间初始只有1g,最大扩展到32g,但是你设置非自动扩展,然后resize,这个时候你的表空间大小是你resize的大小,直接分配了空间,所以asm空闲小了

暂无图片 评论
暂无图片 有用 0
打赏 0
CHEN Y.F.


如果执行 ALTER DATABASE DATAFILE 'file_name' RESIZE 命令后无法收缩数据文件,并且发现 ASM 磁盘的空闲空间反而减少了,可能有以下几种原因:

  1. 表空间仍有数据占用空间: 在收缩数据文件之前,必须确保表空间内没有数据占用该空间。如果表空间中仍存在数据,则无法收缩数据文件。您可以使用以下查询来检查表空间的空闲空间和使用情况:

    SELECT tablespace_name, sum(bytes)/1024/1024 AS "Total MB",
           sum(bytes)/1024/1024 - sum(max(bytes))/1024/1024 AS "Used MB",
           sum(max(bytes))/1024/1024 AS "Free MB"
    FROM dba_free_space
    WHERE tablespace_name = 'your_tablespace_name'
    GROUP BY tablespace_name;
    
    复制
  2. 数据文件大小不能超过表空间的块大小: 在 Oracle 中,数据文件的大小不能超过表空间的块大小。如果尝试调整大小超过了表空间的块大小,则无法执行收缩操作。

  3. 自动段空间管理(ASSM)的影响: 如果表空间启用了自动段空间管理(Automatic Segment Space Management),则可能会导致数据文件无法收缩。在这种情况下,您可以尝试手动重新分配段,然后再执行收缩操作。

  4. ASM 磁盘空间的重分配: ASM 磁盘空间的空闲空间减少可能是由于 ASM 磁盘组的重新平衡或者数据重分布导致的。ASM 可能会将数据重新分布到其他磁盘上,从而减少了原始磁盘的空闲空间。这是 ASM 的正常行为,不一定与数据文件的收缩操作直接相关。

在处理无法收缩数据文件的情况时,建议逐一排查以上可能的原因,并根据具体情况采取相应的解决措施。如果仍然无法解决问题,可能需要进一步检查日志文件以获取更多的错误信息。

暂无图片 评论
暂无图片 有用 0
打赏 0
请叫我囧半仙

在收缩表空间之前,你得先把该表空间中的表进行收缩,表收缩完成后再收缩表空间

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


请输入正文
提交
相关推荐
Oracle 数据库被卸载了,只剩这些文件还能恢复数据吗?
回答 5
已采纳
安装同版本软件编写pfile启动数据库创建spfile就完事了
Oracle的闩会“自旋”吗?
回答 1
已采纳
闩是一种锁,锁是串行化设备,而串行化设备会妨碍可扩展性。等待闩可能是一个代价很高的操作。如果闩不是立即可用的,就得等待(大多数情况下都是如此)。在一台多CPU机器上,会话会自旋(spin),也就是说,
oracle分区表数据导入效率
回答 4
已采纳
开并行和nologging会加快导入速度,建议使用。ctas创建分区表:createtable分区表名NOLOGGINGPARALLEL8TABLESPACE表空间名称ASselect/PARALLE
Oracle19C
回答 1
可以有偿
不使用dbms_backup_restore.resetcfileSection(11)能否清楚控制文件
回答 1
暂无文字回复
Oracle rman通道数量配置有什么建议?
回答 2
可以看看这篇文章,介绍的非常好https://www.modb.pro/db/43978
UNDO表空间清理
回答 1
已采纳
查看active状态的segmentSELECTb.usn,tablespacename,segmentname,bytes"ExtentSize",count(extentid)
oracle如何知道库每天的访问量?
回答 2
已采纳
selectcount()fromsys.aud$whereaction100andntimestampbetweensysdate1andsysdate;
数据库即服务Database As Services必须具备什么功能?
回答 1
已采纳
数据库即服务(DBaaS)是一种数据库平台建设架构和数据管理运营方法,在云计算的框架下,能够将数据库功能作为服务提供给一个或多个应用使用。所以数据库即服务必须支持以下功能:1)不同应用租户共享数据库平
备份控制文件 for standby 报错ORA-15122: ASM 文件名 ‘+DATAO1_MF_1_HW6DTWQ8_.LOG’ 包含无效的文件编号
回答 1
请提供。(1)数据库版本。(2)具体执行命令。