暂无图片
可否对一个bigfile的大表空间resize让它释放空间
我来答
分享
Garry
2021-05-13
可否对一个bigfile的大表空间resize让它释放空间

各位好,请问可否对一个bigfile的大表空间resize让它释放空间,
表空间中有20t的空间是删除历史的表释放出来的,想着resize变小。然后让其他表空间用。

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

–首先不是你drop 表就能resize回收表空间,因为要看这个表在数据文件中块的位置,只有这个表后面都没有其它对象的块才能被resize
–如果不能直接resize就需要move 表空间中的表才能回收表空间的空间,相对还是比较麻烦
–最简单的回收表空间空间的方式是数据泵导入导出,但是这个得先确认当前生产环境可以这么做

–下面这个SQL可以查询一个表空间数据文件可以resize的最小大小 &tbs是表空间名称
select tablespace_name,
savings,
‘alter database datafile ‘’’ || file_name || ‘’’ resize ’ ||
smallest || ‘m;’ cmd,
‘alter database datafile ‘’’ || file_name || ‘’’ autoextend on;’ cmd2
from (select file_name,
a.tablespace_name,
a.file_id,
ceil((nvl(hwm, 1) * c.block_size) / 1024 / 1024) + 1000 smallest,
ceil(a.blocks * c.block_size / 1024 / 1024) currsize,
ceil(a.blocks * c.block_size / 1024 / 1024) -
ceil((nvl(hwm, 1) * c.block_size) / 1024 / 1024) savings
from dba_data_files a,
(select /*+ parallel(32) */
file_id, max(block_id + blocks - 1) hwm
from dba_extents
where TABLESPACE_NAME in (’&tbs’)
group by file_id) b,
V$DATAFILE c
where a.file_id = b.file_id(+)
and a.file_id = c.file#
and a.TABLESPACE_NAME in (’&tbs’))
–where savings > 100
order by 1, 2;

暂无图片 评论
暂无图片 有用 0
打赏 0
你好我是李白

可以,但是需要所有segment在你要收缩的size高水位以下。
可以通过附件中脚本查询位于你要收缩size之上的段,进行处理,可以的话,move到其他表空间,或进行其他降低hwm的操作。
脚本来自Mos How to Resolve ORA-03297 When Resizing a Datafile by Finding the Table Highwatermark (Doc ID 130866.1)

暂无图片 评论
暂无图片 有用 0
打赏 0
你好我是李白
暂无图片 评论
暂无图片 有用 1
打赏 0
吾喾

已使用状态,一般是不能

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

可否知道resize的速度快吗,可否给个量化的参照。

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


请输入正文
提交
相关推荐
oracle的EMCC是收费的吗?
回答 1
已采纳
商业用肯定是要收费的。如果平时自己监控数据库使用,可以用,一般白嫖。
数据泵导入报错ora-39353
回答 4
lsltr$ORACLEHOME/oracore/zoneinfo
请问下rman正在还原,crt给掉线重连接了,现在怎么调出来执行记录?
回答 1
可以看alert日志,或者crt没关掉的话,滚轮往上翻,还是可以看到记录,crt能看到的记录取决于sessionoptions里scrollbackbuffer设置,默认500行。
Oracle 查询某条SQL产生的日志大小
回答 3
已采纳
可以用下面的存储过程试试:createorreplaceproceduredosql(psqlinvarchar2)as  lstartredonumber; &nbsp
oracle一般什么情况下需要使用视图?
回答 1
以下内容为个人工作经验,非教科书标准答案1.数据查询权限控制:比如不想让指定用户看到某些行或者某些列,就可以创建一个这样的视图,然后将这个视图授权给该用户查询,此时用户无原表权限,但是能看这个视图里的
Oracle只能在服务器(本机)上能正常连接,在内网别的ip地址主机上连不上,是哪里设置导致的?
回答 2
从以下几个方面去检查看看:1、防火墙阻止连接:检查内网中的防火墙设置,确保已经允许从其它主机访问该服务器上的Oracle端口(默认为1521)。您可以尝试暂时禁用防火墙,然后再次尝试连接。2、监听器没
crsctl start cluster 必须使用root权限吗?
回答 1
已采纳
是的
如何找到登录Oracle数据库失败的客户端IP
回答 3
已采纳
1、可以通过以下触发器,将登录失败的IP来源记录到alertSID.log日志中;CREATEORREPLACETRIGGERlogondeniedtoalerttestAFTERservererro
PDB$SEED也可以是READ WRITE状态吗?
回答 4
已采纳
使用这个参数是有风险的,如果可以的话你看下这两篇文章https://www.anbob.com/archives/5149.htmlhttps://mikedietrichde.com/2020/02
在测试环境新装了oracle19c,装完以后,建表空间用户全都报ERROR at line 1: ORA-65090: operation only allowed in a container database,怎么处理?
回答 1
altersessionsetcontainer自己的pdb;然后创建表空间